Comment puis-je envoyer des e-mails à partir de mon application Android?
Je suis en train d'écrire une application pour Android. Comment puis-je envoyer un e-mail à partir d'elle?
- Simple ShareBuilder gist.github.com/gelldur/9c199654c91b13478979
Vous devez vous connecter pour publier un commentaire.
La meilleure (et la plus simple) consiste à utiliser un
Intent
:Sinon, vous devrez écrire votre propre client.
ACTION_SENDTO
approche ne semble pas avoir ce problème.Intent i = new Intent(Intent.ACTION_SENDTO);
i.setType("message/rfc822");
i.setData(Uri.parse("mailto:"));
Intent.createChooser
] est lorsque l'utilisateur clique sur un "mailto:" lien. Ils seraient naturellement s'attendre à aller directement à leur application de messagerie, de sorte startActivity() doit être appelée directement: il va lancer l'actuelle application préférée, ou de mettre en place une boîte de dialogue permettant à l'utilisateur de sélectionner une application à utiliser et éventuellement de marquage au choix."Utilisation
.setType("message/rfc822")
ou le sélecteur va vous montrer toutes les (nombreuses) des applications qui prennent en charge les envoyer intention.message/rfc822
J'ai été en utilisant ce depuis fort longtemps et il semble bien, pas de non-email apps qui se montre. Juste un autre moyen pour envoyer un email envoyer intention:
setType
approche à la place de celui-ci.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 poisse.Après un peu de recherches et d'expériences, je suis venu avec la solution suivante:
Il peut être utilisé comme suit:
Comme vous pouvez le voir, le createEmailOnlyChooserIntent méthode peut facilement être nourris avec de la bonne intention et le type mime correct.
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).
ACTION_SEND
, et ce trie de belles.File
instance pointant vers un crash fichier journal de mon Android apps créer dans l'arrière-plan dans le cas où il y a une exception non interceptée. Cela devrait juste illustrer comment ajouter une pièce jointe à un courriel. Vous pouvez également joindre un fichier à partir de l'appareil de stockage externe (une image par exemple). Vous pouvez également supprimer cette ligne aveccrashLogFile
afin d'obtenir un exemple de travail.'You can only send files stored on your device.'
message lorsque vous essayez d'envoyer le fichier; avec Google Drive, il utiliserait leEXTRA_SUBJECT
que le nom de fichier par défaut au lieu du nom du fichier.À JUSTE LAISSER e-MAIL APPS pour résoudre votre intention, vous devez spécifier ACTION_SENDTO comme Action et mailto comme des Données.
J'ai résolu ce problème avec de simples lignes de code que l'android documentation explique.
(https://developer.android.com/guide/components/intents-common.html#Email)
Le plus important est le drapeau: il est
ACTION_SENDTO
, et pasACTION_SEND
L'autre ligne importante est
Par ailleurs, si vous envoyez un vide
Extra
, leif()
à la fin ne fonctionne pas et l'application ne sont pas de lancer le client de messagerie.Selon Android documentation. Si vous voulez vous assurer que votre intention est traité uniquement par une application d'e-mail (et pas à d'autres, la messagerie texte ou applications sociales), puis utilisez le
ACTION_SENDTO
d'action et d'inclure les "mailto:
" schéma de données. Par exemple:La stratégie d'utilisation des
.setType("message/rfc822")
ouACTION_SEND
semble également correspondre à des applications qui ne sont pas clients de messagerie, tels que Android Beam et Bluetooth.À l'aide de
ACTION_SENDTO
et unmailto:
URI semble fonctionner parfaitement, et est recommandé dans la documentation du développeur. Cependant, si vous faites cela sur la page officielle des émulateurs et il n'y a pas de comptes de messagerie mis en place (ou il ne sont pas tous les clients de messagerie), vous obtenez l'erreur suivante:Comme indiqué ci-dessous:
Il s'avère que les émulateurs de résoudre l'intention d'une activité appelée
com.android.de secours.De secours
, qui affiche le message ci-dessus. Apparemment, c'est par la conception.Si vous voulez que votre application pour contourner cela, de sorte qu'il fonctionne correctement sur la page officielle des émulateurs, vous pouvez vérifier avant de tenter de les envoyer par courriel à:
Trouver plus d'info dans la documentation du développeur.
L'envoi d'e-mail peut être fait avec des Intentions qui ne nécessitent aucune configuration. Mais ensuite, il aura besoin de l'utilisateur et la mise en page est un peu restreinte.
Construire et l'envoi de plus en plus complexes, e-mail, sans interaction de l'utilisateur implique la construction de votre propre client. La première chose est que le Soleil API Java pour les e-mails ne sont pas disponibles. J'ai eu du succès en tirant parti de l'Apache Mime4j bibliothèque pour construire e-mail. Tous basés sur les docs à nilvec.
simple, essayez celui -
J'utilise le code ci-dessous dans mes applications. Cela montre exactement client de messagerie applications, telles que Gmail.
Voici un exemple de code de travail qui s'ouvre application de messagerie en appareil android et auto-rempli avec À l'adresse et Sujet dans la composition de la poste.
setData()
, et Avi jeux enputExtra()
. Les deux variantes de travail. Mais si supprimersetData
et d'utiliser seulementintent.putExtra(Intent.EXTRA_EMAIL, new String[]{"[email protected]"});
, il y aurait unActivityNotFoundException
.Autre solution ne peut être
En supposant que la plupart de l'appareil android est l'application GMail est déjà installé.
L'utiliser pour envoyer des e-mail...
utiliser build gradle :
Cette fonction première intention directe de gmail pour envoyer des emails, si gmail est pas trouvé, alors promouvoir l'intention de sélecteur. J'ai utilisé cette fonction dans le commerce de nombreux app et ça fonctionne. Espérons, vous aidera à:
Cela vous montrera tous les clients de messagerie (comme avec PayPal, pour une raison inconnue)
intent.type = "message/rfc822"; intent.type = "text/html";
ici, car cela conduira à une exception.C'est la façon dont je l'ai fait. Agréable et simple.
J'ai utilisé ce code pour envoyer un mail, en lançant par défaut de l'application de messagerie de composer directement la section.
Cette méthode de travail pour moi. Ouvrir l'application Gmail (si installé) et définir mailto.