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

27
有没有一种方法可以使用imaplib监视gmail帐户而无需每次想查看是否有新邮件时轮询gmail。换句话说,我只希望脚本在收到新邮件时得到通知,以便我可以立即处理它,而不是在轮询之间出现任何延迟。
我看到IMAP协议支持使用IDLE命令实现此目的,但在imaplib文档中没有找到任何有关它的文档,因此对此的任何帮助都将非常棒!
4个回答

16

据我所知,在imaplib中没有这样的功能(免责声明:我对Python了解甚少),不过似乎有人为Python实现了一个IDLE扩展,它具有与imaplib相同的接口(您可以毫无改动地替换它,而不会影响现有的代码):

https://github.com/imaplib2/imaplib2


1
+1 - 我最近正在使用imaplib,并发现了你所描述的情况。 - cdleary
提供的链接不存在了。该软件包可以在sourceforge上找到。 - handras
https://github.com/jazzband/imaplib2 - Ankit Balyan

6

看看ProcImap。它是建立在libimap和libimap2之上的更抽象的框架,提供了一个处理IMAP服务的好方法。看起来正是你们想要的东西,对我来说也是一样。我有和你们一样的问题,刚刚发现了ProcImap。打算自己试试。


哇,这正是我寻找的,用于编写客户端过滤器。 - vy32
@evo,这个对你有用吗?我也想获得有关新消息的推送通知,而不是轮询。你在ProcImap中使用了哪个函数? - Alexis
@Alexis 我猜测 ImapServer.idle - Tobias Kienzler

3

2
现在它位于https://blog.timstoop.nl/posts/2009/03/11/python-imap-idle-with-imaplib2.html。 - Will White

2

提出了一个简单的补丁,在bugs.python.org上实现[RFC 2177 IMAP IDLE]3命令以同步方式(要等待超过1个IMAP服务器,您必须使用线程或其他并行执行手段)。它使用stdlib select来等待包括超时在内的套接字。这个补丁将最终被添加到stdlib中,但首先必须编写测试IDLE命令是您需要用于gmail IMAP推送通知的命令。 希望这会有所帮助:)


遗憾的是,该补丁仍未成为stdlib的一部分。可以使用托管在sourceforge上的imaplib2或托管在github上的imapclient。 - handras

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接