【发布时间】:2015-03-27 06:21:49
【问题描述】:
我正在编写一个 python 脚本,它会定期检查与某个搜索匹配的新电子邮件。但是,它永远不会在不重新连接的情况下显示新电子邮件。
mail = imaplib.IMAP4_SSL('imap.gmail.com')
mail.login(user,passwd)
mail.select("inbox")
while True:
result, idData = mail.uid('search', query, "ALL")
processIDs(idData)
time.sleep(60)
搜索会在登录时找到与我的查询匹配的所有电子邮件,但它永远不会找到在运行时到达的电子邮件。只要我停止脚本并重新启动它,所有电子邮件都会立即显示出来。
如果用谷歌搜索并查看 imaplib 文档,但找不到任何有用的东西。
如何在不重新连接到 imap 服务器的情况下显示新电子邮件?
编辑:我想避免重新连接的原因是 gmail 速率限制。
【问题讨论】:
-
如果将这两行
mail.login(user,passwd)mail.select("inbox")移动到 while 循环中会怎样?这不是一个完美的修复,但可以给你想要的结果,或者如果这个库支持流数据模式,你可以查找? -
@Anmol_uppal 是的,如果我每次都登录,但由于 gmail 登录率限制,我特别想避免这种情况。我对 imap 了解不多,如果流数据模式是指 imap IDLE,那么我不这么认为。根据我的阅读,IDLE 是一种获取新电子邮件推送更新的方法,但 python imaplib 不支持。
-
尝试在循环内仅复制
mail.select("inbox")这一行,看看是否可行?我对此不确定,但我猜它应该可以工作 -
@Anmol_uppal 这行得通,非常感谢。我本可以发誓我在 ipython 中尝试过,但显然我是个白痴。
-
欢迎您,伙计,我已经发布了解决方案,欢迎您进行任何编辑:)
标签: python email gmail imap gmail-imap