Uso de Android Intent.ACTION_SEND para enviar correo electrónico

Estoy utilizando Intent.ACTION_SEND para enviar un correo electrónico. Sin embargo, cuando llamo a la intent que está mostrando opciones para enviar un mensaje, enviar un correo electrónico, y también para enviar a través de bluetooth. Quiero que sólo muestre opciones para enviar un correo electrónico. ¿Cómo puedo hacer esto?

 Intent email = new Intent(android.content.Intent.ACTION_SEND); email.setType("application/octet-stream"); 

EDITAR:
También puede intentar establecer el tipo "message/rfc822" .

prueba esto….

@Ganapathy: prueba este código para mostrar gmail

 Intent gmail = new Intent(Intent.ACTION_VIEW); gmail.setClassName("com.google.android.gm","com.google.android.gm.ComposeActivityGmail"); gmail.putExtra(Intent.EXTRA_EMAIL, new String[] { "[email protected]" }); gmail.setData(Uri.parse("[email protected]")); gmail.putExtra(Intent.EXTRA_SUBJECT, "enter something"); gmail.setType("plain/text"); gmail.putExtra(Intent.EXTRA_TEXT, "hi android jack!"); startActivity(gmail); 

Esto te ayudara.

 On your button click : Intent email = new Intent(Intent.ACTION_SEND); email.putExtra(Intent.EXTRA_EMAIL, new String[]{"[email protected]"}); email.putExtra(Intent.EXTRA_SUBJECT, "subject"); email.putExtra(Intent.EXTRA_TEXT, "message"); email.setType("message/rfc822"); startActivity(Intent.createChooser(email, "Choose an Email client :")); 

No estoy tomando crédito por esta respuesta, pero creo que da la mejor respuesta para este post.

Es un concepto erróneo común usar text / plain o text / html. Esto activará cualquier aplicación que pueda manejar archivos de texto simples o HTML sin ningún contexto, como Google Drive, Dropbox, Evernote y Skype.

En su lugar use un ACTION_SENDTO , proporcionando el mailto: Uri

 intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:")); 

A continuación, puede proceder con el selector como se sugiere a través de las otras respuestas.

Respondido por @PaulLammertsma aquí Android selector de correo electrónico

Utilizando el tipo de message/rfc822 como se indica aquí: ACTION_SEND fuerza el envío con correo electrónico resuelve el problema.

Tuve un problema similar con mi aplicación. Recientemente he encontrado este enlace forman el sitio oficial de desarrolladores android que realmente ayuda! Intenciones Comunes: Email

TL, DR:

 Intent intent = new Intent(Intent.ACTION_SENDTO); intent.setData(Uri.parse("mailto:")); 

Ahora, sólo se mostrará a los clientes de correo electrónico!

Puede agregar un objeto y un cuerpo haciendo esto:

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

Primera solución: trate de ser más específico en sus parámetros de Intent. Agregar un destinatario de mensajes por ejemplo

 emailIntent .putExtra(android.content.Intent.EXTRA_EMAIL, new String[] {"[email protected]"}); 

Segunda solución: utilice el gestor de paquetes para encontrar todas las aplicaciones capaces de enviar un mensaje y seleccione las únicas que desee utilizar.

Me doy cuenta de que esta es una pregunta bastante antigua, pero es el primer resultado al buscar una solución de "Enviar correo" y todas las respuestas tienen un problema común:

Utilizando Intent.ACTION_SEND y intent.setType("message/rfc822") resultará en un selector que no sólo mostrará aplicaciones de correo sino todas las aplicaciones que puedan manejar cualquier tipo de soporte de MIME por mensaje / rfc822, por ejemplo .mhtml , .mht , .mime . Al lado de aplicaciones de correo electrónico esto podría ser Google Drive, Dropbox, Evernote, etc.

La única solución que encontré para limitar el selector a las aplicaciones de correo sólo es utilizar Intent.ACTION_SENDTO en su lugar:

 Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("mailto","[email protected]", null)); intent.putExtra(Intent.EXTRA_SUBJECT, "My Mail"); intent.putExtra(Intent.EXTRA_TEXT , "My Message"); try { startActivity(Intent.createChooser(i, "Send mail...")); } catch (android.content.ActivityNotFoundException ex) { Toast.makeText(MainActivity.this, "There are no email clients installed.", Toast.LENGTH_SHORT).show(); } 

El mejor código para restringirlo a sólo enviar un correo electrónico. Defina este tipo para enviar sólo un correo electrónico. i.setType("message/rfc822");

  Intent i = new Intent(Intent.ACTION_SEND); i.setType("message/rfc822"); i.putExtra(Intent.EXTRA_EMAIL , new String[]{"[email protected]"}); i.putExtra(Intent.EXTRA_SUBJECT, "subject of email"); i.putExtra(Intent.EXTRA_TEXT , "body of email"); try { startActivity(Intent.createChooser(i, "Send mail...")); } catch (android.content.ActivityNotFoundException ex) { Toast.makeText(Firstclass.this, "There are no email clients installed.", Toast.LENGTH_SHORT).show(); } 

Esta es una combinación de soluciones de Jack Dsilva y Jignesh Mayani:

  try { Intent gmailIntent = new Intent(Intent.ACTION_SEND); gmailIntent.setType("text/html"); final PackageManager pm = _activity.getPackageManager(); final List<ResolveInfo> matches = pm.queryIntentActivities(gmailIntent, 0); String gmailActivityClass = null; for (final ResolveInfo info : matches) { if (info.activityInfo.packageName.equals("com.google.android.gm")) { gmailActivityClass = info.activityInfo.name; if (gmailActivityClass != null && !gmailActivityClass.isEmpty()) { break; } } } gmailIntent.setClassName("com.google.android.gm", gmailActivityClass); gmailIntent.putExtra(Intent.EXTRA_EMAIL, new String[] { "[email protected]" }); gmailIntent.putExtra(Intent.EXTRA_SUBJECT, "Subject"); gmailIntent.putExtra(Intent.EXTRA_CC, "[email protected]"); // if necessary gmailIntent.putExtra(Intent.EXTRA_TEXT, "Email message"); gmailIntent.setData(Uri.parse("[email protected]")); this._activity.startActivity(gmailIntent); } catch (Exception e) { Intent i = new Intent(Intent.ACTION_SEND); i.putExtra(Intent.EXTRA_EMAIL, new String[] { "[email protected]" }); i.putExtra(Intent.EXTRA_SUBJECT, "Subject"); i.putExtra(Intent.EXTRA_CC, "[email protected]"); // if necessary i.putExtra(Intent.EXTRA_TEXT, "Email message"); i.setType("plain/text"); this._activity.startActivity(i); } 

Por lo tanto, al principio se intentará abrir la aplicación de Gmail y en caso de que un usuario no lo tiene, entonces el segundo enfoque se aplicará.

[Solución para API LEVEL> = 15]

Finalmente he tenido éxito en el envío de correo electrónico con adjuntos a sólo clientes de correo electrónico . Lo escribo aquí porque me tomó mucho tiempo y puede ser útil para otros.

El problema es:

  • Intent.ACTION_SENDTO toma URI de datos (por lo que puede especificar el esquema "mailto:"), pero no acepta intención: EXTRA_STREAM.

  • Intent.ACTION_SEND acepta Propósito: EXTRA_STREAM (por lo que puede agregar datos adjuntos) PERO solo toma Tipo (no URI de Datos para que no pueda especificar el esquema "mailto:").

Así que Intent.ACTION_SEND permite que el usuario elija entre varias Actividades, incluso si setType ("message / rfc822"), porque esa aplicación o actividades pueden gestionar todos los tipos de archivos (típicamente GDrive / Dropbox Apps) e incluso archivos de mensajes de correo electrónico.

La solución está en el método setSelector. Con este método puede utilizar Intent.ACTION_SENDTO para seleccionar la Actividad, pero luego enviar el Intent.ACTION_SEND Propósito.

Aquí mi código de solución (el archivo adjunto vino de un FileProvider, pero podría ser cualquier archivo):

 { Intent emailSelectorIntent = new Intent(Intent.ACTION_SENDTO); emailSelectorIntent.setData(Uri.parse("mailto:")); final Intent emailIntent = new Intent(Intent.ACTION_SEND); emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[]{"[email protected]"}); emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Subject"); emailIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); emailIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); emailIntent.setSelector( emailSelectorIntent ); Uri attachment = FileProvider.getUriForFile(this, "my_fileprovider", myFile); emailIntent.putExtra(Intent.EXTRA_STREAM, attachment); if( emailIntent.resolveActivity(getPackageManager()) != null ) startActivity(emailIntent); } 
  • Solo aplicaciones de correo electrónico para resolver una intención
  • Enviar correo electrónico a través de gmail
  • Capture la entrada del usuario y envíela directamente a una dirección de correo electrónico mediante el botón
  • Enviar correo electrónico HTML con Gmail 6.11.6 con intención
  • Utilizar etiqueta de tabla en Android Email
  • Cómo enviar correo electrónico HTML
  • Envío de correo electrónico desde la aplicación de Android al hacer clic en el botón
  • Las brechas aparecen en un correo electrónico solo en Android Gmail. ¿Cómo soluciono este problema?
  • Cómo abrir la bandeja de entrada de correo predeterminado desde el código android?
  • No se ha encontrado actividad para manejar Intent al enviar correo electrónico
  • 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.