【问题标题】:Listen for incoming emails in real time实时收听收到的电子邮件
【发布时间】: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 完美运行。非常感谢!

标签: python imaplib


【解决方案1】:

由于您想异步获取电子邮件,您应该使用以下库

https://github.com/bamthomas/aioimaplib

【讨论】:

    【解决方案2】:

    我在我的代码中使用了 aioimaplib,但 imaplib2 据说也支持 IDLE;见:https://web.archive.org/web/20090814230913/http://blog.hokkertjes.nl/2009/03/11/python-imap-idle-with-imaplib2/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-23
      • 2018-06-01
      • 1970-01-01
      • 2021-11-03
      相关资源
      最近更新 更多