我正在尝试获取Gmail中的SENT文件夹。但这取决于语言。例如,如果我用英语我的树列表如下:
[Gmail]/All Mail
[Gmail]/Bin
[Gmail]/Drafts
....
但如果我使用其他语言,所有文件夹都将被翻译成这种语言。我试图为文件夹创建索引,但没有成功,因为所有文件夹都将按照字母表排序。我不能这样硬编码:getFolder("[Gmail]/Sent Mail")
,用其他语言"发送的邮件将被翻译。我有个问题。我可以得到文件夹的所有名称,但如何识别"发送邮件"文件夹的位置,以获得所有邮件的发送。
Gmail文件夹有属性,您可以依靠它们来获得您想要的文件夹(如果是标准文件夹的话)。
所以,如果你做
store.getDefaultFolder().list("*");
你会得到所有的文件夹,而不仅仅是第一层。服务器的响应应该是这样的:
A3 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"
* LIST (HasNoChildren) "/" "[Gmail]Trash"
一旦你得到了文件夹的列表,你就可以迭代它们来寻找你想要的属性。因此,如果你正在寻找发送的文件夹,你可以这样做:
public Folder getSentFolder(Folder[] folders) throws MessagingException {
for (Folder folder : folders) {
IMAPFolder imapFolder = (IMAPFolder) folder;
for(String attribute : imapFolder.getAttributes()) {
if ("\Sent".equals(attribute)) {
return folder;
}
}
}
return null;
}
然后您有一个与语言无关的文件夹选择器。
注意这是因为它是Gmail。其他电子邮件服务器可能没有属性