studio presionar por mensaje enviar datos correo como boton abrir android email android-intent

presionar - enviar datos a correo android studio



Enviar correo electrónico (28)

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

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

  1. Abrir 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 ''Diario del vehículo'')
  3. Desplácese hasta "DESARROLLADOR"
  4. Haga clic en ''Enviar correo electrónico''

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


Este código está funcionando 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..."));


Edición: Ya no funciona con las 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 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 soporte de asunto y cuerpo de 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); }


Citado en el documento oficial de Android, 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); } }


El siguiente código funciona bien para mí.

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


Esta es la forma de hacerlo de acuerdo con Android Developer Docs y 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

Si desea agregar el cuerpo y el tema, agregue esto

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


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 te permite hacer es configurar la dirección de correo electrónico del destinatario.


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 probé en un par de dispositivos Android 4.4 y limita la ventana emergente del selector para mostrar solo las aplicaciones de correo electrónico (correo electrónico, Gmail, correo de Yahoo, etc.) e inserta correctamente la dirección y el asunto del correo electrónico.


Esto me funciona perfectamente bien:

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


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


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


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


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. Usando Intent extras:

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


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

Así que tomé los mejores enfoques de este hilo y los combiné. Utiliza ShareCompat.IntentBuilder la biblioteca de ShareCompat.IntentBuilder pero solo muestro aplicaciones que coinciden con ACTION_SENDTO con "mailto:" uri. De esta manera solo obtengo una lista de aplicaciones de correo electrónico con soporte de 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 }


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

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

Enlace de referencia


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


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


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


Si quieres dirigirte a Gmail, puedes hacer lo siguiente. Tenga en cuenta que la intención es "ACTION_SENDTO" y no "ACTION_SEND" y que los campos adicionales de intención 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")); }


Si solo desea los clientes de correo electrónico, debe usar 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);


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


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

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


Tratar:

intent.setType("message/rfc822");


Utilizando intent.setType("message/rfc822"); funciona pero muestra aplicaciones adicionales que no necesariamente manejan correos electrónicos (por ejemplo, GDrive). Usar Intent.ACTION_SENDTO con setType("text/plain") es lo mejor, pero debes agregar setData(Uri.parse("mailto:")) para obtener los mejores resultados (solo 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"));


Utilizar esta:

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

usar construir gradle:

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


cuando va a cambiar su intención.setType como a continuación obtendrá

intent.setType("text/plain");

Use android.content.Intent.ACTION_SENDTO para obtener solo la lista de clientes de correo electrónico, sin facebook u otras aplicaciones. Sólo los clientes de correo electrónico. Ex:

new Intent(Intent.ACTION_SENDTO);

No sugeriría que llegues directamente a la aplicación de correo electrónico. Deje que el usuario elija su aplicación de correo electrónico favorita. No lo limiten.

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

EDITAR: Podemos usar message/rfc822 lugar de "text/plain" como el tipo MIME. Sin embargo, eso no indica que "solo ofrezca clientes de correo electrónico", sino que "ofrece cualquier cosa que admita datos de mensaje / rfc822". Eso podría incluir fácilmente alguna aplicación que no sea un cliente de correo electrónico.

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


utilizar Anko - Kotlin

context.email(email, subject, body)


Una respuesta tardía, aunque descubrí 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 fue mi salida (Gmail + Bandeja de entrada y nada más)

Obtuve esta solución del sitio de Google Developers


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