实时收听传入的电子邮件
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 中所定义。
因为你想异步获取电子邮件,你应该使用下面的库
我在我的代码中使用了 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/
大多数 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 中所定义。
因为你想异步获取电子邮件,你应该使用下面的库
我在我的代码中使用了 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/