我正在使用JavaMail API连接到我的个人账号。 我在我的Gmail账户中创建了一些文件夹(标签)列表,以及像收件箱、草稿等默认文件夹。如何列出所有可用的文件夹(包括默认和用户创建的)?
我可以使用这个API访问特定的文件夹:Folder inbox = store.getFolder("Inbox");
。 是否有其他API可以获取邮件账户中所有可用文件夹列表?
我正在使用JavaMail API连接到我的个人账号。 我在我的Gmail账户中创建了一些文件夹(标签)列表,以及像收件箱、草稿等默认文件夹。如何列出所有可用的文件夹(包括默认和用户创建的)?
我可以使用这个API访问特定的文件夹:Folder inbox = store.getFolder("Inbox");
。 是否有其他API可以获取邮件账户中所有可用文件夹列表?
Sergey在接近正确,但默认情况下JavaMail的list()
方法执行的是LIST "" %
操作,只显示最高级别的文件夹。Gmail将其系统文件夹(All Mail、Drafts、Sent Mail、Spam、Starred和Trash)放置在不可选择的文件夹[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();
}
以下是可用的代码。这将为您提供所有标签的句柄。要更深入地进入文件夹
,您可以执行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]
旧回答
这些应该可以做到:
http://java.sun.com/products/javamail/javadocs/javax/mail/Store.html#getSharedNamespaces%28%29
Folder[] folders= store.getSharedNamespaces();
,长度总是为零。 - Jagadeshlist()
中加上明确的 "*"
,否则它只会返回INBOX
和不可选择的[Gmail]
。 - dkarp- Nishant收件箱 个人 收据 旅行 工作 [Gmail]。然而,如果使用“*”,我会看到所有标签+草稿、已发送、所有邮件等。
store.getFolder("[Gmail]/Sent Mail");
store.getFolder("[Gmail]/Drafts");
etc.
store.getDefaultFolder().list() 怎么样?虽然只是猜测。
Folder[] folderList = store.getDefaultFolder().list("*");