34 lines
1.1 KiB
Python
34 lines
1.1 KiB
Python
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)
|