Comment envoyer des e-mails depuis mon application Android?

Réponses:

978

La meilleure (et la plus simple) méthode consiste à utiliser Intent:

Intent i = new Intent(Intent.ACTION_SEND);
i.setType("message/rfc822");
i.putExtra(Intent.EXTRA_EMAIL  , new String[]{"[email protected]"});
i.putExtra(Intent.EXTRA_SUBJECT, "subject of email");
i.putExtra(Intent.EXTRA_TEXT   , "body of email");
try {
    startActivity(Intent.createChooser(i, "Send mail..."));
} catch (android.content.ActivityNotFoundException ex) {
    Toast.makeText(MyActivity.this, "There are no email clients installed.", Toast.LENGTH_SHORT).show();
}

Sinon, vous devrez écrire votre propre client.

Jeremy Logan
la source
6
Dans le code ci-dessus, il n'y a pas d'ID e-mail d'expéditeur. Comment envoyer le message?
KIRAN KJ
38
KIRAN: Vous aurez besoin de regarder comment les intentions fonctionnent pour comprendre cela. Il ouvrira essentiellement une application de messagerie avec le destinataire, l'objet et le corps déjà remplis. C'est à l'application de messagerie de faire l'envoi.
Jeremy Logan
8
L'e-mail n'apparaît pas dans le champ "À" au démarrage de l'activité. quelqu'un sait?
Hamza Waqas
11
la grande contribution de ce commentaire est: message / rfc822
Guilherme Oliveira
22
ajoutez-les pour être sûr que le sélecteur n'affiche que les applications de messagerie: Intent i = new Intent(Intent.ACTION_SENDTO); i.setType("message/rfc822"); i.setData(Uri.parse("mailto:"));
Edris
194

Utilisez .setType("message/rfc822")ou le sélecteur vous montrera toutes les (nombreuses) applications qui prennent en charge l'intention d'envoi.

Jeff S
la source
5
Bien, cela devrait avoir plus de votes positifs. Vous ne remarquerez pas les tests sur l'émulateur, mais lorsque vous allez envoyer "text / plain" sur un appareil réel, il vous donnera une liste de 15+ applications !! donc "message / rfc822" est définitivement recommandé (la norme de messagerie).
Blundell
7
@Blundell salut, mais je n'ai vu aucune différence après avoir changé pourmessage/rfc822
dessiner
2
Pouvez-vous supprimer le bluetooth de la liste? Cela apparaît également avec ce type. +1 cependant, astuce intéressante!
ingh.am
4
Sauvé notre bacon. Je ne peux pas imaginer expliquer au client que l'utilisateur peut tweeter les demandes d'assistance au lieu de lui envoyer un e-mail.
Kevin Galligan
1
+1111111 Cela mérite d'innombrables +1 pour que les autres puissent le voir. J'ai raté cette portion et j'ai dû faire face à ce problème pendant un certain temps!
Challenge
89

J'utilise cela depuis longtemps et cela semble bien, aucune application non-email n'apparaît. Juste une autre façon d'envoyer une intention d'envoi d'e-mail:

Intent intent = new Intent(Intent.ACTION_SENDTO); // it's not ACTION_SEND
intent.putExtra(Intent.EXTRA_SUBJECT, "Subject of email");
intent.putExtra(Intent.EXTRA_TEXT, "Body of email");
intent.setData(Uri.parse("mailto:[email protected]")); // or just "mailto:" for blank
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // this will make such that when user returns to your app, your app is displayed, instead of the email app.
startActivity(intent);
Randy Sugianto «Yuku»
la source
1
Action non signalée: cette action n'est pas prise en charge actuellement
erdomester
4
lgor G-> plz passe de setType "(plain / text") à setType ("text / plain")
sachit
2
.setType ("message / rfc822") pas text / plain
The Hungry Androider
1
ce code ouvrira-t-il l'intention de l'email? comment envoyer un e-mail sans montrer l'intention à l'utilisateur @yuku je veux envoyer un mot de passe à un e
Erum
2
Cette réponse est assez influente . :)
Nick Volynkin
54

J'utilisais quelque chose dans le sens de la réponse actuellement acceptée afin d'envoyer des e-mails avec un fichier journal d'erreur binaire joint. GMail et K-9 l'envoient très bien et il arrive également très bien sur mon serveur de messagerie. Le seul problème était mon client de messagerie de choix Thunderbird qui avait des problèmes avec l'ouverture / l'enregistrement du fichier journal joint. En fait, il n'a tout simplement pas enregistré le fichier sans se plaindre.

J'ai jeté un coup d'œil à l'un des codes source de ces messages et j'ai remarqué que la pièce jointe du fichier journal avait (naturellement) le type MIME message/rfc822. Bien sûr, cette pièce jointe n'est pas un e-mail joint. Mais Thunderbird ne peut pas gérer cette petite erreur avec élégance. C'était donc une sorte de déception.

Après un peu de recherche et d'expérimentation, j'ai trouvé la solution suivante:

public Intent createEmailOnlyChooserIntent(Intent source,
    CharSequence chooserTitle) {
    Stack<Intent> intents = new Stack<Intent>();
    Intent i = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("mailto",
            "[email protected]", null));
    List<ResolveInfo> activities = getPackageManager()
            .queryIntentActivities(i, 0);

    for(ResolveInfo ri : activities) {
        Intent target = new Intent(source);
        target.setPackage(ri.activityInfo.packageName);
        intents.add(target);
    }

    if(!intents.isEmpty()) {
        Intent chooserIntent = Intent.createChooser(intents.remove(0),
                chooserTitle);
        chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS,
                intents.toArray(new Parcelable[intents.size()]));

        return chooserIntent;
    } else {
        return Intent.createChooser(source, chooserTitle);
    }
}

Il peut être utilisé comme suit:

Intent i = new Intent(Intent.ACTION_SEND);
i.setType("*/*");
i.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(crashLogFile));
i.putExtra(Intent.EXTRA_EMAIL, new String[] {
    ANDROID_SUPPORT_EMAIL
});
i.putExtra(Intent.EXTRA_SUBJECT, "Crash report");
i.putExtra(Intent.EXTRA_TEXT, "Some crash report details");

startActivity(createEmailOnlyChooserIntent(i, "Send via email"));

Comme vous pouvez le voir, la méthode createEmailOnlyChooserIntent peut être facilement alimentée avec l'intention correcte et le type MIME correct.

Il passe ensuite en revue la liste des activités disponibles qui répondent à une mailtointention de protocole ACTION_SENDTO (qui sont uniquement des applications de messagerie) et construit un sélecteur basé sur cette liste d'activités et l'intention ACTION_SEND d'origine avec le type MIME correct.

Un autre avantage est que Skype n'est plus répertorié (ce qui correspond au type mime rfc822).

tiguchi
la source
1
Je viens de vous insérer un extrait de code et cela fonctionne très bien. Avant qu'il n'y ait des applications répertoriées comme Google Drive, Skype, etc. Mais n'y a-t-il pas un moyen d'envoyer un courrier électronique hors de l'application sans appeler une autre application? je viens de lire l'article sur le client de messagerie que @Rene postet ci-dessus mais semble trop compliqué pour simplement envoyer un simple e
Alex Cio
Excellente réponse. J'avais également Skype et Google Drive à venir ACTION_SENDet cela résout à merveille.
darrenp
1
La solution la plus populaire ci-dessus renvoie également Skype et Vkontakte. Cette solution est meilleure.
Denis Kutlubaev
qu'est-ce que crashLogFile? où a-t-il été initialisé? pease sepecify
Noufal
@Noufal Ceci est juste un reste de ma propre base de code. C'est une Fileinstance pointant vers un fichier journal de plantage que mes applications Android créent en arrière-plan au cas où il y aurait une exception non interceptée. Cet exemple devrait simplement illustrer comment ajouter une pièce jointe à un e-mail. Vous pouvez également joindre tout autre fichier du stockage externe (une image par exemple). Vous pouvez également supprimer cette ligne avec crashLogFilepour obtenir un exemple de travail.
tiguchi
37

Pour JUSTE LAISSER LES APPLICATIONS PAR EMAIL pour résoudre votre intention, vous devez spécifier ACTION_SENDTO comme Action et mailto comme Données.

private void sendEmail(){

    Intent emailIntent = new Intent(Intent.ACTION_SENDTO);
    emailIntent.setData(Uri.parse("mailto:" + "[email protected]")); 
    emailIntent.putExtra(Intent.EXTRA_SUBJECT, "My email's subject");
    emailIntent.putExtra(Intent.EXTRA_TEXT, "My email's body");

    try {
        startActivity(Intent.createChooser(emailIntent, "Send email using..."));
    } catch (android.content.ActivityNotFoundException ex) {
        Toast.makeText(Activity.this, "No email clients installed.", Toast.LENGTH_SHORT).show();
    }

}
wildzic
la source
23

J'ai résolu ce problème avec de simples lignes de code comme l'explique la documentation Android.

( https://developer.android.com/guide/components/intents-common.html#Email )

Le plus important est le drapeau: il l'est ACTION_SENDTOet nonACTION_SEND

L'autre ligne importante est

intent.setData(Uri.parse("mailto:")); ***// only email apps should handle this***

Soit dit en passant, si vous envoyez un message vide Extra, la if()fin ne fonctionnera pas et l'application ne lancera pas le client de messagerie.

Selon la documentation Android. 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 mailto:schéma de données " ". 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);
    }
}
Pedro Varela
la source
21

La stratégie d'utilisation .setType("message/rfc822")ou ACTION_SENDsemble également correspondre à des applications qui ne sont pas des clients de messagerie, telles que Android Beam et Bluetooth .

L'utilisation d' ACTION_SENDTOun et d'un mailto:URI semble fonctionner parfaitement et est recommandée dans la documentation du développeur . Cependant, si vous faites cela sur les émulateurs officiels et qu'aucun compte de messagerie n'est configuré (ou qu'il n'y a pas de clients de messagerie), vous obtenez l'erreur suivante:

Action non prise en charge

Cette action n'est actuellement pas prise en charge.

Comme indiqué ci-dessous:

Action non prise en charge: cette action n'est pas actuellement prise en charge.

Il s'avère que les émulateurs résolvent l'intention d'une activité appelée com.android.fallback.Fallback, qui affiche le message ci-dessus. Apparemment, c'est par conception.

Si vous souhaitez que votre application contourne cela afin qu'elle fonctionne également correctement sur les émulateurs officiels, vous pouvez le vérifier avant d'essayer d'envoyer l'e-mail:

private void sendEmail() {
    Intent intent = new Intent(Intent.ACTION_SENDTO)
        .setData(new Uri.Builder().scheme("mailto").build())
        .putExtra(Intent.EXTRA_EMAIL, new String[]{ "John Smith <[email protected]>" })
        .putExtra(Intent.EXTRA_SUBJECT, "Email subject")
        .putExtra(Intent.EXTRA_TEXT, "Email body")
    ;

    ComponentName emailApp = intent.resolveActivity(getPackageManager());
    ComponentName unsupportedAction = ComponentName.unflattenFromString("com.android.fallback/.Fallback");
    if (emailApp != null && !emailApp.equals(unsupportedAction))
        try {
            // Needed to customise the chooser dialog title since it might default to "Share with"
            // Note that the chooser will still be skipped if only one app is matched
            Intent chooser = Intent.createChooser(intent, "Send email with");
            startActivity(chooser);
            return;
        }
        catch (ActivityNotFoundException ignored) {
        }

    Toast
        .makeText(this, "Couldn't find an email app and account", Toast.LENGTH_LONG)
        .show();
}

Trouvez plus d'informations dans la documentation du développeur .

Sam
la source
13

L'envoi d'e-mails peut se faire avec Intents qui ne nécessitera aucune configuration. Mais cela nécessitera une interaction de l'utilisateur et la mise en page sera un peu restreinte.

Créer et envoyer un e-mail plus complexe sans interaction avec l'utilisateur implique de créer votre propre client. La première chose est que l'API Sun Java pour le courrier électronique n'est pas disponible. J'ai réussi à tirer parti de la bibliothèque Apache Mime4j pour créer des e-mails. Tous basés sur les documents de nilvec .

René
la source
6

Voici l'exemple de code de travail qui ouvre l' application de messagerie dans l'appareil Android et remplie automatiquement avec l' adresse et l' objet dans le courrier de composition.

protected void sendEmail() {
    Intent intent = new Intent(Intent.ACTION_SENDTO);
    intent.setData(Uri.parse("mailto:[email protected]"));
    intent.putExtra(Intent.EXTRA_SUBJECT, "Feedback");
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}
Sridhar Nalam
la source
Merci. Par rapport à une solution de @Avi Parshan, vous définissez un e-mail setData()et Avi s'installe putExtra(). Les deux variantes fonctionnent. Mais si vous supprimez setDataet utilisez uniquement intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"[email protected]"});, il y aurait un ActivityNotFoundException.
CoolMind
5

J'utilise le code ci-dessous dans mes applications. Cela montre exactement les applications client de messagerie, telles que Gmail.

    Intent contactIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("mailto", getString(R.string.email_to), null));
    contactIntent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.email_subject));
    startActivity(Intent.createChooser(contactIntent, getString(R.string.email_chooser)));
lomza
la source
5

Cela ne vous montrera que les clients de messagerie (ainsi que PayPal pour une raison inconnue)

 public void composeEmail() {

    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, "Subject");
    intent.putExtra(Intent.EXTRA_TEXT, "Body");
    try {
        startActivity(Intent.createChooser(intent, "Send mail..."));
    } catch (android.content.ActivityNotFoundException ex) {
        Toast.makeText(MainActivity.this, "There are no email clients installed.", Toast.LENGTH_SHORT).show();
    }
}
Avi Parshan
la source
1
Bonne solution! Il évite de nombreuses applications inadaptées (principalement utilisées comme "Partager"). N'ajoutez pas intent.type = "message/rfc822"; intent.type = "text/html";ici car cela entraînerait une exception.
CoolMind
3

Voilà comment je l'ai fait. Agréable et simple.

String emailUrl = "mailto:[email protected]?subject=Subject Text&body=Body Text";
        Intent request = new Intent(Intent.ACTION_VIEW);
        request.setData(Uri.parse(emailUrl));
        startActivity(request);
Amoureux des chiens
la source
3

Cette fonction dirige d'abord Gmail d'intention pour l'envoi d'e-mails.Si Gmail n'est pas trouvé, promouvez le sélecteur d'intention. J'ai utilisé cette fonction dans de nombreuses applications commerciales et cela fonctionne bien. J'espère que cela vous aidera:

public static void sentEmail(Context mContext, String[] addresses, String subject, String body) {

    try {
        Intent sendIntentGmail = new Intent(Intent.ACTION_VIEW);
        sendIntentGmail.setType("plain/text");
        sendIntentGmail.setData(Uri.parse(TextUtils.join(",", addresses)));
        sendIntentGmail.setClassName("com.google.android.gm", "com.google.android.gm.ComposeActivityGmail");
        sendIntentGmail.putExtra(Intent.EXTRA_EMAIL, addresses);
        if (subject != null) sendIntentGmail.putExtra(Intent.EXTRA_SUBJECT, subject);
        if (body != null) sendIntentGmail.putExtra(Intent.EXTRA_TEXT, body);
        mContext.startActivity(sendIntentGmail);
    } catch (Exception e) {
        //When Gmail App is not installed or disable
        Intent sendIntentIfGmailFail = new Intent(Intent.ACTION_SEND);
        sendIntentIfGmailFail.setType("*/*");
        sendIntentIfGmailFail.putExtra(Intent.EXTRA_EMAIL, addresses);
        if (subject != null) sendIntentIfGmailFail.putExtra(Intent.EXTRA_SUBJECT, subject);
        if (body != null) sendIntentIfGmailFail.putExtra(Intent.EXTRA_TEXT, body);
        if (sendIntentIfGmailFail.resolveActivity(mContext.getPackageManager()) != null) {
            mContext.startActivity(sendIntentIfGmailFail);
        }
    }
}
Shohan Ahmed Sijan
la source
1
Merci beaucoup. Sauvez ma vie
androCoder-BD
2

essayez simplement celui-ci

 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    buttonSend = (Button) findViewById(R.id.buttonSend);
    textTo = (EditText) findViewById(R.id.editTextTo);
    textSubject = (EditText) findViewById(R.id.editTextSubject);
    textMessage = (EditText) findViewById(R.id.editTextMessage);

    buttonSend.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            String to = textTo.getText().toString();
            String subject = textSubject.getText().toString();
            String message = textMessage.getText().toString();

            Intent email = new Intent(Intent.ACTION_SEND);
            email.putExtra(Intent.EXTRA_EMAIL, new String[] { to });
            // email.putExtra(Intent.EXTRA_CC, new String[]{ to});
            // email.putExtra(Intent.EXTRA_BCC, new String[]{to});
            email.putExtra(Intent.EXTRA_SUBJECT, subject);
            email.putExtra(Intent.EXTRA_TEXT, message);

            // need this to prompts email client only
            email.setType("message/rfc822");

            startActivity(Intent.createChooser(email, "Choose an Email client :"));

        }
    });
}
NagarjunaReddy
la source
3
Comment est-ce mieux que les réponses qui existaient déjà lorsque vous avez posté cela? Cela ressemble à une copie de la réponse acceptée enveloppée dans une activité.
Sam
2

Une autre solution peut être

Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
emailIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
emailIntent.setType("plain/text");
emailIntent.setClassName("com.google.android.gm", "com.google.android.gm.ComposeActivityGmail");
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[]{"[email protected]"});
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Yo");
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Hi");
startActivity(emailIntent);

En supposant que la plupart des appareils Android ont déjà installé l'application GMail.

silentsudo
la source
@PedroVarela nous pouvons toujours vérifier l'exception d'activité non trouvée.
silentsudo
1
Oui nous pouvons. Mais votre solution n'est pas la bonne. La documentation Android indique clairement ce que vous devez faire pour afficher uniquement les applications de messagerie dans le sélecteur d'intention. Vous avez écrit "En supposant que la plupart des appareils Android ont déjà installé l'application Gmail"; Que faire s'il s'agit d'un appareil rooté et que l'utilisateur supprime le client Gmail?. Supposons que vous créez votre propre application de messagerie électronique?, Si un utilisateur envoie un e-mail, votre application ne figurera pas dans cette liste. Que se passe-t-il si gmail change le nom du package? Allez-vous mettre à jour votre application?
Pedro Varela
2

Utilisez-le pour envoyer un e-mail ...

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

utilisez build gradle:

compile 'de.cketti.mailto:email-intent-builder:1.0.0'
Manish
la source
2

J'ai utilisé ce code pour envoyer du courrier en lançant directement la section de composition de l'application de messagerie par défaut.

    Intent i = new Intent(Intent.ACTION_SENDTO);
    i.setType("message/rfc822"); 
    i.setData(Uri.parse("mailto:"));
    i.putExtra(Intent.EXTRA_EMAIL  , new String[]{"[email protected]"});
    i.putExtra(Intent.EXTRA_SUBJECT, "Subject");
    i.putExtra(Intent.EXTRA_TEXT   , "body of email");
    try {
        startActivity(Intent.createChooser(i, "Send mail..."));
    } catch (android.content.ActivityNotFoundException ex) {
        Toast.makeText(this, "There are no email clients installed.", Toast.LENGTH_SHORT).show();
    }
Faris Muhammed
la source
1

Cette méthode fonctionne pour moi. Il ouvre l'application Gmail (si elle est installée) et définit mailto.

public void openGmail(Activity activity) {
    Intent emailIntent = new Intent(Intent.ACTION_VIEW);
    emailIntent.setType("text/plain");
    emailIntent.setType("message/rfc822");
    emailIntent.setData(Uri.parse("mailto:"+activity.getString(R.string.mail_to)));
    emailIntent.putExtra(Intent.EXTRA_SUBJECT, activity.getString(R.string.app_name) + " - info ");
    final PackageManager pm = activity.getPackageManager();
    final List<ResolveInfo> matches = pm.queryIntentActivities(emailIntent, 0);
    ResolveInfo best = null;
    for (final ResolveInfo info : matches)
        if (info.activityInfo.packageName.endsWith(".gm") || info.activityInfo.name.toLowerCase().contains("gmail"))
            best = info;
    if (best != null)
        emailIntent.setClassName(best.activityInfo.packageName, best.activityInfo.name);
    activity.startActivity(emailIntent);
}
psycho
la source
1
/**
 * Will start the chosen Email app
 *
 * @param context    current component context.
 * @param emails     Emails you would like to send to.
 * @param subject    The subject that will be used in the Email app.
 * @param forceGmail True - if you want to open Gmail app, False otherwise. If the Gmail
 *                   app is not installed on this device a chooser will be shown.
 */
public static void sendEmail(Context context, String[] emails, String subject, boolean forceGmail) {

    Intent i = new Intent(Intent.ACTION_SENDTO);
    i.setData(Uri.parse("mailto:"));
    i.putExtra(Intent.EXTRA_EMAIL, emails);
    i.putExtra(Intent.EXTRA_SUBJECT, subject);
    if (forceGmail && isPackageInstalled(context, "com.google.android.gm")) {
        i.setPackage("com.google.android.gm");
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(i);
    } else {
        try {
            context.startActivity(Intent.createChooser(i, "Send mail..."));
        } catch (ActivityNotFoundException e) {
            Toast.makeText(context, "No email app is installed on your device...", Toast.LENGTH_SHORT).show();
        }
    }
}

/**
 * Check if the given app is installed on this devuice.
 *
 * @param context     current component context.
 * @param packageName The package name you would like to check.
 * @return True if this package exist, otherwise False.
 */
public static boolean isPackageInstalled(@NonNull Context context, @NonNull String packageName) {
    PackageManager pm = context.getPackageManager();
    if (pm != null) {
        try {
            pm.getPackageInfo(packageName, 0);
            return true;
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
    }
    return false;
}
Gal Rom
la source
1
 Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(
            "mailto","[email protected]", null));
    emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Forgot Password");
    emailIntent.putExtra(Intent.EXTRA_TEXT, "Write your Pubg user name or Phone Number");
    startActivity(Intent.createChooser(emailIntent, "Send email..."));**strong text**
Tousif Akram
la source
1

Essaye ça:

String mailto = "mailto:[email protected]" +
    "?cc=" + "[email protected]" +
    "&subject=" + Uri.encode(subject) +
    "&body=" + Uri.encode(bodyText);

Intent emailIntent = new Intent(Intent.ACTION_SENDTO);
emailIntent.setData(Uri.parse(mailto));

try {
    startActivity(emailIntent);
} catch (ActivityNotFoundException e) {
    //TODO: Handle case where no email app is available
}

Le code ci-dessus ouvrira le client de messagerie préféré des utilisateurs prérempli avec le courrier électronique prêt à être envoyé.

La source

Dan Bray
la source