如何使用 Python imaplib 为 IMAP (Gmail) 启用推送通知?

Posted

技术标签:

【中文标题】如何使用 Python imaplib 为 IMAP (Gmail) 启用推送通知?【英文标题】:How do I enable push-notification for IMAP (Gmail) using Python imaplib? 【发布时间】:2010-09-30 02:06:56 【问题描述】:

有没有一种方法可以使用 imaplib 监控 gmail 帐户,而无需在每次我想查看是否有新邮件时轮询 gmail。或者换句话说,我只想通知脚本有新消息,这样我就可以立即处理它,而不是轮询之间的任何延迟时间。

我看到 IMAP 协议通过 IDLE 命令支持这一点,但我在 imaplib 文档中看不到任何与它相关的文档,所以任何关于这方面的帮助都会很棒!

【问题讨论】:

【参考方案1】:

imaplib 中没有任何东西可以做到这一点,AFAIK(免责声明:我对 Python 知之甚少),但是,似乎有人已经为 Python 实现了一个 IDLE 扩展,它具有与 imaplib 相同的接口(你可以显然,在不更改现有代码的情况下换出):

https://github.com/imaplib2/imaplib2

【讨论】:

+1 - 我最近在使用 imaplib,发现你描述的事情的状态。 提供的链接不再存在。该软件包可以在sourceforge 上找到【参考方案2】:

查看ProcImap。它是在 libimap 和 libimap2 之上的一个更抽象的框架,为处理 IMAP 服务提供了一个很好的解决方案。看起来就像你正在寻找的东西,对我来说也是如此。我对你有同样的问题,刚刚找到了 ProcImap。我自己试试吧。

【讨论】:

哇。这正是我正在寻找编写客户端过滤器的内容。 @evo 这对你有用吗?我还希望获得有关新消息的推送通知,而不是轮询。你用了 ProcImap 中的什么函数? @Alexis 我猜ImapServer.idle【参考方案3】:

此链接显示了使用 IMAP IDLE 的示例:http://blog.timstoop.nl/2009/03/11/python-imap-idle-with-imaplib2/

它使用与 casperOne 的答案 (imaplib2) 中链接的相同库。

【讨论】:

现在在blog.timstoop.nl/posts/2009/03/11/…【参考方案4】:

bugs.python.org 提出了简单的patch 以同步方式实现 [RFC 2177 IMAP IDLE] 3 命令(要等待超过 1 个 IMAP 服务器,您必须使用线程或其他并行执行方式) .它使用 stdlib select 等待套接字,包括超时。此补丁将eventually 添加到标准库but tests have to be written first。 IDLE 命令是你 need 用于 gmail IMAP 推送通知的命令。 希望,这会有所帮助:)

【讨论】:

遗憾的是,补丁仍然不是标准库的一部分。可以使用托管在 sourceforge 上的 imaplib2 或托管在 github 上的 imapclient

以上是关于如何使用 Python imaplib 为 IMAP (Gmail) 启用推送通知?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Python中执行IMAP搜索(使用Gmail和imaplib)?

如何在 python 中使用 imaplib 获取电子邮件正文?

如何使用 imaplib 创建电子邮件并将其发送到特定邮箱

imaplib/gmail 如何在不标记为已读的情况下下载完整消息(所有部分)[重复]

Python imaplib 选择文件夹

python和imaplib:如何在给定电子邮件ID的情况下下载附件文件