Je vous écris une application pour Android. Comment puis-je envoyer un email de lui ?
Réponses
Trop de publicités?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).