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

新手上路,请多包涵

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

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

原文由 Jagadesh 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 813
2 个回答

这是有效的代码。这将为您提供所有标签的句柄。要深入了解 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());

输出:

> 收件箱

> 个人

> 收据

> 旅游

> 工作

> [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

原文由 Nishant 发布,翻译遵循 CC BY-SA 3.0 许可协议

Sergey 很接近,但默认情况下 JavaMail 的 list() 执行 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();
}

原文由 dkarp 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题