【问题标题】:How to get messages from subfolders using JavaMail?如何使用 JavaMail 从子文件夹中获取消息?
【发布时间】:2019-07-02 11:28:36
【问题描述】:

我正在使用 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)

【问题讨论】:

    标签: java outlook jakarta-mail


    【解决方案1】:

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

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

    【讨论】:

    • 转义反斜杠也无济于事。还是一样的例外。
    • 收件箱下。
    • 尝试使用正斜杠'Inbox/subFolder'
    • IMAPFolder API 文档说文件夹上有方法 'getFolder()'。
      获得收件箱文件夹后,在传递子文件夹名称的文件夹上调用 getFolder()。这是参考javaee.github.io/javamail/docs/api/com/sun/mail/imap/…
    • 非常感谢您的提示。非常不直观,至少对我而言,但我可以使用它:Folder subFolder = store.getFolder("Inbox").getFolder("subFolder"); 请相应地编辑您的答案,以便我接受。谢谢。
    【解决方案2】:

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

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

    最常见的分隔符是“.”和 ”/”。我猜那个“/”在你的情况下是正确的选择。 store.getFolder() 可以访问嵌套的子文件夹:

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

    【讨论】:

      猜你喜欢
      • 2020-08-26
      • 2015-10-21
      • 1970-01-01
      • 1970-01-01
      • 2015-03-25
      • 2012-02-04
      • 1970-01-01
      • 1970-01-01
      • 2012-04-28
      相关资源
      最近更新 更多