我正在使用JavaMail API連接到我的個人帳戶。我有我創建的Gmail帳戶中的文件夾(標籤)列表+收件箱,草稿等默認文件夾。如何列出所有可用文件夾(默認和用戶創建的)?如何使用JavaMail獲取郵件帳戶中可用文件夾的列表
我可以使用此API訪問特定文件夾:Folder inbox = store.getFolder("Inbox");
。是否有任何其他API可以獲取郵件帳戶中可用的文件夾列表?
我正在使用JavaMail API連接到我的個人帳戶。我有我創建的Gmail帳戶中的文件夾(標籤)列表+收件箱,草稿等默認文件夾。如何列出所有可用文件夾(默認和用戶創建的)?如何使用JavaMail獲取郵件帳戶中可用文件夾的列表
我可以使用此API訪問特定文件夾:Folder inbox = store.getFolder("Inbox");
。是否有任何其他API可以獲取郵件帳戶中可用的文件夾列表?
下面是可用的代碼。這會讓你處理所有的標籤。要深入到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
`Folder [] folders = store.getPersonalNamespaces();`當我試過這段代碼的時候folders.length始終是1.但是我的gmail帳戶裏有8個文件夾.. 同樣如果我用`Folder [] folders = store.getSharedNamespaces();`長度始終爲零。 – Jagadesh 2011-01-25 07:19:50
這個答案根本不對。此代碼使JavaMail發佈[NAMESPACE命令](http://tools.ietf.org/html/rfc2342#section-5),該命令幫助發現已認證用戶的文件夾,其他用戶的文件夾的前綴,和共享文件夾。但它當然不會做文件夾列表。 – dkarp 2011-01-26 05:52:58
您包含的代碼不會提供您列出的輸出。你需要在`list()`中顯式的`「*」`,否則它只會返回`INBOX`和不可選的`[Gmail]`。 – dkarp 2011-01-26 14:01:20
如何store.getDefaultFolder().list()
?只是猜測,但。
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();
}
您可以訪問其他文件夾一樣
store.getFolder("[Gmail]/Sent Mail");
store.getFolder("[Gmail]/Drafts");
這等
爲什麼你接受一個答案,但沒有給你你想要的結果? – dkarp 2011-01-26 05:51:30