【发布时间】:2019-11-23 16:02:46
【问题描述】:
大多数 IMAP 电子邮件客户端都能够实时自动接收电子邮件,无需定期刷新。这是因为电子邮件客户端保持与服务器的连接打开,并且如果没有任何电子邮件数据交换以保持连接处于活动状态,电子邮件客户端将在固定的时间间隔发送一个NOOP 数据包(就像其他 TCP 协议一样有自己的保活数据包)。在 Thunderbird 中,此行为可以通过“新消息到达时允许即时服务器通知”选项来控制。
我正在编写一个 Python 程序,它需要在收到电子邮件时立即知道。接收电子邮件的标准程序是(连接和登录后)select('inbox')、search(None, 'ALL')(或某些特定搜索词)和@ 987654326@。我无法弄清楚如何实时收听新电子邮件。我读过的每个指南都建议在循环中运行 search() 和 fetch() 函数。我尝试在给自己发送电子邮件时运行read() 函数,但我从未见过read() 输出任何数据。也许服务器需要知道将电子邮件推送到客户端?我无法证实或反驳这个理论。
如何使用 imaplib 或类似的 Python 库立即接收新电子邮件?
虽然我在最初发布此问题时并不知道,但我正在寻找一种实现 IMAP IDLE 命令的解决方案,如RFC2177 中所定义。
【问题讨论】:
-
查看函数
recent()。记录为“提示服务器进行更新。如果没有新消息,则返回的数据为 None,否则为 RECENT 响应的值。” -
@TarunLalwani aioimaplib 完美运行。非常感谢!