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

时间:2011-05-08 16:11:12

标签: java gmail javamail

我正在使用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或Text电子邮件。我只是得到某种InputStream,如何轻松处理这个以获取电子邮件的原始HTML?

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

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);

}

感谢所有人的支持。

5 个答案:

答案 0 :(得分:6)

问题是您获得的数据通常是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<parts.getCount();i++){
      javax.mail.BodyPart p = parts.getBodyPart(i);
      if("text/html".equals(p.getContentType())){
        // now you can read out the contents from p.getContent()
        // (which is typically an InputStream, but depending on your javamail
        // libraries may be something else
      }
    }
  }
}
祝你好运。

答案 1 :(得分:4)

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

答案 2 :(得分:3)

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

您可以尝试使用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();
    ...
}