阅读从GMail发送的邮件

我正在使用JavaMail在我的Android应用程序中阅读邮件。 我试图涵盖所有组合,即在/自定义服务器/ Gmail ID / Live ID上发送/接收的邮件。

从GMail WITH Attachment发送的一些邮件会出现问题。 我能够收到附件,但内容返回javax.mail.internet.MimeMultipart@44f2e698

这是用于接收和阅读消息的代码:

  Properties props = System.getProperties(); props.setProperty("mail.store.protocol", "imap"); try { /* Create the session and get the store for read the mail. */ Session session = Session.getInstance(props, null); Store store = session.getStore("imaps"); store.connect("imap.gmail.com", Username, Password); /* Mention the folder name which you want to read. */ Folder inbox = store.getFolder("INBOX"); System.out.println("No of Unread Messages : " + inbox.getUnreadMessageCount()); /* Open the inbox using store. */ inbox.open(Folder.READ_ONLY); Message messages[] = inbox.getMessages(); Log.d("Inbox", "Message Count: "+inbox.getMessageCount()); for (int i = messages.length - 1 ; i > 0; --i) { Log.i("ContentType", "ContentType: "+messages[i].getContentType()); Object msgContent = messages[i].getContent(); String content = ""; /* Check if content is pure text/html or in parts */ if (msgContent instanceof Multipart) { Multipart multipart = (Multipart) msgContent; Log.e("BodyPart", "MultiPartCount: "+multipart.getCount()); 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("Content: "+bodyPart.getContent()); content= bodyPart.getContent().toString(); } } } else content= messages[i].getContent().toString(); 

我对有问题的邮件了解的内容:

  • getFrom也返回名称,即它以这种格式出现FirstName LastName &ltemailID@gmail.com&gt

  • MultiPart包含2个BodyPart:

    • BodyPart 1将内容返回为javax.mail.internet.MimeMultipart@44f2e698

    • BodyPart 2返回正确的附件名称

BodyPart 1将内容返回为javax.mail.internet.MimeMultipart@44f2e698

尝试在MimeMultiPart上调用getBodyPart

这可能会返回一个MimeBodyPart,您可以在http://docs.oracle.com/javaee/5/api/javax/mail/internet/MimeBodyPart.html#content上调用getContent()

您可能只处理带附件的文本消息的最简单情况。 MIME允许更多。 您需要了解multipart / mixed,multipart / alternative,multipart / related和multipart / signed之间的区别。 JavaMail FAQ提供了有关处理附件的更多信息,JavaMail下载包中包含的msgshow.java演示程序显示了如何使用嵌套的多部分处理消息。