【问题标题】:Can't get emails in Drafts, Spam and Trash folders from google using javax.mail无法使用 javax.mail 从 Google 获取草稿、垃圾邮件和垃圾箱文件夹中的电子邮件
【发布时间】:2011-11-10 09:59:54
【问题描述】:

我想从 gmail 的所有文件夹中获取电子邮件。 从收件箱、已发送和其他文件夹中,我成功收到了电子邮件。 但是当我尝试从草稿、垃圾邮件和垃圾箱中获取它时,我得到了一个例外:

09:51:45,622 ERROR MailRetriever.[main]getNoFlaggedMails:142 - Can't get messages: javax.mail.MessagingException: connection failure
javax.mail.MessagingException: connection failure
at com.sun.mail.imap.IMAPStore.getProtocol(IMAPStore.java:742)
at com.sun.mail.imap.IMAPFolder.open(IMAPFolder.java:910)
at ua.com.stormlabs.gap.gmail.MailRetriever.getNoFlaggedMails(MailRetriever.java:133)
at ua.com.stormlabs.gap.gmail.GMailServiceProcessor.processFolder(GMailServiceProcessor.java:95)
at ua.com.stormlabs.gap.gmail.GMailServiceProcessor.start(GMailServiceProcessor.java:80)
at ua.com.stormlabs.gap.gmail.GMailGapApp.main(GMailGapApp.java:21)

这是检索邮件的代码:

Folder folder = imapSslStore.getFolder(folderName);
folder.open(Folder.READ_WRITE);
openedFolders.put(folderName, folder);

Flags searchFlags = new Flags(Flags.Flag.USER);
searchFlags.add(FLAG_PREFIX + READ_BY_GAP_FLAG);
Message[] messages = folder.search(new FlagTerm(searchFlags, false));
log.debug("Messages list retrieved: " + messages.length);
return messages;

我尝试打开失败的文件夹名称:

[Gmail]/Drafts
[Gmail]/Spam
[Gmail]/Trash

【问题讨论】:

    标签: java gmail imap jakarta-mail


    【解决方案1】:

    下面列出了一些默认的 GMAIL 文件夹名称。

    INBOX
    Notes
    Personal
    Receipts
    Work
    [Gmail]/All Mail
    [Gmail]/Drafts
    [Gmail]/Important
    [Gmail]/Sent Mail
    [Gmail]/Spam
    [Gmail]/Starred
    [Gmail]/Trash
    
    Code ex:
    Folder mailFolder = store.getFolder("[Gmail]/Trash");
    

    【讨论】:

      【解决方案2】:

      以下文件夹名称:

      [Gmail]/Spam
      

      非常适合我。这是我经常使用 Javamail 读取垃圾邮件文件夹的代码:

      private void readFolder(int max, boolean deletes, List<Message> result, Store store, String folderName) throws MessagingException, IOException {
          Folder folder = null;
          try {
              folder = store.getFolder(folderName);
              folder.open(Folder.READ_WRITE);
              Message[] messages = folder.getMessages();
              for (int i = 0; i < messages.length && result.size() < max; i++) {
                  Message message = messages[i];
                  if (deletes && (!message.getFlags().contains(Flag.DELETED))) {
                      message.setFlag(Flag.DELETED, true);
                  }
                  result.add(message);
              }
          } finally {
              if (folder != null) {
                  try {
                      folder.close(true);
                  } catch (Exception e) {
                  }
              }
          }
      }
      

      【讨论】:

        【解决方案3】:
        Folder[] f = store.getDefaultFolder().list();
        for(Folder fd:f){
            Folder t[]=fd.list();
        
              System.out.println("-------"+fd.getName()+"------");
            for(Folder f1:t)
                System.out.println("->"+f1.getName());
        
        }
        

        【讨论】:

        • 请详细说明你的答案。
        【解决方案4】:

        我在我的 Gmail 帐户中发现垃圾文件夹名为“[Google Mail]/Bin”等,而不是“Gmail]/Trash”。

        我在英国,当我第一次打开我的 Gmail 帐户时,确实是 me@googlemail.com 而不是我 @gmail.com。

        希望这会有所帮助。

        【讨论】:

          【解决方案5】:

          最简单的答案是,草稿、垃圾邮件和垃圾箱不是文件夹,而是 Google Mail 中的标签。我正在 Google 搜索以验证我的答案。


          更新:经过一些 Google 搜索,我发现了一个 SO Post,其中指出 [Gmail]/* 文件夹是不可选择的文件夹。

          【讨论】:

          • 我使用 imapSslStore.getDefaultFolder().list("*");获取所有文件夹,我得到这样的列表:收件箱个人收据旅行工作 [Gmail] [Gmail]/所有邮件 [Gmail]/草稿 [Gmail]/重要 [Gmail]/已发送邮件 [Gmail]/垃圾邮件 [Gmail]/已加星标[Gmail]/垃圾箱
          • 然后尝试做folderName = "Gmail/Drafts" 看看它是否有效(或folderName = "/Drafts")。
          • 不,现在我得到 javax.mail.FolderNotFoundException。
          • @Hleb,这没有帮助。异常(和消息)的原因是什么?
          • 10:37:21,565 错误 MailRetriever.[main]getNoFlaggedMails:142 - 无法获取消息:javax.mail.FolderNotFoundException: /Drafts not found javax.mail.FolderNotFoundException: /Drafts not found at com.sun.mail.imap.IMAPFolder.checkExists(IMAPFolder.java:388) 在 com.sun.mail.imap.IMAPFolder.open(IMAPFolder.java:1000) 在 ua.com.stormlabs.gap.gmail.MailRetriever。 getNoFlaggedMails(MailRetriever.java:133) at ua.com.stormlabs.gap.gmail.GMailServiceProcessor.processFolder(GMailServiceProcessor.java:95)
          猜你喜欢
          • 2011-07-12
          • 1970-01-01
          • 2011-06-29
          • 2012-08-01
          • 1970-01-01
          • 2019-11-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多