大多数IMAP电子邮件客户端都具有实时自动接收电子邮件的功能,而无需按固定间隔刷新。这是因为电子邮件客户端使与服务器的连接保持打开状态,并且如果没有交换任何电子邮件数据来保持连接有效,则电子邮件客户端将以固定间隔发送NOOP
数据包(就像其他TCP协议有其自己的keepalive数据包)。在Thunderbird中,此行为可以通过“在收到新邮件时允许即时服务器通知”选项来控制。
我正在编写一个基于imaplib的Python程序,该程序需要立即知道何时收到电子邮件。接收电子邮件的标准过程是(在连接和登录后)select('inbox')
,search(None, 'ALL')
(或某些)特定搜索字词)和fetch()
。我不知道如何实时收听新电子邮件。我读过的每本指南都建议循环运行search()
和fetch()
函数。我尝试在向自己发送电子邮件时运行read()
函数,但是从未见过read()
输出任何数据。也许服务器需要知道将电子邮件推送到客户端?我无法证实或反驳这一理论。
如何通过imaplib立即接收新电子邮件?
答案 0 :(得分:0)
由于要异步获取电子邮件,因此应使用以下库
答案 1 :(得分:0)
我在代码中使用了aioimaplib,但据推测imaplib2还支持IDLE;参见:https://web.archive.org/web/20090814230913/http://blog.hokkertjes.nl/2009/03/11/python-imap-idle-with-imaplib2/