JavaMail检查消息内容gmail IMAP

我正在尝试阅读我的消息,我可以让它打印标题,但来自和内容显示有趣。 这是我用来显示消息的代码:

int j = message.length-1; for (int i=j;i>=0;i--) { System.out.println("Message " + (i + 1)); System.out.println("From : " + message[i].getFrom()); System.out.println("Subject : " + message[i].getSubject()); try { System.out.println("Body: " + message[i].getContent()); } catch (IOException ex) { System.out.println(ex); } } 

输出如下:

  Message 1: From: [javax.mail.internet.InternetAddress;@175831e] Subject: Hello //This is correct Body: javax.mail.internet.MimeMultipart@15b5219 

为什么不打印from语句的实际电子邮件地址? 为什么不打印实际的身体内容? (我只对纯文本感兴趣。)

整码:

 import javax.mail.*; import javax.mail.internet.*; import javax.mail.search.*; import java.util.*; import com.sun.mail.imap.*; import java.io.*; public class MailClient { public static void main(String[] args) { try { Properties props = new Properties(); props.put("mail.store.protocol","imaps"); Session session; session = Session.getDefaultInstance(props, null); Store store = session.getStore("imaps"); store.connect("imap.gmail.com","email@gmail.com","password"); IMAPFolder folder = (IMAPFolder) store.getFolder("inbox"); folder.open(Folder.READ_ONLY); Flags seen = new Flags(Flags.Flag.SEEN); FlagTerm unseenFlagTerm = new FlagTerm(seen,false); Message message[] = folder.search(unseenFlagTerm); int j = message.length-1; for (int i=j;i>=0;i--) { System.out.println("Message " + (i + 1)); System.out.println("From : " + message[i].getFrom()); System.out.println("Subject : " + message[i].getSubject()); try { System.out.println("Body: " + message[i].getContent()); } catch (IOException ex) { System.out.println(ex); } } System.out.println(newMsg); folder.close(false); store.close(); } catch (MessagingException e) { System.out.println("Error: " + e); } } } 

谢谢!

对于纯文本和html消息:

String content= messages[i].getContent().toString();

对于多部分消息:

 Multipart multipart = (Multipart) messages[i].getContent(); for (int j = 0; j < multipart.getCount(); j++) { BodyPart bodyPart = multipart.getBodyPart(j); String disposition = bodyPart.getDisposition(); if (disposition != null && (disposition.equalsIgnoreCase("ATTACHMENT"))) { // BodyPart.ATTACHMENT doesn't work for gmail System.out.println("Mail have some attachment"); DataHandler handler = bodyPart.getDataHandler(); System.out.println("file name : " + handler.getName()); } else { System.out.println("Body: "+bodyPart.getContent()); content= bodyPart.getContent().toString(); } 

JavaMail FAQ告诉您如何访问消息的主要文本正文 。

改变这一点

 message[i].getFrom() 

 message[i].getFrom()[0].toString()) 

尝试使用下一个:

 message[i].writeTo(System.out);