java gmail imap,使用JavaMail从GMail中读取完整的电子邮件

  • Post author:
  • Post category:java


I am making use of javamail and I am having trouble getting the HTML from my gmail emails. I have the following:

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

The above all works fine but I can’t print or get the actual HTML or Text email. I just get some sort of InputStream, how do I deal with this easily to get the raw HTML of the email?

I also tried looping through the message but that didn’t get me very far:

Message message[] = inbox.getMessages();

for (int i=0, n=message.length; 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);

}

Thanks all for any hlep.

解决方案

The InputStream object contains the body of the email. You need to read the entirety of the stream to read the entire body of the message. For instance, this SO post details how to write an entire InputStream to an OutputStream such as System.out using an Apache library. That would be a good place to start as you could print the entire message body to the console. Otherwise, you’ll need to use some buffers, etc, to pull the data out of the stream and put it into whatever you want to put it in. There is also this SO post that details, using the same library, how to convert an InputStream into a String.