【问题标题】:Problems retrieving emails from gmail in Android app在 Android 应用程序中从 gmail 检索电子邮件的问题
【发布时间】:2011-12-24 05:19:45
【问题描述】:

我正在使用 java 中内置的 java mail api 从用户的 gmail 邮箱中获取用户的邮件,大部分代码是我在 another SO question 中找到的。而且我能够正确地提取我想要的大部分信息,例如我邮箱中的主题、发件人和其他信息。

一切都很好,除了当我去拉消息的“内容”时,它并不总是拉消息的内容。 10 次中只有 1 次有效。其他 9 次只找到“javax.mail.internet.MimeMultipart@40e9c920

我的代码如下。我将输出打印到LogCat 进行测试。提前致谢。

Properties props = System.getProperties();
            Session session = Session.getDefaultInstance(props, null);
            Store store = session.getStore("imaps");
            store.connect("imap.gmail.com", "Email address here",
                    "password here");
            Folder inbox = store.getFolder("Inbox");
            inbox.open(Folder.READ_ONLY);
            Message messages[] = inbox.getMessages();
            for (Message message : messages)
                Log.d("Email", message + "");
            Message message[] = inbox.getMessages();
    
                    for (int i = 0; i < 25; i++) {
                        Log.d("From", message[i].getFrom()[0] + "");
                        Log.d("Subject", message[i].getSubject() + "");
                        String content = message[i].getContent().toString();
                        Log.d("content", content + "");
                        
                    }

编辑: 经过一些额外的研究,我发现它与使用 JavaMail 阅读多部分电子邮件有关

【问题讨论】:

    标签: android gmail


    【解决方案1】:

    如果其他人有这个问题,它不能一直工作的原因是当它发现多部分消息时,它无法读取它们。以下是阅读多部分电子邮件的解决方案。我找到了大部分代码on this website

    String s = message[i].getContent() + "";
    
                        if(s.indexOf("MimeMultipart") != -1){
                            Multipart multipart = (Multipart) message[i].getContent();
    
                              for (int x = 0; x < multipart.getCount(); x++) {
                              BodyPart bodyPart = multipart.getBodyPart(x);
    
                              String disposition = bodyPart.getDisposition();
                              //Log.d("disposition", disposition + "");
    
                              if (disposition != null && (disposition.equals(BodyPart.ATTACHMENT))) {
                                  System.out.println("Mail have some attachment : ");
    
                                  DataHandler handler = bodyPart.getDataHandler();
                                  System.out.println("file name : " + handler.getName());
                                  } else {
                                  System.out.println(bodyPart.getContent());
                                  }
                                  }
                                  System.out.println();
    
    
    
                              }
    
                        else
                            Log.d("Content", message[i].getContent() + "");
    
                    } 
    

    【讨论】:

    • 我没有复制你的答案,但你的逻辑对我帮助很大。
    【解决方案2】:

    试试这个,

    imap.gmail.com 替换为 smtp.gmail.com

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-24
    • 2012-04-17
    • 2015-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-29
    • 1970-01-01
    相关资源
    最近更新 更多