如何使用 JavaMail 从子文件夹中获取邮件?

How to get messages from subfolders using JavaMail?

我正在使用 JavaMail API 连接到 outlook 并阅读邮件。我的 outlook 帐户中的收件箱下有子文件夹列表。我可以使用以下方法从收件箱中获取所有消息:

Store store = session.getStore("imaps");
store.connect("outlook.office365.com", 993, MY_MAIL, MY_PASS);
Folder inbox = store.getFolder("Inbox");

但是我无法从子文件夹中读取邮件。要从名为 'subFolder' 的子文件夹中读取消息,我已尝试:

Folder subFolder = store.getFolder("subFolder");
Folder subFolder = store.getFolder("Inbox\subFolder");
Folder subFolder = store.getFolder("Inbox.subFolder");

我收到 FolderNotFoundException

javax.mail.FolderNotFoundException: Inbox.subFolder not found
    at com.sun.mail.imap.IMAPFolder.checkExists(IMAPFolder.java:452)
    at com.sun.mail.imap.IMAPFolder.open(IMAPFolder.java:1040)
    at com.sun.mail.imap.IMAPFolder.open(IMAPFolder.java:973)

IMAPFolder API 文档说文件夹上有一个方法 getFolder()。获得收件箱文件夹后,对该文件夹调用 getFolder() 并传递子文件夹名称。

这里是参考https://eclipse-ee4j.github.io/javamail/docs/api/com/sun/mail/imap/IMAPFolder.html

您可能使用了错误的 IMAP 文件夹分隔符。 IMAP文件夹分隔符不规范,可以这样确定:

char separator = store.getDefaultFolder().getSeparator();

最常用的分隔符是“.”。和 ”/”。我想“/”是您的正确选择。 store.getFolder() 能够访问嵌套的子文件夹:

// assuming that "/" is the right separator
Folder folder = store.getFolder("inbox/subfolder");