实时收听传入的电子邮件

Listen for incoming emails in real time

大多数 IMAP 电子邮件客户端都可以实时自动接收电子邮件,无需按固定时间间隔刷新。这是因为电子邮件客户端保持与服务器的连接打开,如果没有任何电子邮件数据交换以保持连接有效,电子邮件客户端将以固定间隔发送一个 NOOP 数据包(就像其他TCP 协议有自己的保活数据包)。在 Thunderbird 中,此行为可以通过 'Allow immediate server notifications when new messages arrive' 选项控制。

我正在编写一个 Python 程序,需要在收到电子邮件时立即知道。接收电子邮件的标准程序是(连接和登录后)select('inbox')search(None, 'ALL') (或某些特定的搜索词),以及 fetch()。我不知道如何实时收听新电子邮件。我读过的每个指南都建议 运行 循环中的 search()fetch() 函数。我在给自己发送电子邮件时尝试了 运行 read() 函数,但我从未见过 read() 输出任何数据。也许服务器需要知道将电子邮件推送到客户端?我无法证实或反驳这个理论。

如何使用 imaplib 或类似的 Python 库立即接收新电子邮件?

虽然我在最初发布此问题时并不知道,但我一直在寻找一种实现 IMAP IDLE 命令的解决方案,如 RFC2177 中所定义。

因为你想异步获取电子邮件,你应该使用下面的库

https://github.com/bamthomas/aioimaplib

我在我的代码中使用了 aioimaplib,但是 imaplib2 also supposedly supports IDLE; see: https://web.archive.org/web/20090814230913/http://blog.hokkertjes.nl/2009/03/11/python-imap-idle-with-imaplib2/