2011-01-25 58 views
33

我正在使用JavaMail API連接到我的個人帳戶。我有我創建的Gmail帳戶中的文件夾(標籤)列表+收件箱,草稿等默認文件夾。如何列出所有可用文件夾(默認和用戶創建的)?如何使用JavaMail獲取郵件帳戶中可用文件夾的列表

我可以使用此API訪問特定文件夾:Folder inbox = store.getFolder("Inbox");。是否有任何其他API可以獲取郵件帳戶中可用的文件夾列表?

+0

爲什麼你接受一個答案,但沒有給你你想要的結果? – dkarp 2011-01-26 05:51:30

回答

26

下面是可用的代碼。這會讓你處理所有的標籤。要深入到folder,您可以執行folder.list(),或者您可以使用store.getDefaultFolder().list("*")檢索其他答案中建議的所有文件夾和子文件夾。

Properties props = System.getProperties(); 
props.setProperty("mail.store.protocol", "imaps"); 
Session session = Session.getDefaultInstance(props, null); 
Store store = session.getStore("imaps"); 
store.connect("imap.gmail.com", "[email protected]", "[email protected]"); 
System.out.println(store); 

Folder[] f = store.getDefaultFolder().list(); 
for(Folder fd:f) 
    System.out.println(">> "+fd.getName()); 

輸出:

> > INBOX
> >個人
> >收據
> >旅遊
> >工作
> >的[Gmail]


OLD ANSWER

請注意,這是不正確的,它是在this answer正確指出的dkarp

這些應該做的:

http://java.sun.com/products/javamail/javadocs/javax/mail/Store.html#getSharedNamespaces%28%29

http://java.sun.com/products/javamail/javadocs/javax/mail/Store.html#getUserNamespaces%28java.lang.String%29

+0

`Folder [] folders = store.getPersonalNamespaces();`當我試過這段代碼的時候folders.length始終是1.但是我的gmail帳戶裏有8個文件夾.. 同樣如果我用`Folder [] folders = store.getSharedNamespaces();`長度始終爲零。 – Jagadesh 2011-01-25 07:19:50

+0

這個答案根本不對。此代碼使JavaMail發佈[NAMESPACE命令](http://tools.ietf.org/html/rfc2342#section-5),該命令幫助發現已認證用戶的文件夾,其他用戶的文件夾的前綴,和共享文件夾。但它當然不會做文件夾列表。 – dkarp 2011-01-26 05:52:58

+1

您包含的代碼不會提供您列出的輸出。你需要在`list()`中顯式的`「*」`,否則它只會返回`INBOX`和不可選的`[Gmail]`。 – dkarp 2011-01-26 14:01:20

0

如何store.getDefaultFolder().list()?只是猜測,但。

53

Sergey已關閉,但默認情況下,JavaMail的list()執行的操作LIST "" %僅爲您提供頂級文件夾。 GMail將其系統文件夾(所有郵件,草稿,已發郵件,垃圾郵件,已加星標和已刪除垃圾郵件)置於不可選文件夾[Gmail]之下,因此您確實需要改爲LIST "" *。否則,您只需返回,[Gmail]和您的標籤。

下面是連接到Gmail的一些示例代碼,獲取文件夾列表,並打印出了名和郵件數每個非\NoSelect文件夾(即不只是層次佔位符的,如[Gmail]):

Properties props = System.getProperties(); 
props.setProperty("mail.store.protocol", "imaps"); 
try { 
    Session session = Session.getDefaultInstance(props, null); 
    javax.mail.Store store = session.getStore("imaps"); 
    store.connect("imap.gmail.com", "<username>@gmail.com", "<password>"); 
    javax.mail.Folder[] folders = store.getDefaultFolder().list("*"); 
    for (javax.mail.Folder folder : folders) { 
     if ((folder.getType() & javax.mail.Folder.HOLDS_MESSAGES) != 0) { 
      System.out.println(folder.getFullName() + ": " + folder.getMessageCount()); 
     } 
    } 
} catch (MessagingException e) { 
    e.printStackTrace(); 
} 
7

您可以訪問其他文件夾一樣

store.getFolder("[Gmail]/Sent Mail"); 
store.getFolder("[Gmail]/Drafts"); 

這等

相關問題