Java 阅读GMail发送的邮件

Java 阅读GMail发送的邮件,java,android,gmail,jakarta-mail,Java,Android,Gmail,Jakarta Mail,我在Android应用程序中使用JavaMail阅读邮件。我已尝试涵盖所有组合,即在自定义服务器/Gmail ID/Live ID上发送/接收的电子邮件 问题发生在GMail发送的一些带有附件的邮件上。我可以接收附件,但内容返回javax.mail.internet。MimeMultipart@44f2e698 以下是用于接收和读取消息的代码: Properties props = System.getProperties(); props.setProperty("mail.s

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

问题发生在GMail发送的一些带有附件的邮件上。我可以接收附件,但内容返回
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();
Properties-props=System.getProperties();
props.setProperty(“mail.store.protocol”、“imap”);
试一试{
/*创建会话并获取用于读取邮件的存储*/
Session Session=Session.getInstance(props,null);
Store Store=session.getStore(“imaps”);
store.connect(“imap.gmail.com”、用户名、密码);
/*提及要读取的文件夹名称*/
文件夹收件箱=store.getFolder(“收件箱”);
System.out.println(“未读邮件数:+inbox.getUnderMessageCount());
/*使用应用商店打开收件箱*/
收件箱。打开(文件夹。只读);
messages[]=inbox.getMessages();
Log.d(“收件箱”,“邮件计数:”+Inbox.getMessageCount());
对于(int i=messages.length-1;i>0;--i){
Log.i(“ContentType”,“ContentType:+消息[i].getContentType());
对象msgContent=messages[i].getContent();
字符串内容=”;
/*检查内容是否为纯文本/html或部分*/
if(多部分的msgContent实例){
Multipart Multipart=(Multipart)msgContent;
Log.e(“BodyPart”、“MultiPartCount:+multipart.getCount());
对于(int j=0;j
我对有问题邮件的了解:

  • getFrom
    还返回名称,即它的格式为FirstName LastName<emailID@gmail.com&燃气轮机

  • MultiPart包含两个车身部件:

    • BodyPart 1以
      javax.mail.internet的形式返回内容。MimeMultipart@44f2e698

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

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

尝试在上调用getBodyPart

这可能会返回一个你可以调用的MimeBodyPart

您可能只处理带有附件的文本消息的最简单情况。MIME允许更多。您需要了解多部分/混合、多部分/替代、多部分/相关和多部分/签名之间的区别。JavaMail常见问题解答提供了有关处理附件的更多信息,其中包括msgshow.java演示程序通过JavaMail下载包,可以看到如何使用嵌套的多部分处理消息。

方法bodyPart.getContent()返回什么类型的对象?String?其他自定义对象?