fix: update email_client and smtp_client for new config structure - email_client: use account.imap.server/port/ssl/starttls instead of flat fields - smtp_client: use s.ssl/starttls instead of s.use_ssl/use_starttls - tg_bot: fix _do_send_reply to use find_user_by_chat_id for email_accounts

This commit is contained in:
2026-07-17 22:19:20 +08:00
parent c6180834bc
commit 7a01b29655
4 changed files with 15 additions and 10 deletions

2
.gitignore vendored
View File

@@ -1,5 +1,5 @@
.venv/ .venv/
__pycache__/ __pycache__/
*.pyc *.pyc
config.yaml config.json
data/ data/

View File

@@ -91,12 +91,13 @@ def _select_mailbox(conn, mailbox: str = "INBOX"):
def _login_and_prepare(account: EmailAccount, timeout: int = 30, select_inbox: bool = True): def _login_and_prepare(account: EmailAccount, timeout: int = 30, select_inbox: bool = True):
logger.info("连接 %s:%d (超时%ds)", account.imap_server, account.imap_port, timeout) imap = account.imap
if account.use_ssl: logger.info("连接 %s:%d (超时%ds)", imap.server, imap.port, timeout)
conn = imaplib.IMAP4_SSL(account.imap_server, account.imap_port, timeout=timeout) if imap.ssl:
conn = imaplib.IMAP4_SSL(imap.server, imap.port, timeout=timeout)
else: else:
conn = imaplib.IMAP4(account.imap_server, account.imap_port, timeout=timeout) conn = imaplib.IMAP4(imap.server, imap.port, timeout=timeout)
if account.use_starttls: if imap.starttls:
conn.starttls() conn.starttls()
conn.login(account.username, account.password) conn.login(account.username, account.password)
logger.info("登录成功: %s", account.username) logger.info("登录成功: %s", account.username)

View File

@@ -23,12 +23,12 @@ def send_reply(account: EmailAccount, to_addr: str, subject: str, body: str,
raise RuntimeError(f"账号 {account.username} 未配置 SMTP") raise RuntimeError(f"账号 {account.username} 未配置 SMTP")
s = account.smtp s = account.smtp
logger.info("SMTP 连接: %s:%d (ssl=%s)", s.server, s.port, s.use_ssl) logger.info("SMTP 连接: %s:%d (ssl=%s)", s.server, s.port, s.ssl)
if s.use_ssl: if s.ssl:
conn = smtplib.SMTP_SSL(s.server, s.port, timeout=15) conn = smtplib.SMTP_SSL(s.server, s.port, timeout=15)
else: else:
conn = smtplib.SMTP(s.server, s.port, timeout=15) conn = smtplib.SMTP(s.server, s.port, timeout=15)
if s.use_starttls: if s.starttls:
conn.starttls() conn.starttls()
conn.login(account.username, account.password) conn.login(account.username, account.password)

View File

@@ -659,7 +659,11 @@ def _extract_media(msg: dict) -> list[dict]:
def _do_send_reply(bot_token: str, cfg: Config, def _do_send_reply(bot_token: str, cfg: Config,
chat_id: int, msg_id: int, ctx: dict, reply_text: str, chat_id: int, msg_id: int, ctx: dict, reply_text: str,
attachments: list[dict] | None = None): attachments: list[dict] | None = None):
acct = cfg.email_accounts[ctx["account_idx"]] user = find_user_by_chat_id(cfg, chat_id)
if not user:
send_text(bot_token, str(chat_id), "❌ 用户未找到。")
return
acct = user.email_accounts[ctx["account_idx"]]
if not acct.smtp: if not acct.smtp:
send_text(bot_token, str(chat_id), "❌ 该邮箱未配置 SMTP无法发送回复。") send_text(bot_token, str(chat_id), "❌ 该邮箱未配置 SMTP无法发送回复。")
return return