546 votes

Comment puis-je envoyer des emails de mon application Android ?

Je vous écris une application pour Android. Comment puis-je envoyer un email de lui ?

1009voto

fiXedd Points 21644

La meilleure (et la plus simple) consiste à utiliser un `` :

Dans le cas contraire, vous devrez écrire votre propre client.

202voto

Jeff S Points 1815

Utilisation `` ou le sélecteur vous montrera toutes les applications (nombreux) qui prennent en charge l’intention d’envoyer.

98voto

yuku Points 15705

J’utilise cela depuis longtemps et il semble bon, pas apparaître des applications non-email. Juste une autre façon d’envoyer une intention de courriel envoi :

56voto

Nobu Games Points 2760

J'ai été en utilisant quelque chose le long des lignes de la actuellement accepté de répondre pour envoyer des emails avec un joint binaire fichier journal des erreurs. GMail et K-9 envoyer c'est très bien et il arrive aussi très bien sur mon serveur de messagerie. Le seul problème était que mon client de messagerie de choix Thunderbird qui avaient des problèmes avec l'ouverture / enregistrement de la joint le fichier de log. En fait, il n'a tout simplement pas enregistrer le fichier à tous, sans se plaindre.

J'ai pris un coup d'oeil à l'un de ces mail les codes source et remarqué que le fichier de la pièce jointe a (à juste titre) le type mime message/rfc822. Bien sûr que l'attachement n'est pas un e-mail joint. Mais Thunderbird ne peut pas faire face à cette minuscule erreur gracieusement. C'était donc une sorte de déception.

Après un peu de recherches et d'expériences, je suis venu avec 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",
                "info@domain.com", 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, le createEmailOnlyChooserIntent méthode peut facilement être nourris avec de la bonne intention et le bon type mime.

Il passe ensuite à travers la liste des activités qui répondent à un ACTION_SENDTO mailto protocole d'intention (qui sont des applications uniquement) et construit un sélecteur de fonction sur la liste des activités et l'origine ACTION_SEND intention avec le bon type mime.

Un autre avantage est que Skype n'est pas répertorié plus (ce qui arrive à répondre à la rfc822 type mime).

39voto

wildzic Points 78

Juste laisser EMAIL APPS pour résoudre votre intention, vous devez spécifier ACTION_SENDTO comme Action et mailto sous forme de données.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X