Office365 IMAP 有时无法获取新电子邮件

问题描述

我连接到 Outlook.office365.com 以通过库 IMAPClient (Python) 同步电子邮件。通过空闲机制,我收到服务器上的更改,例如文件夹收件箱中的新电子邮件。之后,我使用 UID {last_synced_uid}:* 获取邮件 - 这应该给我上次同步后的所有邮件(UID 总是递增)。

此流程有效,但有时 IMAP 服务器 (outlook.office365.com) 不返回新邮件但已同步。运行完全同步有时有效,但并非总是如此 - 我的意思是在日期之后搜索邮件并通过 UID 获取

在这种情况下,我手动将邮件从收件箱移动到其他文件夹,然后再次移动到收件箱,这总是有效 - 之后我的脚本在收件箱中检测到新邮件并使用 UID {last_synced_uid} 获取:*

看起来 Office365 有时在通过 UID 获取时会出现问题。 相同的邮件在其他邮件客户端(如 Thunderbird)中可见,因此可能有一些解决方法,或者是 IMAPClient/imaplib 中的错误

以下用于监控文件夹的日志,其中 last_synced_uid 为 1619:

  • 空闲响应:[(10,b'RECENT'),(618,b'EXISTS')]
  • 启动 FETCH UID 1620:*
  • FETCH 返回带有 UID 1619、SEQ 617 的邮件
  • last_synced_uid 1619 未更改

解决方法

我将回答我自己的问题 - 在 IMAP 连接上多次选择同一个文件夹可能会产生此问题。