我正在构建一个需要访问邮件特定文件夹的工具(例如,“[Gmail]/垃圾箱”,“[Gmail]/已发送”)。似乎名称是相对于用户本地化设置进行本地化的,因此,例如,[[Gmail]/Trash]对于西类牙用户显示为“[Gmail]/Papelera”。
我阅读了有关XLIST命令的信息,但现在不赞成使用IMAP LIST扩展(https://developers.google.com/gmail/imap_extensions#special-use_extension_of_the_list_command)。
我尝试通过javax.mail.Folder.list(“\Trash”)的方式进行此操作,但未返回任何内容。
如何在JAVA中使用IMAP列表扩展?
PS:使用多个电子邮件提供商,而不仅仅是Gmail。
最佳答案
作为Bill Shannon said,您可以使用Gmail属性来获取special folders,例如Trash。但这仅适用于Gmail。
javax.mail.Folder[] folders = store.getDefaultFolder().list("*");
如果打印此文件,则按照Gmail的内容应如下所示
a004 LIST "" "*"
* LIST (\HasNoChildren) "/" "INBOX"
* LIST (\Noselect \HasChildren) "/" "[Gmail]"
* LIST (\HasNoChildren \All) "/" "[Gmail]/All Mail"
* LIST (\HasNoChildren \Drafts) "/" "[Gmail]/Drafts"
* LIST (\HasNoChildren \Important) "/" "[Gmail]/Important"
* LIST (\HasNoChildren \Sent) "/" "[Gmail]/Sent Mail"
* LIST (\HasNoChildren \Junk) "/" "[Gmail]/Spam"
* LIST (\HasNoChildren \Flagged) "/" "[Gmail]/Starred"
* LIST (\HasNoChildren \Trash) "/" "[Gmail]/Trash"
a004 OK Success
一旦有了文件夹,就可以迭代所需的属性。
对于
[Gmail]/All Mail
,mailFolder = "\\All"
。同样对于[Gmail]/Trash
,它将是mailFolder = "\\Trash"
private static IMAPFolder getLocalisedFolder(IMAPStore store, String mailFolder) throws MessagingException {
Folder[] folders = store.getDefaultFolder().list("*");
for (Folder folder : folders) {
IMAPFolder imapFolder = (IMAPFolder) folder;
for (String attribute : imapFolder.getAttributes()) {
if (mailFolder.equals(attribute)) {
return imapFolder;
}
}
}
return null;
}
关于java - IMAP列表扩展JAVA,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21427859/