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

2022-08-31 23:49:17

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

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


答案 1

Sergey很接近,但默认情况下JavaMail做了一个,它只给你顶级文件夹。GMail将其系统文件夹(所有邮件,草稿,已发送邮件,垃圾邮件,已加星标和废纸篓)放在不可选择的文件夹下,因此您确实需要做一个。否则,您只需取回 、 和标签。list()LIST "" %[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();
}

答案 2

下面是有效的代码。这将为您提供所有标签的处理。要更深入地了解 ,您可以执行 或 使用 检索所有文件夹和子文件夹,如其他答案中所示。folderfolder.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());

输出:

>>>>旅行

>>工作

>>的个人>>收据>>收件箱
[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


推荐