如何使用JavaMail从子文件夹获取消息?

时间:2019-02-08 08:47:48

标签: java outlook javamail

我正在使用JavaMail API连接到Outlook和阅读消息。我的Outlook帐户在INBOX下有子文件夹列表。我可以使用

从收件箱中获取所有邮件
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)

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

您可能使用了错误的 IMAP 文件夹分隔符。 IMAP 文件夹分隔符没有标准化,可以这样确定:

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

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

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