【问题标题】:IMAP BEFORE search result is always empty with Office 365Office 365 的 IMAP BEFORE 搜索结果始终为空
【发布时间】:2022-01-23 13:19:07
【问题描述】:

我使用此代码以编程方式搜索 Outlook 365 收件箱:

Session session = Session.getDefaultInstance(new Properties());
Store store = session.getStore("imaps");
store.connect("outlook.office365.com", 993, EMAIL, PASSWORD);
Folder emailFolder = store.getFolder("INBOX");
emailFolder.open(Folder.READ_WRITE);
Message[] messages = emailFolder.search(new ReceivedDateTerm(LT,
        Date.from(Instant.now().minus(14, DAYS))));

因此执行 IMAP BEFORE search,例如SEARCH BEFORE 16-Oct-2021 ALL 但返回的messages 数组始终为空,尽管有数千封超过 14 天的邮件。如果使用非常短的间隔,则结果为非空。

Office 365 提供以下功能

CAPABILITY IMAP4 IMAP4rev1 AUTH=PLAIN AUTH=XOAUTH2 SASL-IR UIDPLUS MOVE ID UNSELECT CLIENTACCESSRULES CLIENTNETWORKPRESENCELOCATION BACKENDAUTHENTICATE CHILDREN IDLE NAMESPACE LITERAL+

是否有任何解决方案和/或解决方法来执行服务器端搜索,例如“早于”和“早于”等日期。使用可靠的 IMAP 和 Office 365?

【问题讨论】:

  • 愚蠢的问题,但你确定邮件没有被归档到另一个文件夹吗?除了“ALL”是多余的之外,搜索看起来还不错。
  • 在我的情况下 emailFolder.getMessages() 返回 49000 多条消息,其中大多数超过 14 天。我认为它类似于stackoverflow.com/q/36697702,我询问社区其他人如何通过 IMAP 和搜索使用 Office 365。

标签: java office365 jakarta-mail imap


【解决方案1】:

在与 Microsoft Office 365 支持进行较长时间的通信后,此错误终于由 Exchange 服务器团队修复,并于欧洲中部时间 2022 年 1 月 21 日晚上推出。
现在 IMAP SEARCH BEFORE 命令按预期工作。

此外,我们发现 SENTBEFORESENTSINCE 得到了适当的支持,即使对于数千封邮件也能快速返回结果,而其他 IMAP 电子邮件提供商需要几分钟才能获得结果和类似数量的邮件。它们由SentDateTerm 客户端中的SentDateTerm 支持。

虽然BEFOREONSINCE 指的是未指定的内部 日期,但请使用邮件的实际Date: header SENTBEFORESENTONSENTSINCE

【讨论】:

    猜你喜欢
    • 2018-08-30
    • 2019-07-29
    • 2019-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-16
    • 1970-01-01
    相关资源
    最近更新 更多