我正在构建一个需要访问邮件特定文件夹的工具(例如,“[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 MailmailFolder = "\\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/

10-16 16:43