La lecture de l'e-mail complète à partir de GMail à l'aide de JavaMail
Je suis en train de l'utilisation de javamail et je vais avoir du mal à obtenir le code HTML à partir de mes messages gmail. J'ai le texte suivant:
Session session = Session.getDefaultInstance(props, null);
Store store = session.getStore("imaps");
store.connect("imap.gmail.com", "[email protected]", "password");
System.out.println(store);
Folder inbox = store.getFolder("Inbox");
inbox.open(Folder.READ_ONLY);
Message messages[] = inbox.getMessages();
for(Message message:messages) {
System.out.println(message); //com.sun.mail.imap.IMAPInputStream@cec0c5
Ci-dessus fonctionne très bien mais je ne peux pas imprimer ou obtenir le HTML Texte ou e-mail. Je viens d'obtenir une sorte de InputStream, comment faire face à cette facilement pour obtenir le code HTML brut de l'e-mail?
J'ai aussi essayé une boucle dans le message, mais cela ne m'obtenez pas très loin:
Message message[] = inbox.getMessages();
for (int i=0, n=message.length; i<n; i++) {
System.out.println(i + ": " + message[i].getFrom()[0]
+ "\t" + message[i].getSubject());
String content = message[i].getContent().toString();
if (content.length() > 200)
content = content.substring(0, 600);
System.out.print(content);
}
Merci à tous pour toute aide.
L'erreur est
Un commentaire pour aider quelqu'un d'autre : notez qu'en utilisant le protocole pop3 est obsolète (Avec Gmail, je n'ai pas récupérer mes courriels lus en java-API avec elle), et de passer à imaps résolu.
System.Out.Println(message);
. Il permet d'imprimer l'objet de la classe Message. Remplacez cette ligne par System.Out.Println(message.getContent().toString);
. Il permet d'imprimer le mail avec les balises html.Un commentaire pour aider quelqu'un d'autre : notez qu'en utilisant le protocole pop3 est obsolète (Avec Gmail, je n'ai pas récupérer mes courriels lus en java-API avec elle), et de passer à imaps résolu.
OriginalL'auteur Abs | 2011-05-08
Vous devez vous connecter pour publier un commentaire.
La
InputStream
objet contient le corps de l'email. Vous devez lire l'intégralité du flux de lire l'ensemble du corps du message. Par exemple, cette SORTE de post détails comment écrire unInputStream
à unOutputStream
commeSystem.out
à l'aide d'un Apache bibliothèque. Que serait un bon endroit pour commencer que vous pouvez imprimer l'ensemble du corps du message à la console. Sinon, vous devrez utiliser des tampons, etc, afin de tirer les données de la rivière et de la mettre dans tout ce que vous voulez mettre dedans. Il est également cette SORTE de post que les détails, en utilisant la même bibliothèque, comment faire pour convertir unInputStream
dans unString
.String myString = IOUtils.toString(p.getInputStream(), "UTF-8");
mais il comprend d'autres choses - comment puis-je obtenir juste la partie HTML qui, j'imagine, est ce que Femi est d'essayer de répondre.OriginalL'auteur Chris Thompson
Le problème est que les données que vous obtenez est généralement les données brutes pour un/mime multipart flux. Vous avez besoin de faire quelque chose comme ceci:
Bonne chance.
msg
àmessage
mais pour une raison quelconque, le ci-dessus quitte tout de suite. Pour une raison quelconque, la conditionjavax.mail.Multipart.class.isInstance(message)
n'est jamais vrai pour moi?Je serais très intéressé de savoir, comment je peux obtenir juste le HTML ou Texte Brut de la partie de l'e-mail. Je suis en train de faire de l'utilisation
String myString = IOUtils.toString(p.getInputStream(), "UTF-8");
qui fonctionne, mais pour certains e-mails, il peut récupérer plus que le HTML ou le Texte de la version de l'e-mail.Impair. Si vous utilisez soleil (je suppose que oracle) javamail, le Message que vous récupérer peut-être un MimeMessage instance. Si c'est un MimeMessage exemple il pourrait être en plusieurs parties, et si son multipart faire p.getInputStream() permet de récupérer les données pour toutes les parties. Vous avez besoin d'itérer sur les Pièces à la recherche pour le text/plain ou text/html Partie et ensuite utiliser
IOUtils.toString
sur cette partie.eh bien, je suis en utilisant JavaMail, mais la version android, qui semblent similaires. code.google.com/p/javamail-android
OriginalL'auteur Femi
Vous pouvez utiliser IOUtils de Apache Commons ou peuvent peut-être même essayer quelque chose le long des lignes de :
OriginalL'auteur Sai
si vous utilisez java mail, vous pouvez utiliser "multipart" et "articulaires" objets d'aller à travers le message électronique à l'extrait de l' "text/plain" et "text/html" contenu, le contenu que vous souhaitez.
OriginalL'auteur Zephyr
votre pourrait essayer avec le MimeMessage classe:
MimeMessage(session, message.getContent())
prendInputStream
comme deuxième paramètre, maisObject
est donnéOriginalL'auteur Louis