Enviar intención de correo electrónico


588
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/html");
intent.putExtra(Intent.EXTRA_EMAIL, "emailaddress@emailaddress.com");
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?


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



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


77
¿Puede proporcionar algún código para producir la salida deseada?
dira


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","abc@gmail.com", 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


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();

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);
    }
}

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:abc@xyz.com"));
startActivity(Intent.createChooser(emailIntent, "Send feedback"));


Versión Kotlin

val emailIntent = Intent(Intent.ACTION_SENDTO).apply { 
    data = Uri.parse("mailto:abc@xyz.com")
}
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 .


2
Para mí fue importante que no haya espacio entre mailtoel correo electrónico y:mailto:abc@xyz.com
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[] { "me@somewhere.com" });
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.


35

Tratar:

intent.setType("message/rfc822");

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[]{"youremailaddress@aviparshan.com"});

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


@ 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: somemail@xyz.com")
Hitesh Bisht

18

Finalmente, encuentre la mejor manera de hacerlo

String to = "test@gmail.com";
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);

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);

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);

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);
    }
}

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);
}

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..."));

7

Funciona en todas las versiones de Android:

String[] TO = {"email@server.com"};
    Uri uri = Uri.parse("mailto:email@server.com")
            .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..."));

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);

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

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


5

en Kotlin si alguien está mirando

val emailArrray:Array<String> = arrayOf("travelagentsupport@kkk.com")
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);
}

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
}

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:IT@RMAsoft.NET"));
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"));

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:youremail@gmail.com" + 
    "?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")); 
}

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) { "test@email.com" })
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)
}

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();
                }

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.


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[] { "some@email.address" });
intent.putExtra(Intent.EXTRA_SUBJECT, "subject");
intent.putExtra(Intent.EXTRA_TEXT, "mail body");
startActivity(Intent.createChooser(intent, ""));

1

Utilizar este:

boolean success = EmailIntentBuilder.from(activity)
        .to("support@example.org")
        .cc("developer@example.org")
        .subject("Error report")
        .body(buildErrorReport())
        .start();

usar build gradle:

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

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.


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[] {"mahendrarajdhami@gmail.com"});
mIntent.putExtra(Intent.EXTRA_SUBJECT, "");
startActivity(Intent.createChooser(mIntent, "Send Email Using..."));

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();
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.