ライブラリ IMAPClient (Python) で電子メールを同期するために、outlook.office365.com に接続します。IDLEメカニズムにより、サーバーで変更を受信します。たとえば、INBOXフォルダーの新しいメールです。その後、UID {last_synced_uid}:* のメールを取得します。これにより、最後の同期後にすべてのメールが取得されます (UID は常にインクリメントされます)。
このフローは機能しますが、IMAP サーバー (outlook.office365.com) が新しいメールを返さないことがありますが、既に同期されています。完全な同期を実行すると、うまくいく場合もありますが、常にうまくいくとは限りません。つまり、日付を指定してメールを検索し、UID でフェッチするということです。
この状況では、メールを手動で INBOX から他のフォルダーに移動し、再び INBOX に移動すると、これは常に機能します。その後、スクリプトは INBOX で新しいメールを検出し、UID {last_synced_uid} でフェッチします:*
Office365 で UID によるフェッチに問題が発生する場合があるようです。Thunderbird などの他のメール クライアントでも同じメールが表示されるため、回避策があるか、IMAPClient/imaplib のバグである可能性があります。
last_synced_uid が 1619 である監視フォルダーのログの下に:
- IDLE RESPONSE: [(10, b'RECENT'), (618, b'EXISTS')]
- FETCH UID の開始 1620:*
- FETCH は、UID 1619、SEQ 617 のメールを返します
- last_synced_uid 1619 は変更されていません