import logging import smtplib from email.message import EmailMessage from app.core.config import get_settings logger = logging.getLogger("gsfdc.mailer") def send_email(*, to: str, subject: str, body: str) -> None: settings = get_settings() host = settings.smtp_host.strip() if not host: raise RuntimeError("SMTP 未配置") sender = (settings.smtp_sender or settings.smtp_user).strip() if not sender: raise RuntimeError("SMTP 发件人未配置") message = EmailMessage() message["From"] = sender message["To"] = to message["Subject"] = subject message.set_content(body) if settings.smtp_use_ssl: with smtplib.SMTP_SSL(host, settings.smtp_port, timeout=20) as smtp: if settings.smtp_user.strip(): smtp.login(settings.smtp_user.strip(), settings.smtp_password) smtp.send_message(message) return with smtplib.SMTP(host, settings.smtp_port, timeout=20) as smtp: smtp.starttls() if settings.smtp_user.strip(): smtp.login(settings.smtp_user.strip(), settings.smtp_password) smtp.send_message(message)