簡體   English   中英

imaplib、imap_tools 幾分鍾后返回錯誤。 (imaplib.abort:命令:SELECT => IMAP4rev1 服務器注銷)

[英]imaplib , imap_tools return an error after a few minutes. (imaplib.abort: command: SELECT => IMAP4rev1 Server logging out)

我使用此代碼從我的雅虎郵件中獲取看不見的新消息,並找到具有特定 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, password, '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, password, '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 實現它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM