"""SMTP 邮件发送工具。""" from __future__ import annotations import smtplib from email.message import EmailMessage from app.config import settings def send_email(subject: str, to_email: str, html: str, text: str | None = None) -> None: if not settings.smtp_host or not settings.smtp_sender or not settings.smtp_username or not settings.smtp_password: raise RuntimeError("SMTP 配置不完整") message = EmailMessage() message["Subject"] = subject message["From"] = settings.smtp_sender message["To"] = to_email message.set_content(text or subject) message.add_alternative(html, subtype="html") if settings.smtp_use_ssl: with smtplib.SMTP_SSL(settings.smtp_host, settings.smtp_port) as server: server.login(settings.smtp_username, settings.smtp_password) server.send_message(message) else: with smtplib.SMTP(settings.smtp_host, settings.smtp_port) as server: server.starttls() server.login(settings.smtp_username, settings.smtp_password) server.send_message(message) def build_register_code_email(code: str) -> tuple[str, str]: subject = "AStock Agent 注册验证码" html = f"""
你正在注册 AStock Agent,请使用以下验证码完成注册:
验证码 {settings.email_code_expiry_minutes} 分钟内有效,请勿泄露给他人。