Files
2026-08-21 01:55:19 +00:00

35 lines
973 B
Python

"""Optional SMTP delivery of tenant reports."""
import asyncio
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from config import Settings
class MailNotConfigured(RuntimeError):
pass
def _send_sync(s: Settings, to: str, subject: str, html: str):
msg = MIMEMultipart("alternative")
msg["Subject"] = subject
msg["From"] = s.smtp_from
msg["To"] = to
msg.attach(MIMEText(html, "html"))
with smtplib.SMTP(s.smtp_host, s.smtp_port, timeout=30) as server:
if s.smtp_tls:
server.starttls()
if s.smtp_user:
server.login(s.smtp_user, s.smtp_password)
server.send_message(msg)
async def send_report(s: Settings, to: str, subject: str, html: str):
if not s.smtp_host:
raise MailNotConfigured(
"SMTP not configured — set BILLING_SMTP_HOST etc. in .env"
)
await asyncio.to_thread(_send_sync, s, to, subject, html)