微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

imaplib , imap_tools 几分钟后返回错误 imaplib.abort:命令:SELECT => IMAP4rev1 服务器注销

如何解决imaplib , imap_tools 几分钟后返回错误 imaplib.abort:命令:SELECT => IMAP4rev1 服务器注销

我使用此代码从我的 yahoo 邮件获取未看到的新邮件,并找到具有特定 URL 的邮件

from imap_tools import MailBox,AND
import re
from config import  email,password
from scrap import scrap

yahooSmtpServer = "imap.mail.yahoo.com"
client = MailBox(yahooSmtpServer).login(email,password,'INBox')
while True:
    msgs = client.fetch(AND(seen=False))
    for msg in msgs:
        mail = msg.html
        if 'pick' in mail and not 'Combo-pick' in mail:
            for i in re.findall(r'(https?://[^\s]+)',mail):
                if 'pick' in i:
                    link = i.replace('"',"")
                    print(link)
                    try:
                        scrap(link)
                    except:
                        pass
                    
        client.seen(msg.uid,True)
    client.logout()
    client = MailBox(yahooSmtpServer).login(email,'INBox')

大多数时候它会工作一段时间。大约 15 分钟。然后它返回一个错误

Traceback (most recent call last):
  File "C:\Program Files\python39\lib\imaplib.py",line 1047,in _command_complete
    typ,data = self._get_tagged_response(tag,expect_bye=logout)
  File "C:\Program Files\python39\lib\imaplib.py",line 1165,in _get_tagged_response
    self._check_bye()
  File "C:\Program Files\python39\lib\imaplib.py",line 961,in _check_bye
    raise self.abort(bye[-1].decode(self._encoding,'replace'))
imaplib.abort: IMAP4rev1 Server logging out

During handling of the above exception,another exception occurred:

Traceback (most recent call last):
  File "C:\Users\Administrator\Desktop\yahooMail (2)\yahooMail (1)\main.py",line 24,in <module>
    client = MailBox(yahooSmtpServer).login(email,'INBox')
  File "C:\Program Files\python39\lib\site-packages\imap_tools\mailBox.py",line 44,in login
    self.folder.set(initial_folder)
  File "C:\Program Files\python39\lib\site-packages\imap_tools\folder.py",line 37,in set
    result = self.mailBox.Box.select(encode_folder(folder))
  File "C:\Program Files\python39\lib\imaplib.py",line 756,in select
    typ,dat = self._simple_command(name,mailBox)
  File "C:\Program Files\python39\lib\imaplib.py",line 1230,in _simple_command
    return self._command_complete(name,self._command(name,*args))
  File "C:\Program Files\python39\lib\imaplib.py",line 1049,in _command_complete
    raise self.abort('command: %s => %s' % (name,val))
imaplib.abort: command: SELECT => IMAP4rev1 Server logging out

有什么办法可以解决吗?或者我可以在每次不登录的情况下获取新的/未见过的电子邮件吗? (当我尝试在没有登录的情况下进行循环时,它没有收到新消息)。 谢谢。

解决方法

您应该考虑 RFC2177 中描述的 IMAP IDLE 协议扩展

https://datatracker.ietf.org/doc/html/rfc2177

imap_tools 做不到,但你可以为 lib 实现它。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?