2

我正在尝试在 Gmail 中获取 SENT 文件夹。但这取决于语言。例如,如果我使用英语我的树列表如下:

[Gmail]/All Mail
[Gmail]/Bin
[Gmail]/Drafts
....

但是如果我使用其他语言,所有文件夹都会被翻译成这种语言。我尝试为文件夹创建索引,但没有成功,因为所有文件夹都将按照字母表排序。我不能像这样硬编码:getFolder("[Gmail]/Sent Mail"),用其他语言“已发送邮件将被翻译。我有一个问题。我可以获得文件夹的所有名称,但如何识别“已发送邮件”文件夹的位置以获取所有邮件已发送。

4

1 回答 1

8

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。其他电子邮件服务器可能没有这些属性

于 2013-09-24T20:25:56.177 回答