python - IMAP电子邮件IDLE停止等待超时持续时间,而是在Python中立即循环

标签 python imap gmail-imap email-client

我有一个程序可以使用 IMAP IDLE 检查收件箱中的新电子邮件。每当我运行它时,它一开始就工作得很好。但一段时间后,它停止暂停 IDLE 超时时间,而是快速循环第一部分。

from imapclient import IMAPClient
from imap_tools import MailBox, AND

while True:
    try:
        #this is the part that's getting looped every half second when it breaks
        telegram('try portion starting again')

        # Wait for up to 540 seconds for an IDLE response
        responses = server.idle_check(timeout=540)
        if responses:
            telegram('Email Recieved')

            for response in responses:

                if response[0] not in checked_uids:

                    checked_uids.append(response[0])

                    uid = str(response[0])

                    with MailBox(HOST).login(USERNAME, PASSWORD) as mailbox:
                        for msg in mailbox.fetch(AND(uid=uid)):

                            body_text=msg.text

                            telegram(body_text)

telegram() 向我发送电报消息。

因此,当它正常工作时,我会收到一条包含新电子邮件正文的消息,并且每隔 540 秒我就会收到一条消息,表明 try: 部分已再次开始。

在我的测试中,它会像这样工作一段时间,然后突然之间,出于我无法辨别的原因,我收到“尝试部分重新开始”消息每秒两次重复到无限。这意味着,似乎 responses = server.idle_check(timeout=540) 部分停止按预期工作

编辑:这是我正在使用的代码的 catch 部分。 super 简单。当程序变得疯狂并且循环如此之快时,我也没有收到任何错误消息

except KeyboardInterrupt:
    break
except Exception as e:
    print(e)
    telegram(e)

最佳答案

我想出了一个解决方案。我仍然不知道为什么会发生这种情况,但这为我解决了问题。

我将 server.idle() 放在 try: 代码中。然后我将 server.idle_done() 放入 finally 代码段中。这样,每次程序循环时都会启动空闲,每次结束时都会停止空闲。看来每次这样做都会让程序更加稳定。

关于python - IMAP电子邮件IDLE停止等待超时持续时间,而是在Python中立即循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67930085/

相关文章:

python - 在python中的某个模式之前添加字符串中的分隔符

python - 如何在 Vim 中通过 ALE 运行 isort?

iphone - iOS IMAP 库

google-api - 使用相同控制台应用程序的 Gmail REST API 和 Gmail IMAP 的 API 配额

python imaplib 获取结果与来自 gmail 的简单电子邮件无关

python - 通过python从gmail获取电子邮件

python - 如何使用python获取文件夹中的工作表ID数组

python - AUTH_USER_MODEL 指尚未安装的型号

python - imap-tools 访问原始消息数据

ssl - 使用 Java Mail API 通过 IMAP 协议(protocol)安全访问电子邮件地址