Envoyer l'intention par e-mail


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

Le code ci-dessus ouvre une boîte de dialogue affichant les applications suivantes: - Bluetooth, Google Docs, Yahoo Mail, Gmail, Orkut, Skype etc.

En fait, je veux filtrer ces options de liste. Je souhaite afficher uniquement les applications liées aux e-mails, par exemple Gmail, Yahoo Mail. Comment faire?

J'ai vu un tel exemple sur l'application 'Android Market'.

  1. Ouvrez l'application Android Market
  2. Ouvrez n'importe quelle application où le développeur a spécifié son adresse e-mail. (Si vous ne trouvez pas une telle application, ouvrez simplement mon application: - market: // details? Id = com.becomputer06.vehicle.diary.free, OU recherchez par 'Vehicle Diary')
  3. Faites défiler jusqu'à «DÉVELOPPEUR»
  4. Cliquez sur «Envoyer un e-mail»

La boîte de dialogue affiche uniquement les applications de messagerie, par exemple Gmail, Yahoo Mail, etc. Elle n'affiche pas Bluetooth, Orkut, etc. Quel code produit une telle boîte de dialogue?


4
Désolé, ce n'est pas possible avec Intent.ACTION_SEND. Peut-être que cela fonctionne avec une intention directement sur l'application gmail, mais je ne sais pas si c'est possible.
Thommy

19
Dans le cas où quelqu'un apprendrait ici sur les intentions de messagerie, EXTRA_MAIL devrait correspondre à un String[], pas seulement un Stringcomme indiqué ici.
bigstones



Voir ici pour quelques bons conseils: medium.com/@cketti/…
Felix D.

Réponses:


218

lorsque vous modifierez votre intention.setType comme ci-dessous, vous obtiendrez

intent.setType("text/plain");

Utilisez android.content.Intent.ACTION_SENDTOpour obtenir uniquement la liste des clients de messagerie, sans facebook ni autres applications. Juste les clients de messagerie. Ex:

new Intent(Intent.ACTION_SENDTO);

Je ne vous suggérerais pas d'accéder 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 fonctionne pas pour ajouter un sujet et du texte à l'intention. Utilisez Uri pour ajouter le sujet et le corps du texte.

EDIT: Nous pouvons utiliser message/rfc822au lieu de "text/plain"comme type MIME. Cependant, cela n'indique pas «ne proposer que des clients de messagerie» - cela indique «offrir tout ce qui prend en charge les données de message / rfc822». Cela pourrait facilement inclure certaines applications qui ne sont pas des clients de messagerie.

message/rfc822 prend en charge les types MIME de .mhtml, .mht, .mime


7
Pouvez-vous s'il vous plaît fournir du code pour produire la sortie souhaitée?
dira


76
Le sélecteur d'intention dit no apps installed to perform this intentquand j'utilise ACTION_SENDTO. J'utilise Android 4.1.2 et j'ai installé une application de messagerie ...
ffleandro

4
La manière «correcte» est la réponse de Magnus. Je recommande l'affiche originale pour changer la réponse acceptée.
jhabbott

8
L'utilisation du type MIME pour effectuer une opération d'envoi est une mauvaise idée, car vous demandez essentiellement à Android de fournir une liste d'applications prenant en charge l'envoi d'un fichier de type message/rfc822. Ce n'est pas la même chose que d'envoyer un e-mail. Utilisez mailto:plutôt le protocole, car c'est ce que les clients de messagerie comprennent réellement.
Paul Lammertsma

872

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","abc@gmail.com", 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 sur 4.3, nous devons passer un tableau de chaînes au lieu d'une chaîne pour l'adresse e-mail pour le faire fonctionner. Nous devrons peut-être ajouter une ligne supplémentaire:

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

Lien de référence


7
Vous avez raison, et ce n'est pas le cas non plus sur 4.2. C'est donc la seule bonne réponse, merci!
mDroidd

12
C'est parfait. Quelqu'un ci-dessous a mentionné que la spécification de la partie «mailto» est ce qui restreint les options disponibles aux clients de messagerie. L'utilisation d'Uri.fromParts ("mailto", "", null) mettra le curseur dans le champ du destinataire - parfait pour ce dont j'avais besoin.
Shaggy

24
Essayez cet emailIntent.putExtra (Intent.EXTRA_TEXT, "I'm email body.");
thanhbinh84

15
Si vous n'avez pas de destinataire spécifique, cela fonctionne également:Uri.fromParts("mailto", "", null)
Phil

25
Cela ne fonctionne plus sur mon Android 4.3. Veuillez consulter le document officiel Android sur l'envoi d'e-mails comme prévu, ce qui fonctionne parfaitement: developer.android.com/guide/components/…
marcwjj

244

Il existe 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. Utiliser des 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. 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();

1
Cela a fonctionné beaucoup mieux pour moi - les autres options sont apparues comme des gestionnaires possibles (Skype, par exemple).
Chris Rae

1
Si vous avez un %symbole dans le tampon, certains caractères dans l'e-mail résultant ne seront pas correctement encodés. Vous devez exécuter la Uri.encodedanse suggérée par @minipif.
Giulio Piancastelli

12
Ce sont les meilleures réponses ici, ne perdez pas votre temps à essayer les autres, la seconde ici est ce que j'ai choisi et cela fonctionne parfaitement, ne montrant que les applications de messagerie électronique pure, pas gDrive, pas bluetooth .. etc. Merci @ becomputer06
Hugo

1
Faites attention au caractère "&". Si vous avez & caractère dans le corps de l'e-mail, cette méthode coupera le corps après &. Par exemple, si vous envoyez un corps comme "Je suis et un échantillon de corps", vous obtiendrez juste "Je suis"
Emre Koç

4
ShareCompat génère presque toutes les applications, pas seulement les clients de messagerie!
rpattabi

111

Ceci est cité dans le document officiel Android, je l'ai testé sur Android 4.4 et fonctionne parfaitement. Voir plus d'exemples sur 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);
    }
}

6
D'accord! Je suis surpris qu'une réponse comme celle-ci soit si loin dans la liste. Je suppose que cela a dû être un changement relativement récent dans les documents Android.
Mikey

Génial! fiable, il fait référence à la «Bible» des développeurs d'applications Android.
dev_android

1
Le colon après mailto a fait l'affaire pour moi! J'utilisais "mailto" au lieu de "mailto:"
Nigel Crasto

1
Travailler sur 5.1.1. Les autres options ne fonctionnent pas pour moi.
Juanin

1
EXTRA_EMAILne fonctionne pas pour moi, donc j'ai utiliséUri.parse("mailto: " + myEmail)
Pratik Butani

89

Une réponse tardive, bien que j'aie trouvé une solution qui pourrait aider les autres:

Version Java

Intent emailIntent = new Intent(Intent.ACTION_SENDTO);
emailIntent.setData(Uri.parse("mailto:abc@xyz.com"));
startActivity(Intent.createChooser(emailIntent, "Send feedback"));


Version Kotlin

val emailIntent = Intent(Intent.ACTION_SENDTO).apply { 
    data = Uri.parse("mailto:abc@xyz.com")
}
startActivity(Intent.createChooser(emailIntent, "Send feedback"))


C'était ma sortie (seulement Gmail + Inbox suggéré):

ma sortie

J'ai obtenu cette solution sur le site des développeurs Android .


2
Pour moi, il était important qu'il n'y ait pas d'espace entre mailtoet l'e-mail:mailto:abc@xyz.com
AlvaroSantisteban

C'est la bonne réponse.
nibbana

36

Cela fonctionne pour moi:

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

c'est-à-dire utiliser l' ACTION_SENDTOaction plutôt que l' ACTION_SENDaction. Je l'ai essayé sur quelques appareils Android 4.4 et il limite la fenêtre contextuelle du sélecteur pour n'afficher que les applications de messagerie (e-mail, Gmail, Yahoo Mail, etc.) et il insère correctement l'adresse e-mail et l'objet dans l'e-mail.


35

Essayer:

intent.setType("message/rfc822");

Il a raison, je l'ai essayé et propose [Drive, Email, Gmail, Skype], cela devrait être la "bonne réponse"
gurbieta

18
L'utilisation du type MIME pour effectuer une opération d'envoi est une mauvaise idée, car vous demandez essentiellement à Android de fournir une liste d'applications prenant en charge l'envoi d'un fichier de type message/rfc822. Ce n'est pas la même chose que d'envoyer un e-mail. Utilisez mailto:plutôt le protocole, car c'est ce que les clients de messagerie comprennent réellement.
Paul Lammertsma

34

C'est la bonne façon d'envoyer l'intention de l'e-mail en fonction de la documentation officielle du développeur 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

Facultatif: ajoutez le corps et le sujet, comme ceci

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

Vous avez déjà ajouté cette ligne, mais c'est bien d'avoir pour les nouveaux utilisateurs

intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"youremailaddress@aviparshan.com"});

Ce sera l'adresse du destinataire, ce qui signifie que l'utilisateur vous enverra (le développeur) un e-mail.


@ barnacle.m Merci! C'est aussi l'une des méthodes les plus simples. Le problème est que ma réponse n'obtient pas assez de votes positifs :(
Avi Parshan

1
C'est parce qu'il y a beaucoup de réponses similaires, mais celle-ci souligne la documentation officielle d'Android à ce sujet.
barnacle.m

1
Je n'ai pas pu envoyer d'adresse e-mail. Je l'ai corrigé comme ceci intent.data = Uri.parse ("mailto: somemail@xyz.com")
Hitesh Bisht

18

Enfin, trouvez la meilleure façon de faire

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

Tu es génial, mec.
Ashik

Pas de problème mec
Ajay Shrestha

2
Marche parfaitement.
Solanki Kamlesh

Consultez cet article qui le décrit en détail: medium.com/@cketti/…
Bruno Bieri

fonctionne bien, continuez comme ça
Jacks

15

Si vous ne souhaitez utiliser que les clients de messagerie, vous devez les utiliser android.content.Intent.EXTRA_EMAILavec 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);

3
Non, apporte toujours beaucoup d'autres applications - beaucoup plus queACTION_SENDTO
Dori

10

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

8

De la documentation des 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);
    }
}

8

Edit: ne fonctionne plus avec les nouvelles versions de Gmail

C'était le seul moyen que j'ai trouvé à l'époque pour le faire fonctionner avec n'importe quel personnage.

La réponse de doreamon est la bonne façon de procéder maintenant, car elle fonctionne avec tous les personnages dans les nouvelles versions de Gmail.

Ancienne réponse:


Voici le mien. Il semble fonctionner sur toutes les versions d'Android, avec la prise en charge du sujet et du corps du message, et la 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);
}

1
+1 Uri.encodeest la bonne façon de procéder. Mais pourquoi l'appeler deux fois pour sujet et corps?
Giulio Piancastelli

Donc, faire l'encodage vous-même n'est qu'une mauvaise idée. Mieux vaut utiliser une intention appropriée avec les extras nécessaires, voir par exemple stackoverflow.com/a/15022222
Giulio Piancastelli

Pour moi, c'est la meilleure réponse car d'autres solutions ne fonctionnent correctement qu'avec certaines applications de messagerie. Celui-ci fonctionne avec toutes les applications de messagerie que j'ai testées.
Egis

7

Aucune de ces solutions ne fonctionnait pour moi. Voici une solution minimale qui fonctionne sur Lollipop. Sur mon appareil, seuls Gmail et les applications de messagerie natives apparaissent dans la liste de sélection 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..."));

7

Fonctionne sur toutes les versions 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..."));

Votre réponse m'a aidé. Merci
Adnan Khan

5

Le code suivant 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);

5

Cela fonctionne parfaitement pour moi:

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

5

Si vous souhaitez vous assurer que votre intention n'est gérée que par une application de messagerie (et non par d'autres applications de messagerie texte ou sociales), utilisez l' ACTION_SENDTOaction 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


5

à Kotlin si quelqu'un cherche

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 plupart de ces réponses ne fonctionnent que pour un cas simple lorsque vous n'envoyez pas de 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 la bibliothèque de support, ShareCompat.IntentBuildermais je n'affiche que les applications qui correspondent à ACTION_SENDTO avec "mailto:" uri. De cette façon, 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
}

Il semble que cela pourrait être utile; une chance de l'obtenir en Java?
Kyle Humfeld

1
Kotlin est très similaire à Java, vous devriez pouvoir copier-coller et simplement changer quelques choses.
David Vávra

3

L'utilisation intent.setType("message/rfc822");fonctionne, mais elle montre des applications supplémentaires qui ne gèrent pas nécessairement les e-mails (par exemple GDrive). Utiliser Intent.ACTION_SENDTOavec setType("text/plain")est le meilleur, mais vous devez ajouter setData(Uri.parse("mailto:"))pour obtenir les meilleurs résultats (uniquement les applications de messagerie). Le code complet est le suivant:

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

Perfect soultion
Daxesh Vekariya

2

Si vous souhaitez cibler Gmail, vous pouvez procéder comme suit. Notez que l'intention est "ACTION_SENDTO" et non "ACTION_SEND" et les champs d'intention supplémentaires ne sont pas nécessaires pour 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

Je mets à jour 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) { "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)
}

Cela échoue même lorsque Gmail est sur l'application.
AndroidDev

@AndroidDev dans quel appareil vous rencontrez le problème?
Kishan Solanki

2

Veuillez utiliser le code ci-dessous:

                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

Vous devriez peut-être essayer ceci: intent.setType("plain/text");

Je l'ai trouvé ici . Je l'ai utilisé dans mon application et il n'affiche que les options E-Mail et Gmail.


2
"plain / text" affiche Bluetooth, Skype, etc. Vérifiez la sortie souhaitée dans l'application Android Market. Les étapes sont répertoriées dans la question.
dira

1
L'utilisation du type MIME pour effectuer une opération d'envoi est une mauvaise idée, car vous demandez essentiellement à Android de fournir une liste d'applications qui prennent en charge l'envoi d'un fichier de type plain/text, et ce n'est même pas un type MIME valide. Ce n'est pas la même chose que d'envoyer un e-mail. Utilisez mailto:plutôt le protocole, car c'est ce que les clients de messagerie comprennent réellement.
Paul Lammertsma

1

Composez un e-mail dans le client de messagerie du téléphone:

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

Utilisez ceci:

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

utilisez build gradle:

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

1

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.


Il vous manque un "sur la 2e ligne.
Tim

1

Ce code fonctionne sur mon appareil

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

il ouvre uniquement Gmail et Email dans mon appareil
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();
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.