无法使用javax.mail从谷歌收集电子邮件中的草稿,垃圾邮件和垃圾箱文件夹

时间:2011-09-05 07:13:00

标签: java gmail imap javax.mail

我想从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

5 个答案:

答案 0 :(得分:5)

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

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

希望这有帮助。

答案 1 :(得分:2)

最简单的答案是,草稿,垃圾邮件和已删除邮件不是文件夹,而是Google Mail中的标签。我正在进行谷歌搜索以验证我的答案。


更新:在进行一些Google搜索后,我发现SO Post表示[Gmail]/*文件夹是不可选择的文件夹。

答案 2 :(得分:0)

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());

}

答案 3 :(得分:0)

以下文件夹名称:

[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) {
            }
        }
    }
}

答案 4 :(得分:0)

下面列出了一些默认的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");