在Android应用中从gmail检索电子邮件时出现问题

时间:2011-12-24 05:19:45

标签: android gmail

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

除非我去了内容"它不总是拉消息的内容。它只有十分之一的效果。其他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阅读多部分电子邮件有关

2 个答案:

答案 0 :(得分:3)

如果其他人有这个问题,那么它一直没有工作的原因是当它发现多部分消息时它无法读取它们。以下是阅读多部分电子邮件的解决方案。我找到了大部分代码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() + "");

                } 

答案 1 :(得分:2)

试试这个,

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