fix: 修复 _email_poller 线程静默死亡问题

- IMAP 连接加 30s socket timeout,防止 _send_id_command 等操作永久阻塞
- _email_poller 加顶层 try/except,异常后 sleep 5s 继续循环
- @retry() 加指数退避延迟(1s,2s,4s...),避免重试风暴
This commit is contained in:
2026-07-06 19:54:23 +08:00
committed by Zichao Lin
parent c684090b9c
commit 0c1ccdfc79
3 changed files with 21 additions and 14 deletions

View File

@@ -87,12 +87,12 @@ def _select_mailbox(conn, mailbox: str = "INBOX"):
raise RuntimeError(f"无法选择邮箱 {mailbox}: {data}")
def _login_and_prepare(account: EmailAccount):
logger.info("连接 %s:%d", account.imap_server, account.imap_port)
def _login_and_prepare(account: EmailAccount, timeout: int = 30):
logger.info("连接 %s:%d (超时%ds)", account.imap_server, account.imap_port, timeout)
if account.use_ssl:
conn = imaplib.IMAP4_SSL(account.imap_server, account.imap_port)
conn = imaplib.IMAP4_SSL(account.imap_server, account.imap_port, timeout=timeout)
else:
conn = imaplib.IMAP4(account.imap_server, account.imap_port)
conn = imaplib.IMAP4(account.imap_server, account.imap_port, timeout=timeout)
if account.use_starttls:
conn.starttls()
conn.login(account.username, account.password)