2011-09-05 45 views
2

我想從gmail的所有文件夾中獲取電子郵件。 從收件箱,發送的文件夾和其他文件夾我成功地收到電子郵件。 但是,當我嘗試從草稿,垃圾郵件和垃圾得到它我得到一個異常:無法使用javax.mail從Google搜索草稿箱,垃圾郵件和垃圾箱文件夾中的電子郵件

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 

回答

2

最簡單的答案是草稿,垃圾郵件和垃圾郵件不是文件夾,而是Google Mail中的標籤。我正在做一個Google搜索來驗證我的答案。


更新:一些谷歌搜索後,我發現了一個SO Post其中指出,[Gmail]/*文件夾是不可選擇的文件夾。

+2

我使用imapSslStore.getDefaultFolder()。list(「*」);讓所有的文件夾和我得到這樣的名單: INBOX 個人 收據 旅遊 工作 的[Gmail] [Gmail] /所有郵件 的[Gmail] /草稿 的[Gmail] /重要 [Gmail] /已發送郵件 [Gmail] /垃圾郵件 [Gmail] /加星標 [Gmail] /垃圾郵件 – Hleb

+0

然後嘗試執行'folderName =「Gmail /草稿」'並查看它是否有效(或'folderName =「/ Drafts」')。 –

+0

不,現在我得到了javax.mail.FolderNotFoundException。 – Hleb

5

我在我的Gmail帳戶中發現垃圾文件夾名爲「[Google Mail]/Bin」等,而不是「Gmail」/「垃圾」。

我在英國,當我第一次打開我的Gmail帳戶時,確實是[email protected],而不是我@ gmail.com。

希望這會有所幫助。

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

} 
+0

請詳細說明您的答案。 –

0

下面的文件夾名稱:完美的我

[Gmail]/Spam 

作品。這裏是我經常使用Java代碼閱讀垃圾郵件的代碼:

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