Python Imaplib:无需重新连接即可获取新的 Gmail 邮件
Python Imaplib: Get new gmail mails without reconnect
我正在编写一个 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 速率限制。
好吧,这是一种尝试和尝试的方法,最后我们得到了一个解决方案,虽然不是最优的,hack 是每次脚本从睡眠中醒来后重新连接,从开始获取收件箱,这可以通过刷新页面轻松完成(就像我们在普通浏览器中重新加载一样),所以它可能看起来像这样:
mail = imaplib.IMAP4_SSL('imap.gmail.com')
mail.login(user,passwd)
while True:
mail.select("inbox")
result, idData = mail.uid('search', query, "ALL")
processIDs(idData)
time.sleep(60)
删除 time.sleep(60)
和 use idle() from this version of imaplib。 29 分钟的暂停是可以的。如果您的网络前面有损坏的 NAT 网关,您可能需要使用更短的超时时间。
IMAP 命令 IDLE 指示服务器在任何更改后立即通知客户端。因此,您 运行 处于空闲状态,然后当服务器发出指令时,您会重新运行 进行搜索。这样一来,您应该能够在一两秒内对变化做出反应。
我知道您已经接受了答案,但我认为比重新连接更好的方法是发出 NOOP command.
您可以在 while 循环或 IDLE 中发出 NOOP 命令来更新 IMAP 会话。
我正在编写一个 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 速率限制。
好吧,这是一种尝试和尝试的方法,最后我们得到了一个解决方案,虽然不是最优的,hack 是每次脚本从睡眠中醒来后重新连接,从开始获取收件箱,这可以通过刷新页面轻松完成(就像我们在普通浏览器中重新加载一样),所以它可能看起来像这样:
mail = imaplib.IMAP4_SSL('imap.gmail.com')
mail.login(user,passwd)
while True:
mail.select("inbox")
result, idData = mail.uid('search', query, "ALL")
processIDs(idData)
time.sleep(60)
删除 time.sleep(60)
和 use idle() from this version of imaplib。 29 分钟的暂停是可以的。如果您的网络前面有损坏的 NAT 网关,您可能需要使用更短的超时时间。
IMAP 命令 IDLE 指示服务器在任何更改后立即通知客户端。因此,您 运行 处于空闲状态,然后当服务器发出指令时,您会重新运行 进行搜索。这样一来,您应该能够在一两秒内对变化做出反应。
我知道您已经接受了答案,但我认为比重新连接更好的方法是发出 NOOP command.
您可以在 while 循环或 IDLE 中发出 NOOP 命令来更新 IMAP 会话。