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"));
Le code ci-dessus ouvre une boîte de dialogue indiquant les applications suivantes: - Bluetooth, Google Documents, Yahoo Mail, Gmail, Orkut, Skype, etc.
En fait, je veux filtrer ces options de liste. Je souhaite afficher uniquement les applications liées au courrier électronique, par exemple. Gmail, Yahoo Mail. Comment faire?
J'ai vu un tel exemple sur l'application 'Android Market'.
La boîte de dialogue affiche uniquement les applications de messagerie, par ex. Gmail, Yahoo Mail, etc. Il ne montre pas Bluetooth, Orkut, etc. Quel code produit un tel dialogue?
lorsque vous modifierez votre intention.setType comme ci-dessous, vous obtiendrez
intent.setType("text/plain");
Utilisez Android.content.Intent.ACTION_SENDTO
pour obtenir uniquement la liste des clients de messagerie, sans facebook ni aucune autre application. Juste les clients de messagerie . Ex:
new Intent(Intent.ACTION_SENDTO);
Je ne suggérerais pas que vous obteniez directement à l'application de messagerie. Laissez l'utilisateur choisir son application de messagerie préférée. Ne le contraignez pas.
Si vous utilisez ACTION_SENDTO, putExtra ne permet pas d'ajouter un sujet et du texte à l'intention. Utilisez Uri pour ajouter le sujet et le corps du texte.
EDIT: Nous pouvons utiliser message/rfc822
au lieu de "text/plain"
comme type MIME. Cependant, cela n'indique pas "offrir uniquement des clients de messagerie" - mais "offrir tout ce qui prend en charge les données de message/rfc822". Cela pourrait facilement inclure des applications qui ne sont pas des clients de messagerie.
message/rfc822
prend en charge les types MIME de .mhtml, .mht, .mime
La réponse acceptée ne fonctionne pas sur le 4.1.2. Cela devrait fonctionner sur toutes les plateformes:
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..."));
J'espère que cela t'aides.
Mise à jour: Selon marcwjj , il semble que, pour la version 4.3, nous devons passer un tableau de chaînes de caractères au lieu d’une chaîne pour l’adresse électronique pour que cela fonctionne. Nous aurons peut-être besoin d'ajouter une ligne supplémentaire:
intent.putExtra(Intent.EXTRA_EMAIL, addresses); // String[] addresses
Il y a trois approches principales:
String email = /* Your email address here */
String subject = /* Your subject here */
String body = /* Your body here */
String chooserTitle = /* Your chooser title here */
1. Personnalisé 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. Utilisation de 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. Bibliothèque de support 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();
Cité dans la documentation officielle d'Android, je l'ai testé sous Android 4.4 et fonctionne parfaitement. Voir d'autres exemples à 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);
}
}
Une réponse tardive, même si j'ai trouvé une solution qui pourrait aider les autres:
Intent emailIntent = new Intent(Intent.ACTION_SENDTO);
emailIntent.setData(Uri.parse("mailto:[email protected]"));
startActivity(Intent.createChooser(emailIntent, "Send feedback"));
Ce fut ma sortie (seulement Gmail + Boîte de réception suggéré):
J'ai eu cette solution du Développeurs Android site.
Essayer:
intent.setType("message/rfc822");
Cela fonctionne pour moi:
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..."));
c'est-à-dire utiliser l'action ACTION_SENDTO
plutôt que l'action ACTION_SEND
. Je l'ai essayé sur quelques appareils Android 4.4 et cela limite le menu contextuel du sélecteur d'afficher uniquement des applications de messagerie (Email, Gmail, Yahoo Mail, etc.) et insère correctement l'adresse électronique et le sujet dans l'email.
Voici comment procéder selon Documents de développement Android Ajoutez ces lignes de code à votre application:
Intent intent = new Intent(Intent.ACTION_SEND);//common intent
intent.setData(Uri.parse("mailto:")); // only email apps should handle this
Si vous voulez ajouter le corps et le sujet, ajoutez ceci
intent.putExtra(Intent.EXTRA_SUBJECT, "Your Subject Here");
intent.putExtra(Intent.EXTRA_TEXT, "E-mail body" );
Si vous souhaitez uniquement les clients de messagerie, vous devez utiliser Android.content.Intent.EXTRA_EMAIL
avec un tableau. Voici un exemple:
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);
Enfin trouver la meilleure façon de faire
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);
Le code suivant fonctionne bien pour moi.
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);
C'était le seul moyen que j'avais trouvé à l'époque pour que cela fonctionne avec n'importe quel personnage.
la réponse de doreamon est la bonne solution, car elle fonctionne avec tous les personnages des nouvelles versions de Gmail.
Ancienne réponse:
Voici le mien. Il semble fonctionner sur toutes les versions d'Android, avec une prise en charge du sujet et du corps du message et une prise en charge complète des caractères 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);
}
Aucune de ces solutions ne fonctionnait pour moi. Voici une solution minimale qui fonctionne sur Lollipop. Sur mon appareil, seules les applications de messagerie natives Gmail et apparaissent dans la liste de choix résultante.
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..."));
Cela fonctionne parfaitement pour moi:
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("mailto:" + address));
startActivity(Intent.createChooser(intent, "E-mail"));
Suivre le code a fonctionné pour moi !!
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);
Fonctionne sur toutes les versions 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..."));
Si vous voulez vous assurer que votre intention est gérée uniquement par une application de messagerie (et non par d'autres applications de messagerie texte ou sociales), utilisez l'action ACTION_SENDTO
et incluez le schéma de données "mailto:". Par exemple:
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);
}
}
J'ai trouvé cela dans https://developer.Android.com/guide/components/intents-common.html#Email
La plupart de ces réponses ne fonctionnent que dans un cas simple où vous n'envoyez pas pièce jointe . Dans mon cas, j'ai parfois besoin d'envoyer une pièce jointe (ACTION_SEND) ou deux pièces jointes (ACTION_SEND_MULTIPLE).
J'ai donc pris les meilleures approches de ce fil et les ai combinées. Il utilise le ShareCompat.IntentBuilder
de la bibliothèque de support, mais je ne montre que les applications qui correspondent à ACTION_SENDTO avec "mailto:" uri. Ainsi, je ne reçois que la liste des applications de messagerie avec prise en charge des pièces jointes:
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
}
Si vous souhaitez cibler Gmail, vous pouvez procéder comme suit. Notez que l'intention est "ACTION_SENDTO" et non "ACTION_SEND" et que les champs d'intention supplémentaires ne sont pas nécessaires pour 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"));
}
Ce code fonctionne dans mon appareil
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..."));
J'actualise la réponse d'Adil dans 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)
}
in Kotlin si quelqu'un cherche
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);
}
C'est ce que j'utilise et ça marche pour moi:
//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);
Cela permettra également à l'utilisateur de choisir son application de messagerie préférée. La seule chose que cela ne vous permet pas de faire est de définir l'adresse e-mail du destinataire.
Peut-être devriez-vous essayer ceci: intent.setType("plain/text");
Je l'ai trouvé ici . Je l'ai utilisé dans mon application et il ne montre que les options de messagerie électronique et Gmail.
Utilisez ceci:
boolean success = EmailIntentBuilder.from(activity)
.to("[email protected]")
.cc("[email protected]")
.subject("Error report")
.body(buildErrorReport())
.start();
utiliser le gradé de construction:
compile 'de.cketti.mailto:email-intent-builder:1.0.0'
utiliser Anko - kotlin
context.email(email, subject, body)
De Documentation développeurs 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);
}
}
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();
}
Composez un email dans le client email du téléphone:
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, ""));
Utiliser intent.setType("message/rfc822");
fonctionne, mais il affiche des applications supplémentaires qui ne gèrent pas nécessairement les emails (par exemple, GDrive). Utiliser Intent.ACTION_SENDTO
avec setType("text/plain")
est la meilleure solution, mais vous devez ajouter setData(Uri.parse("mailto:"))
pour obtenir les meilleurs résultats (applications de messagerie uniquement). Le code complet est comme suit:
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"));