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

4

我正在使用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)
2个回答

3

它在收件箱下面。 - Trillian
1
请尝试使用斜杠“Inbox/subFolder”。 - Hari Prasad
IMAPFolder API文档中提到Folder类有一个名为'getFolder()'的方法。<br> 获取收件箱文件夹后,调用该文件夹上的getFolder()方法并传递子文件夹名称。这是参考链接 https://javaee.github.io/javamail/docs/api/com/sun/mail/imap/IMAPFolder.html - Hari Prasad
非常感谢您的提示。对我来说很不直观,但是我通过以下代码使其工作:Folder subFolder = store.getFolder("Inbox").getFolder("subFolder"); 请相应地编辑您的答案,以便我可以接受它。谢谢。 - Trillian
store.getFolder("Inbox/subFolder") 也应该可以工作。 - Bill Shannon
显示剩余6条评论

1
您可能使用了错误的IMAP文件夹分隔符。IMAP文件夹分隔符并没有标准化,可以通过以下方式确定:
char separator = store.getDefaultFolder().getSeparator();

最常见的分隔符是"."和"/"。我猜在你的情况下"/"是正确的选择。store.getFolder()可以访问嵌套的子文件夹:
// assuming that "/" is the right separator
Folder folder = store.getFolder("inbox/subfolder"); 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接