Enviar intención de correo electrónico

588
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 solo aplicaciones relacionadas con el correo electrónico, por ejemplo, Gmail, Yahoo Mail. ¿Cómo hacerlo?

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

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

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

dira
fuente
44
Lo sentimos, esto no es posible con Intent.ACTION_SEND. Tal vez funciona con una intención directamente a la aplicación gmail, pero no sé si esto es posible.
Thommy
19
En caso de que alguien aprenda aquí sobre las intenciones de correo electrónico, EXTRA_MAIL debe corresponder a un String[], no solo a Stringcomo se muestra aquí.
bigstones
posible duplicado de Enviar correo electrónico a través de gmail
Sergey Glotov
Vea aquí algunos buenos consejos: medium.com/@cketti/…
Felix D.

Respuestas:

218

cuando cambiarás tu intent.setType como a continuación obtendrás

intent.setType("text/plain");

Use android.content.Intent.ACTION_SENDTOpara obtener solo la lista de clientes de correo electrónico, sin Facebook u otras aplicaciones. Solo los clientes de correo electrónico. Ex:

new Intent(Intent.ACTION_SENDTO);

No te sugiero que accedas directamente a la aplicación de correo electrónico. Deje que el usuario elija su aplicación de correo electrónico favorita. No lo obligues.

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

EDITAR: podemos usar en message/rfc822lugar de "text/plain"como el tipo MIME. Sin embargo, eso no indica "ofrecer solo clientes de correo electrónico", indica "ofrecer cualquier cosa que admita datos de mensajes / rfc822". Eso podría incluir fácilmente algunas aplicaciones que no son clientes de correo electrónico.

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

Padma Kumar
fuente
77
¿Puede proporcionar algún código para producir la salida deseada?
dira
99
@ Becomeputer06 refiera esto: stackoverflow.com/questions/8284706/send-email-via-gmail
Padma Kumar
76
El selector de intenciones dice no apps installed to perform this intentcuándo lo uso ACTION_SENDTO. Estoy usando Android 4.1.2 y tengo una aplicación de correo electrónico instalada ...
ffleandro
44
La forma "correcta" es la respuesta de Magnus. Recomiendo un póster original para cambiar la respuesta aceptada.
jhabbott
8
Usar el tipo MIME para realizar una operación de envío es una mala idea, porque básicamente le estás ordenando a Android que proporcione una lista de aplicaciones que admiten el envío de un archivo de tipo message/rfc822. Eso no es lo mismo que enviar un correo electrónico. Utilice el mailto:protocolo en su lugar, porque eso es lo que los clientes de correo electrónico realmente entienden.
Paul Lammertsma
872

La respuesta aceptada no funciona en 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, necesitamos pasar una matriz de cadenas en lugar de una cadena para la dirección de correo electrónico para que funcione. Es posible que necesitemos agregar una línea más:

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

Enlace de referencia

thanhbinh84
fuente
77
Tienes razón, y tampoco en 4.2. Así que esta es la única respuesta correcta, ¡gracias!
mDroidd
12
Esto es perfecto. Alguien a continuación mencionó que especificar la parte "mailto" es lo que limita las opciones disponibles para enviar correos electrónicos a los clientes. El uso de Uri.fromParts ("mailto", "", null) colocará el cursor en el campo del destinatario, perfecto para lo que necesitaba.
Shaggy
24
Pruebe este emailIntent.putExtra (Intent.EXTRA_TEXT, "Soy el cuerpo del correo electrónico");
thanhbinh84
15
Si no tiene un destinatario específico, esto también funciona:Uri.fromParts("mailto", "", null)
Phil
25
Esto ya no funciona en mi Android 4.3. Consulte el documento oficial de Android sobre el envío de correo electrónico como intento, que funciona perfectamente: developer.android.com/guide/components/…
marcwjj
244

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. Personalizado Uri:

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 Intentextras:

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. Biblioteca de soporte 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();
dira
fuente
1
Esto funcionó mucho mejor para mí: las otras opciones aparecieron algunas cosas claras (Skype, por ejemplo) como posibles controladores.
Chris Rae
1
Si tiene un %símbolo en el búfer, algunos caracteres en el correo electrónico resultante no se codificarán correctamente. Debes realizar el Uri.encodebaile sugerido por @minipif.
Giulio Piancastelli
12
Estas son las mejores respuestas aquí, no pierdas tu tiempo probando otras, la segunda aquí es la que elegí y funciona perfectamente, solo muestra las aplicaciones de correo electrónico puro, no gDrive, no bluetooth ... etc. Gracias @ Becomeputer06
Hugo
1
Tenga cuidado con el carácter "&". Si tiene & carácter en el cuerpo del correo electrónico, este método cortará el cuerpo después de &. Por ejemplo, si envía un cuerpo como "Yo soy y un cuerpo de muestra", obtendrá solo "Yo soy"
Emre Koç
44
¡ShareCompat da como resultado casi todas las aplicaciones, no solo clientes de correo electrónico!
rpattabi
111

Esto se cita del documento oficial de Android, lo he probado en Android 4.4 y funciona perfectamente. Ver 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);
    }
}
marcwjj
fuente
66
¡Convenido! Me sorprende que una respuesta como esta esté tan abajo en la lista. Supongo que debe haber sido un cambio relativamente reciente en los documentos de Android.
Mikey
¡Excelente! confiable, se refería a la 'Biblia' de los desarrolladores de aplicaciones de Android.
dev_android
1
¡Los dos puntos después de mailto hicieron el truco para mí! Estaba usando "mailto" en lugar de "mailto:"
Nigel Crasto
1
Trabajando en 5.1.1. Las otras opciones no me funcionan.
Juanin
1
EXTRA_EMAILno funciona para mí, así que solíaUri.parse("mailto: " + myEmail)
Pratik Butani
89

Una respuesta tardía, aunque descubrí una solución que podría ayudar a otros:

Versión Java

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


Versión Kotlin

val emailIntent = Intent(Intent.ACTION_SENDTO).apply { 
    data = Uri.parse("mailto:[email protected]")
}
startActivity(Intent.createChooser(emailIntent, "Send feedback"))


Esta fue mi salida (solo se sugiere Gmail + Bandeja de entrada):

mi salida

Obtuve esta solución del sitio de desarrolladores de Android .

capt.swag
fuente
2
Para mí fue importante que no haya espacio entre mailtoel correo electrónico y:mailto:[email protected]
AlvaroSantisteban
Esa es la respuesta correcta.
nibbana
36

Esto funciona para mi:

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, usar la ACTION_SENDTOacción en lugar de la ACTION_SENDacción. Lo probé en un par de dispositivos Android 4.4 y limita la ventana emergente del selector para mostrar solo 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.

Adil Hussain
fuente
35

Tratar:

intent.setType("message/rfc822");
Magnus
fuente
Tiene razón, lo intenté y ofrece [Drive, Email, Gmail, Skype], esta debería ser la "respuesta correcta"
gurbieta
18
Usar el tipo MIME para realizar una operación de envío es una mala idea, porque básicamente le estás ordenando a Android que proporcione una lista de aplicaciones que admiten el envío de un archivo de tipo message/rfc822. Eso no es lo mismo que enviar un correo electrónico. Utilice el mailto:protocolo en su lugar, porque eso es lo que los clientes de correo electrónico realmente entienden.
Paul Lammertsma
34

Esta es la forma correcta de enviar la intención de correo electrónico de acuerdo con la Documentación oficial del desarrollador de Android

Agregue estas líneas de código a su aplicación:

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

Opcional: agregue el cuerpo y el asunto, así

intent.putExtra(Intent.EXTRA_SUBJECT, "Your Subject Here");
intent.putExtra(Intent.EXTRA_TEXT, "E-mail body" );

Ya agregó esta línea, pero es bueno tenerla para nuevos usuarios

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

Esta será la dirección del destinatario, lo que significa que el usuario le enviará a usted (el desarrollador) un correo electrónico.

Avi Parshan
fuente
@ barnacle.m ¡Gracias! También es uno de los métodos más simples. El problema es que mi respuesta no recibe suficientes votos positivos :(
Avi Parshan
1
Es porque hay muchas respuestas similares, pero esta señala la documentación oficial de Android al respecto.
barnacle.m
1
No pude enviar la dirección de correo electrónico. Lo arreglé así: intent.data = Uri.parse ("mailto: [email protected]")
Hitesh Bisht
18

Finalmente, encuentre la mejor manera de hacerlo

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);
Ajay Shrestha
fuente
Eres asombroso, amigo.
Ashik
No hay problema amigo
Ajay Shrestha
2
Funciona perfectamente.
Solanki Kamlesh
Mira este artículo que lo describe en detalle: medium.com/@cketti/…
Bruno Bieri
funciona bien, sigan así
Jacks
15

Si solo desea los clientes de correo electrónico que debe usar android.content.Intent.EXTRA_EMAILcon 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);
Addev
fuente
3
no, todavía trae muchas otras aplicaciones, mucho más queACTION_SENDTO
Dori
10

El siguiente código me funciona 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);
Anam Ansari
fuente
8

De los documentos de desarrolladores de Android :

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);
    }
}
marvatron
fuente
8

Editar: ya no funciona con nuevas versiones de Gmail

Esta fue la única forma que encontré en ese momento para que funcionara con cualquier personaje.

La respuesta de doreamon es el camino correcto ahora, ya que funciona con todos los personajes en las nuevas versiones de Gmail.

Vieja respuesta:


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

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);
}
minipif
fuente
1
+1 Uri.encodees el camino correcto a seguir. Pero, ¿por qué llamarlo dos veces por sujeto y cuerpo?
Giulio Piancastelli
Entonces, hacer la codificación usted mismo es solo una mala idea. Utilice mejor una intención adecuada con los extras necesarios, consulte, por ejemplo, stackoverflow.com/a/15022222
Giulio Piancastelli
Para mí, esta es la mejor respuesta porque otras soluciones funcionan correctamente solo con algunas de las aplicaciones de correo electrónico. Este funciona con todas las aplicaciones de correo electrónico que probé.
Egis
7

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 electrónico nativas aparecen en la lista de selección 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..."));
scottt
fuente
7

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..."));
Usama Saeed US
fuente
Tu respuesta me ayudó. Gracias
Adnan Khan
5

¡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);
Suyog Gunjal
fuente
5

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"));
EpicPandaForce
fuente
5

Si desea asegurarse de que su intención sea manejada solo por una aplicación de correo electrónico (y no por otras aplicaciones de mensajería de texto o sociales), utilice la ACTION_SENDTOacción 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

Lamine Slimany
fuente
5

en Kotlin si alguien está mirando

val emailArrray:Array<String> = arrayOf("[email protected]")
val intent = Intent(Intent.ACTION_SENDTO)
intent.data = Uri.parse("mailto:") // only email apps should handle this
intent.putExtra(Intent.EXTRA_EMAIL, emailArrray)
intent.putExtra(Intent.EXTRA_SUBJECT, "Inquire about travel agent")
if (intent.resolveActivity(getPackageManager()) != null) {
    startActivity(intent);
}
mughil
fuente
4

La mayoría de estas respuestas funcionan solo para un caso simple cuando no está enviando datos adjuntos . En mi caso, a veces necesito enviar archivos adjuntos (ACTION_SEND) o dos archivos adjuntos (ACTION_SEND_MULTIPLE).

Así que tomé los mejores enfoques de este hilo y los combiné. Utiliza bibliotecas de soporte, ShareCompat.IntentBuilderpero solo muestro aplicaciones que coinciden con ACTION_SENDTO con "mailto:" uri. De esta manera obtengo solo una lista de aplicaciones de correo electrónico con soporte para archivos adjuntos:

fun Activity.sendEmail(recipients: List<String>, subject: String, file: Uri, text: String? = null, secondFile: Uri? = null) {
    val originalIntent = createEmailShareIntent(recipients, subject, file, text, secondFile)
    val emailFilterIntent = Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:"))
    val originalIntentResults = packageManager.queryIntentActivities(originalIntent, 0)
    val emailFilterIntentResults = packageManager.queryIntentActivities(emailFilterIntent, 0)
    val targetedIntents = originalIntentResults
            .filter { originalResult -> emailFilterIntentResults.any { originalResult.activityInfo.packageName == it.activityInfo.packageName } }
            .map {
                createEmailShareIntent(recipients, subject, file, text, secondFile).apply { `package` = it.activityInfo.packageName }
            }
            .toMutableList()
    val finalIntent = Intent.createChooser(targetedIntents.removeAt(0), R.string.choose_email_app.toText())
    finalIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedIntents.toTypedArray())
    startActivity(finalIntent)
}

private fun Activity.createEmailShareIntent(recipients: List<String>, subject: String, file: Uri, text: String? = null, secondFile: Uri? = null): Intent {
    val builder = ShareCompat.IntentBuilder.from(this)
            .setType("message/rfc822")
            .setEmailTo(recipients.toTypedArray())
            .setStream(file)
            .setSubject(subject)
    if (secondFile != null) {
        builder.addStream(secondFile)
    }
    if (text != null) {
        builder.setText(text)
    }
    return builder.intent
}
David Vávra
fuente
Parece que podría ser útil; alguna posibilidad de conseguirlo en Java?
Kyle Humfeld
1
Kotlin es muy similar a Java, deberías poder copiar y pegar y solo cambiar algunas cosas.
David Vávra
3

El uso intent.setType("message/rfc822");funciona, pero muestra aplicaciones adicionales que no necesariamente manejan correos electrónicos (por ejemplo, GDrive). Usando Intent.ACTION_SENDTOcon setType("text/plain")es la mejor, pero hay que añadir setData(Uri.parse("mailto:"))para conseguir los mejores resultados (sólo aplicaciones de correo electrónico). El código completo es el siguiente:

Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setType("text/plain");
intent.setData(Uri.parse("mailto:[email protected]"));
intent.putExtra(Intent.EXTRA_SUBJECT, "Email from My app");
intent.putExtra(Intent.EXTRA_TEXT, "Place your email message here ...");
startActivity(Intent.createChooser(intent, "Send Email"));
Rami Alloush
fuente
Alma
2

Si desea apuntar a Gmail, puede hacer lo siguiente. Tenga en cuenta que la intención es "ACTION_SENDTO" y no "ACTION_SEND" y los campos de intención adicionales no son necesarios para Gmail.

String uriText =
    "mailto:[email protected]" + 
    "?subject=" + Uri.encode("your subject line here") + 
    "&body=" + Uri.encode("message body here");

Uri uri = Uri.parse(uriText);

Intent sendIntent = new Intent(Intent.ACTION_SENDTO);
sendIntent.setData(uri);
if (sendIntent.resolveActivity(getPackageManager()) != null) {
   startActivity(Intent.createChooser(sendIntent, "Send message")); 
}
pcodex
fuente
2

Estoy actualizando la respuesta de Adil en Kotlin,

val intent = Intent(Intent.ACTION_SENDTO)
intent.data = Uri.parse("mailto:") // only email apps should handle this
intent.putExtra(Intent.EXTRA_EMAIL, Array(1) { "[email protected]" })
intent.putExtra(Intent.EXTRA_SUBJECT, "subject")
if (intent.resolveActivity(packageManager) != null) {
    startActivity(intent)
} else {
    showSnackBar(getString(R.string.no_apps_found_to_send_mail), this)
}
Kishan Solanki
fuente
Esto falla incluso cuando Gmail está en la aplicación.
AndroidDev
@AndroidDev ¿en qué dispositivo se enfrenta el problema?
Kishan Solanki
2

Utilice el siguiente código:

                try {

                    String uriText =
                            "mailto:emailid" +
                                    "?subject=" + Uri.encode("Feedback for app") +
                                    "&body=" + Uri.encode(deviceInfo);
                    Uri uri = Uri.parse(uriText);
                    Intent emailIntent = new Intent(Intent.ACTION_SENDTO);
                    emailIntent.setData(uri);
                    startActivity(Intent.createChooser(emailIntent, "Send email using..."));
                } catch (android.content.ActivityNotFoundException ex) {
                    Toast.makeText(ContactUsActivity.this, "No email clients installed.", Toast.LENGTH_SHORT).show();
                }
Tushar Bapte
fuente
1

Quizás deberías probar esto: intent.setType("plain/text");

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

sianis
fuente
2
"sin formato / texto" muestra Bluetooth, Skype, etc. Compruebe la salida deseada en la aplicación Android Market. Los pasos se enumeran en la pregunta.
Dira
1
Usar el tipo MIME para realizar una operación de envío es una mala idea, porque básicamente le estás ordenando a Android que proporcione una lista de aplicaciones que admiten el envío de un archivo de tipo plain/text, y que ni siquiera es un tipo MIME válido. Eso no es lo mismo que enviar un correo electrónico. Utilice el mailto:protocolo en su lugar, porque eso es lo que los clientes de correo electrónico realmente entienden.
Paul Lammertsma
1

Redacte 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, ""));

fuente
1

Utilizar este:

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

usar build gradle:

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

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.

saltamontes
fuente
Te falta un "en la segunda línea.
Tim
1

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..."));
Mahen
fuente
solo abre Gmail y correo electrónico en mi dispositivo
Mahen
1
Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("mailto", email, null));
if (emailIntent.resolveActivity(context.getPackageManager()) != null) {
    context.startActivity(Intent.createChooser(emailIntent, "Send Email..."));
} else {
    Toast.makeText(context, "No apps can perform this action.", Toast.LENGTH_SHORT).show();
}
Ahamadullah Saikat
fuente