Files
openslide/app/email_utils.py
2026-01-23 13:54:58 +01:00

62 lines
1.9 KiB
Python

import os
import smtplib
from email.message import EmailMessage
def send_email(*, to_email: str, subject: str, body_text: str):
"""Send a plain-text email using SMTP settings from environment variables.
Required env vars:
- SMTP_HOST
- SMTP_PORT
- SMTP_USERNAME
- SMTP_PASSWORD
- SMTP_FROM (defaults to SMTP_USERNAME)
Optional:
- SMTP_STARTTLS (default: "1")
- SMTP_TIMEOUT_SECONDS (default: "10")
- SMTP_DEBUG (default: "0") - set to 1 to print SMTP conversation to console
"""
host = os.environ.get("SMTP_HOST")
port = int(os.environ.get("SMTP_PORT", "587"))
username = os.environ.get("SMTP_USERNAME")
password = os.environ.get("SMTP_PASSWORD")
from_email = os.environ.get("SMTP_FROM") or username
starttls = os.environ.get("SMTP_STARTTLS", "1").lower() in ("1", "true", "yes", "on")
timeout = float(os.environ.get("SMTP_TIMEOUT_SECONDS", "10"))
debug = os.environ.get("SMTP_DEBUG", "0").lower() in ("1", "true", "yes", "on")
missing = []
if not host:
missing.append("SMTP_HOST")
if not username:
missing.append("SMTP_USERNAME")
if not password:
missing.append("SMTP_PASSWORD")
if not from_email:
missing.append("SMTP_FROM")
if missing:
raise RuntimeError(
"Missing SMTP configuration: "
+ ", ".join(missing)
+ ". Set them as environment variables (or in a local .env file)."
)
msg = EmailMessage()
msg["From"] = from_email
msg["To"] = to_email
msg["Subject"] = subject
msg.set_content(body_text)
with smtplib.SMTP(host, port, timeout=timeout) as smtp:
if debug:
smtp.set_debuglevel(1)
smtp.ehlo()
if starttls:
smtp.starttls()
smtp.ehlo()
smtp.login(username, password)
smtp.send_message(msg)