我正在使用 JavaMail API 连接到我的个人帐户。我在我创建的 Gmail 帐户中有文件夹(标签)列表 + 默认文件夹,如收件箱、草稿等。如何列出所有可用文件夹(默认文件夹和用户创建的文件夹)?
我可以使用此 API 访问特定文件夹: Folder inbox = store.getFolder("Inbox");
。是否有任何其他 API 可以获取邮件帐户中可用的文件夹列表?
原文由 Jagadesh 发布,翻译遵循 CC BY-SA 4.0 许可协议
我正在使用 JavaMail API 连接到我的个人帐户。我在我创建的 Gmail 帐户中有文件夹(标签)列表 + 默认文件夹,如收件箱、草稿等。如何列出所有可用文件夹(默认文件夹和用户创建的文件夹)?
我可以使用此 API 访问特定文件夹: Folder inbox = store.getFolder("Inbox");
。是否有任何其他 API 可以获取邮件帐户中可用的文件夹列表?
原文由 Jagadesh 发布,翻译遵循 CC BY-SA 4.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 许可协议
8 回答6.4k 阅读
1 回答4.2k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
2 回答3.2k 阅读
2 回答3.9k 阅读
3 回答1.7k 阅读✓ 已解决
1 回答2k 阅读✓ 已解决
这是有效的代码。这将为您提供所有标签的句柄。要深入了解
folder
,您可以执行folder.list()
或者您可以使用store.getDefaultFolder().list("*")
来检索答案文件夹中的所有其他子文件夹和建议。输出:
旧答案
请注意这是不正确的, 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