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

Jag*_*esh 39 java gmail imap jakarta-mail

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

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

dka*_*arp 62

谢尔盖很接近,但默认情况下,JavaMail会list()执行a LIST "" %,它只为您提供顶级文件夹.GMail将其系统文件夹(所有邮件,草稿,已发邮件,垃圾邮件,已加星标和已删除邮件)放在不可选择的文件夹下[Gmail],因此您确实需要执行此操作LIST "" *.否则,你刚刚回来INBOX,[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();
}
Run Code Online (Sandbox Code Playgroud)


Nis*_*ant 37

这是有效的代码.这将使您处理所有标签.要深入了解a 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());
Run Code Online (Sandbox Code Playgroud)

输出:

>> INBOX
>>个人
>>收据
>>旅游
>>工作
>> [Gmail]


老答复

请注意,这是不正确的,它是在正确地指出这个答案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

  • 您包含的代码不会提供您列出的输出.你需要在`list()`中使用明确的`"*"`,否则它只返回`INBOX`和不可选择的`[Gmail]`. (2认同)

小智 8

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

store.getFolder("[Gmail]/Sent Mail");
store.getFolder("[Gmail]/Drafts");
Run Code Online (Sandbox Code Playgroud)

等等