How to get the list of available folders in a mail account using JavaMail

匿名 (未验证) 提交于 2019-12-03 01:27:01

问题:

I am using JavaMail API to connect to my personal account. I have list of folders (labels) in my Gmail account which I created + the default folders like Inbox, Drafts etc. How can I list all the available folders (the default and the user created)?

I can access the particular folder using this API: Folder inbox = store.getFolder("Inbox");. Is there any other API to get the list of folders available in a mail account?

回答1:

Here is the code that works. This will give you handle to all the Labels. To go deeper in a folder, you may perform folder.list() or you can use store.getDefaultFolder().list("*") to retrieve all the folders and sub-folders as suggested in the other answer.

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", "YOURMAILID@gmail.com", "UR_P@ZZWRD"); System.out.println(store);  Folder[] f = store.getDefaultFolder().list(); for(Folder fd:f)     System.out.println(">> "+fd.getName()); 

Output:

>> INBOX
>> Personal
>> Receipts
>> Travel
>> Work
>> [Gmail]


OLD ANSWER

Please note this is not correct, it's rightly pointed in this answer by dkarp

These should do:

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



回答2:

Sergey is close, but by default JavaMail's list() does a LIST "" %, which gives you only top-level folders. GMail puts its system folders (All Mail, Drafts, Sent Mail, Spam, Starred, and Trash) under the non-selectable folder [Gmail], so you really need to do a LIST "" * instead. Otherwise, you'll just get back INBOX, [Gmail], and your labels.

Here's some sample code that connects to GMail, fetches the folder list, and prints out the name and message count for each non-\NoSelect folder (i.e. the ones that aren't just hierarchy placeholders, like [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", "@gmail.com", "");     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(); } 


回答3:

You can access other folders like this

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

etc.



回答4:

How about store.getDefaultFolder().list()? Just a guess, though.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!