jakarta-mail - 我正在使用javamail IMAP,但我不知道如何获取已发送邮件或除收件箱以外的其他文件夹

标签 jakarta-mail gmail-imap

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

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

但是,如果我使用其他语言,则“所有”文件夹将被翻译成该语言。
我尝试为文件夹创建索引,但未成功,因为所有文件夹将按照字母排序。
我不能这样硬编码:getFolder("[Gmail]/Sent Mail"),用其他语言“已发送的邮件将被翻译。
我有个问题。我可以获取文件夹的所有名称,但如何识别“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。其他电子邮件服务器可能没有属性

关于jakarta-mail - 我正在使用javamail IMAP,但我不知道如何获取已发送邮件或除收件箱以外的其他文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18414988/

相关文章:

java - 如何使用java-Google Docs Api将文件上传到Google Drive?

Java邮件API : Callbacks

java - 已在 tomcat 中部署 2 个应用程序时出现邮件问题

php - 使用 OAuth 2.0 和服务帐户的 Gmail IMAP 失败,状态为 400

c# - 从 C# 读取 gmail

python - 为什么我不能使用此脚本向多个收件人发送电子邮件?

即使包位于 CLASSPATH 中,javax.mail.MimeMessage 也不可用

java - 为带有附件的电子邮件设置多部分

api - 使用带有OAuth的Gmail API阅读所有邮件

Python imaplib 下载 Gmail Text 而不下载完整附件