如何使用JavaMail获取邮件帐户中的可用文件夹列表

时间:2011-01-25 07:08:33

标签: java gmail imap javamail

我正在使用JavaMail API连接到我的个人帐户。我在我创建的Gmail帐户中有文件夹(标签)列表+收件箱,草稿等默认文件夹。如何列出所有可用文件夹(默认和用户创建的文件夹)?

我可以使用此API访问特定文件夹:Folder inbox = store.getFolder("Inbox");。是否有其他API可以获取邮件帐户中可用的文件夹列表?

5 个答案:

答案 0 :(得分:61)

谢尔盖很接近,但默认情况下,JavaMail的list()执行LIST "" %,它只提供顶级文件夹。 GMail将其系统文件夹(所有邮件,草稿,已发邮件,垃圾邮件,已加星标和已删除邮件)放在不可选择的文件夹[Gmail]下,因此您确实需要执行LIST "" *。否则,您只需返回INBOX[Gmail]和您的标签。

下面是一些连接到GMail的示例代码,获取文件夹列表,并打印出每个非\NoSelect文件夹的名称和消息计数(即不仅仅是层次结构占位符的文件夹,如{{ 1}}):

[Gmail]

答案 1 :(得分:34)

这是有效的代码。这将使您处理所有标签。要更深入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", "YOURMAILID@gmail.com", "UR_P@ZZWRD");
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

{{3}}

答案 2 :(得分:7)

您可以访问此类其他文件夹

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

答案 3 :(得分:0)

store.getDefaultFolder().list()怎么样?不过只是一个猜测。

答案 4 :(得分:0)

您可以尝试以下方法:

Folder[] folderList = store.getDefaultFolder().list("*");