Enviar mensaje de correo electrónico

Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("text/html"); intent.putExtra(Intent.EXTRA_EMAIL, "[email protected]"); intent.putExtra(Intent.EXTRA_SUBJECT, "Subject"); intent.putExtra(Intent.EXTRA_TEXT, "I'm email body."); startActivity(Intent.createChooser(intent, "Send Email")); 

El código anterior abre un cuadro de diálogo que muestra las siguientes aplicaciones: – Bluetooth, Google Docs, Yahoo Mail, Gmail, Orkut, Skype, etc.

En realidad, quiero filtrar estas opciones de lista. Quiero mostrar sólo aplicaciones relacionadas con correo electrónico, por ejemplo, Gmail, Yahoo Mail. ¿Cómo hacerlo?

He visto tal ejemplo en la aplicación 'Android Market'.

  1. Abrir aplicación de Android Market
  2. Abra cualquier aplicación donde el desarrollador haya especificado su dirección de correo electrónico. (Si no puede encontrar esta aplicación simplemente abra mi aplicación: – market: // details? Id = com.becomputer06.vehicle.diary.free, O buscar por 'Vehicle Diary')
  3. Desplácese hasta 'DESARROLLADOR'
  4. Haga clic en "Enviar correo electrónico"

El cuadro de diálogo sólo muestra aplicaciones de correo electrónico, por ejemplo, Gmail, Yahoo Mail, etc. No muestra Bluetooth, Orkut, etc. ¿Qué código produce dicho diálogo?

Proporcione una respuesta, para que pueda aumentar mi "tasa de aceptación". 😉

Cuando cambie su intention.setType como abajo obtendrá

 intent.setType("text/plain"); 

Use android.content.Intent.ACTION_SENDTO (new Intent.ACTION_SENDTO); ) para obtener sólo la lista de clientes de correo electrónico, sin Facebook ni otras aplicaciones. Sólo los clientes de correo electrónico.

No sugeriría que usted consiga directamente a la aplicación del email. Deje que el usuario elija su aplicación de correo electrónico favorito. No lo obligue.

Si utiliza ACTION_SENDTO, putExtra no funciona para agregar el asunto y el texto a la intención. Utilice Uri para agregar el texto del sujeto y del cuerpo.

EDIT: Podemos usar message/rfc822 lugar de "text/plain" como el tipo MIME. Sin embargo, eso no indica "sólo ofrecen clientes de correo electrónico" – que indica "ofrecer cualquier cosa que soporte los datos de mensaje / rfc822". Eso podría incluir fácilmente alguna aplicación que no son clientes de correo electrónico.

message/rfc822 soporta tipos MIME de .mhtml, .mht, .mime

La respuesta aceptada no funciona 4.1.2. Esto debería funcionar en todas las plataformas:

 Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts( "mailto","[email protected]", null)); emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Subject"); emailIntent.putExtra(Intent.EXTRA_TEXT, "Body"); startActivity(Intent.createChooser(emailIntent, "Send email...")); 

Espero que esto ayude.

Actualización: Según marcwjj , parece que en 4.3, tenemos que pasar la matriz de cadena en lugar de una cadena de dirección de correo electrónico para que funcione. Podríamos necesitar agregar una línea más:

 intent.putExtra(Intent.EXTRA_EMAIL, addresses); // String[] addresses 

Ref link

Hay tres enfoques principales:

 String email = /* Your email address here */ String subject = /* Your subject here */ String body = /* Your body here */ String chooserTitle = /* Your chooser title here */ 

1. Uri personalizado:

 Uri uri = Uri.parse("mailto:" + email) .buildUpon() .appendQueryParameter("subject", subject) .appendQueryParameter("body", body) .build(); Intent emailIntent = new Intent(Intent.ACTION_SENDTO, uri); startActivity(Intent.createChooser(emailIntent, chooserTitle)); 

2. Uso de extras de Intent :

 Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:" + email)); emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject); emailIntent.putExtra(Intent.EXTRA_TEXT, body); //emailIntent.putExtra(Intent.EXTRA_HTML_TEXT, body); //If you are using HTML in your body text startActivity(Intent.createChooser(emailIntent, "Chooser Title")); 

3. Soporte de la Biblioteca ShareCompat :

 Activity activity = /* Your activity here */ ShareCompat.IntentBuilder.from(activity) .setType("message/rfc822") .addEmailTo(email) .setSubject(subject) .setText(body) //.setHtmlText(body) //If you are using HTML in your body text .setChooserTitle(chooserTitle) .startChooser(); 

Esto se cita de Android oficial doc, lo he probado en Android 4.4, y funciona perfectamente. Vea más ejemplos en https://developer.android.com/guide/components/intents-common.html#Email

 public void composeEmail(String[] addresses, String subject) { Intent intent = new Intent(Intent.ACTION_SENDTO); intent.setData(Uri.parse("mailto:")); // only email apps should handle this intent.putExtra(Intent.EXTRA_EMAIL, addresses); intent.putExtra(Intent.EXTRA_SUBJECT, subject); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } } 

Una respuesta tardía, aunque me di cuenta de una solución que podría ayudar a otros

 Intent emailIntent = new Intent(Intent.ACTION_SENDTO); emailIntent.setData(Uri.parse("mailto: [email protected]")); startActivity(Intent.createChooser(emailIntent, "Send feedback")); 

Esta era mi salida (Gmail + Inbox y nada más)

Introduzca aquí la descripción de la imagen

Tengo esta solución del sitio de desarrolladores de Google

Tratar:

 intent.setType("message/rfc822"); 

Si desea sólo los clientes de correo electrónico que debe utilizar android.content.Intent.EXTRA_EMAIL con una matriz. Aquí va un ejemplo:

 final Intent result = new Intent(android.content.Intent.ACTION_SEND); result.setType("plain/text"); result.putExtra(android.content.Intent.EXTRA_EMAIL, new String[] { recipient }); result.putExtra(android.content.Intent.EXTRA_SUBJECT, subject); result.putExtra(android.content.Intent.EXTRA_TEXT, body); 

El código siguiente funciona para mí bien.

 Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("message/rfc822"); intent.putExtra(Intent.EXTRA_SUBJECT, subject); intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"abc@gmailcom"}); Intent mailer = Intent.createChooser(intent, null); startActivity(mailer); 

Editar: no funciona más con las nuevas versiones de Gmail

Esta fue la única manera que encontré en el momento de conseguir que funcione con cualquier personaje.

La respuesta de doreamon es la forma correcta de hacerlo ahora, ya que funciona con todos los personajes en las nuevas versiones de Gmail.

Respuesta antigua:


Aquí esta el mio. Parece que funciona en todas las versiones de Android, con sujeto y soporte de cuerpo de mensaje, y total de caracteres utf-8 de apoyo:

 public static void email(Context context, String to, String subject, String body) { StringBuilder builder = new StringBuilder("mailto:" + Uri.encode(to)); if (subject != null) { builder.append("?subject=" + Uri.encode(Uri.encode(subject))); if (body != null) { builder.append("&body=" + Uri.encode(Uri.encode(body))); } } String uri = builder.toString(); Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse(uri)); context.startActivity(intent); } 

Ninguna de estas soluciones funcionaba para mí. Aquí hay una solución mínima que funciona en Lollipop. En mi dispositivo, solo Gmail y las aplicaciones de correo nativo aparecen en la lista de selectores resultante.

 Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:" + Uri.encode(address))); emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject); emailIntent.putExtra(Intent.EXTRA_TEXT, body); startActivity(Intent.createChooser(emailIntent, "Send email via...")); 

¡El siguiente código funcionó para mí !!

 import android.support.v4.app.ShareCompat; . . . . final Intent intent = ShareCompat.IntentBuilder .from(activity) .setType("application/txt") .setSubject(subject) .setText("Hii") .setChooserTitle("Select One") .createChooserIntent() .addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET) .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); activity.startActivity(intent); 

Funciona en todas las versiones de Android:

 String[] TO = {"[email protected]"}; Uri uri = Uri.parse("mailto:[email protected]") .buildUpon() .appendQueryParameter("subject", "subject") .appendQueryParameter("body", "body") .build(); Intent emailIntent = new Intent(Intent.ACTION_SENDTO, uri); emailIntent.putExtra(Intent.EXTRA_EMAIL, TO); startActivity(Intent.createChooser(emailIntent, "Send mail...")); 

Esto funciona para mí:

 Intent intent = new Intent(Intent.ACTION_SENDTO); intent.setData(Uri.parse("mailto:")); intent.putExtra(Intent.EXTRA_EMAIL , new String[] { "[email protected]" }); intent.putExtra(Intent.EXTRA_SUBJECT, "My subject"); startActivity(Intent.createChooser(intent, "Email via...")); 

Es decir, utilice la acción ACTION_SENDTO en lugar de la acción ACTION_SEND . Lo he probado en un par de dispositivos Android 4.4 y limita el pop-up del selector solo para mostrar aplicaciones de correo electrónico (correo electrónico, Gmail, Yahoo Mail, etc.) e inserta correctamente la dirección de correo electrónico y el asunto en el correo electrónico.

Esto funciona para mí perfectamente bien:

  Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse("mailto:" + address)); startActivity(Intent.createChooser(intent, "E-mail")); 

Si desea asegurarse de que su intención es manejada sólo por una aplicación de correo electrónico (y no por otras aplicaciones de mensajería de texto o sociales), utilice la acción ACTION_SENDTO e incluya el esquema de datos "mailto:". Por ejemplo:

 public void composeEmail(String[] addresses, String subject) { Intent intent = new Intent(Intent.ACTION_SENDTO); intent.setData(Uri.parse("mailto:")); // only email apps should handle this intent.putExtra(Intent.EXTRA_EMAIL, addresses); intent.putExtra(Intent.EXTRA_SUBJECT, subject); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } } 

Encontré esto en https://developer.android.com/guide/components/intents-common.html#Email

Tal vez deberías intentar esto: intent.setType("plain/text");

Lo encontré aquí . Lo he usado en mi aplicación y solo muestra opciones de correo electrónico y de Gmail.

Utilizar esta:

 boolean success = EmailIntentBuilder.from(activity) .to("[email protected]") .cc("[email protected]") .subject("Error report") .body(buildErrorReport()) .start(); 

Use build gradle:

 compile 'de.cketti.mailto:email-intent-builder:1.0.0' 

Esto es lo que uso, y funciona para mí:

 //variables String subject = "Whatever subject you want"; String body = "Whatever text you want to put in the body"; String intentType = "text/html"; String mailToParse = "mailto:"; //start Intent Intent variableName = new Intent(Intent.ACTION_SENDTO); variableName.setType(intentType); variableName.setData(Uri.parse(mailToParse)); variableName.putExtra(Intent.EXTRA_SUBJECT, subject); variableName.putExtra(Intent.EXTRA_TEXT, body); startActivity(variableName); 

Esto también permitirá al usuario elegir su aplicación de correo electrónico preferida. Lo único que esto no le permite hacer es configurar la dirección de correo electrónico del destinatario.

Esta es la forma de hacerlo de acuerdo con los Documentos del desarrollador de Android que agregan estas líneas de código a tu aplicación:

 Intent intent = new Intent(Intent.ACTION_SEND);//common intent intent.setData(Uri.parse("mailto:")); // only email apps should handle this 

Si desea agregar el cuerpo y el tema, añada esto

  intent.putExtra(Intent.EXTRA_SUBJECT, "Subject"); intent.putExtra(Intent.EXTRA_TEXT, "Body" ); 

Finalmente llegar a la mejor manera de hacer

  String to = "[email protected]"; String subject= "Hi I am subject"; String body="Hi I am test body"; String mailTo = "mailto:" + to + "?&subject=" + Uri.encode(subject) + "&body=" + Uri.encode(body); Intent emailIntent = new Intent(Intent.ACTION_VIEW); emailIntent.setData(Uri.parse(mailTo)); startActivity(emailIntent); 

Componga un correo electrónico en el cliente de correo electrónico del teléfono:

 Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("plain/text"); intent.putExtra(Intent.EXTRA_EMAIL, new String[] { "[email protected]" }); intent.putExtra(Intent.EXTRA_SUBJECT, "subject"); intent.putExtra(Intent.EXTRA_TEXT, "mail body"); startActivity(Intent.createChooser(intent, "")); 

Este código funciona en mi dispositivo

 Intent mIntent = new Intent(Intent.ACTION_SENDTO); mIntent.setData(Uri.parse("mailto:")); mIntent.putExtra(Intent.EXTRA_EMAIL , new String[] {"[email protected]"}); mIntent.putExtra(Intent.EXTRA_SUBJECT, ""); startActivity(Intent.createChooser(mIntent, "Send Email Using...")); 
  • Enviar correo electrónico a través de gmail
  • Android: Cómo confirmar que el correo electrónico se ha enviado correctamente
  • Intención de correo electrónico que ignora los saltos de línea en texto predefinido (Android)
  • La opción Bluetooth viene en la lista de selectores
  • No se ha encontrado actividad para manejar Intent al enviar correo electrónico
  • Cómo abrir la bandeja de entrada de correo predeterminado desde el código android?
  • Enviar correo electrónico HTML con Gmail 6.11.6 con intención
  • Envío de correo electrónico formateado HTML en Android
  • ¿Enviar correo a través de Implicit Intent utilizando Gmail con una imagen como archivo adjunto en Android?
  • Utilizar etiqueta de tabla en Android Email
  • Envío de un correo electrónico con archivos adjuntos mediante programación en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.