import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from src.config import EmailAccount from src.retry import retry @retry() def send_reply(account: EmailAccount, to_addr: str, subject: str, body: str): if not account.smtp: raise RuntimeError(f"账号 {account.username} 未配置 SMTP") s = account.smtp if s.use_ssl: conn = smtplib.SMTP_SSL(s.server, s.port, timeout=15) else: conn = smtplib.SMTP(s.server, s.port, timeout=15) if s.use_starttls: conn.starttls() conn.login(account.username, account.password) reply_subject = subject if subject.lower().startswith("re:") else f"Re: {subject}" msg = MIMEMultipart("alternative") msg["From"] = account.username msg["To"] = to_addr msg["Subject"] = reply_subject msg.attach(MIMEText(body, "plain", "utf-8")) conn.sendmail(account.username, [to_addr], msg.as_string()) conn.quit()