使用JavaMail阅读GMail的完整电子邮件

我正在使用javamail,我无法从我的Gmail电子邮件中获取HTML。 我有以下内容:

Session session = Session.getDefaultInstance(props, null); Store store = session.getStore("imaps"); store.connect("imap.gmail.com", "myemail@gmail.com", "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 

以上一切正常,但我无法打印或获取实际的HTML或文本电子邮件。 我只是得到某种InputStream,如何轻松处理这个以获取电子邮件的原始HTML?

我也试过循环浏览消息,但这并没有让我走得太远:

 Message message[] = inbox.getMessages(); for (int i=0, n=message.length; i 200) content = content.substring(0, 600); System.out.print(content); 

}

非常感谢所有的hlep。

InputStream对象包含电子邮件的正文。 您需要读取整个流以读取整个消息体。 例如, 这篇SOpost详细介绍了如何使用Apache库将整个InputStream写入OutputStream例如System.out 。 这将是一个很好的起点,因为您可以将整个邮件正文打印到控制台。 否则,您将需要使用一些缓冲区等来将数据从流中拉出并将其放入您想要放入的任何内容中。还有这个SOpost详细说明,使用相同的库,如何转换将InputStream转换为String

问题是您获得的数据通常是mime / multipart流的原始数据。 你需要做这样的事情:

 for(Message message:messages) { if(javax.mail.Multipart.class.isInstance(message)){ Multipart parts = (Multipart)msg.getContent(), innerPart; int i; for(i=0;i 

祝你好运。

您可以使用Apache Commons的IOUtils,甚至可以尝试以下方面的内容:

 BufferedReader br = new BufferedReader(new InputStreamReader(daInputStream)); String oneLine = ""; while ( (oneLine = br.readLine()) != null ) System.out.println(oneLine); 

如果你使用java邮件,你可以使用“multipart”和“bodypart”对象来浏览电子邮件消息,以提取“text / plain”和“text / html”内容,这些内容就是你想要的内容。

你可以尝试使用MimeMessage类:

 Session session = Session.getDefaultInstance(props, null); Store store = session.getStore("imaps"); store.connect("imap.gmail.com", "myemail@gmail.com", "password"); Folder inbox = store.getFolder("Inbox"); inbox.open(Folder.READ_ONLY); Message messages[] = inbox.getMessages(); for(Message message:messages) { MimeMessage im = new MimeMessage(session, message.getContent()); im.getFrom(); im.getMessageID(); ... }