réduit le score spam des emails, et rend le niveau de log configurable - Les styles .login-* étaient définis uniquement dans login.html, donc set_password.html s'affichait sans aucun style. Déplacé dans base.html. - La nav affichait les liens même sans session active. - mail.py ajoute Message-ID/Date et encode en quoted-printable (au lieu de base64) pour réduire le score spam (MISSING_MID, MISSING_DATE, MIME_BASE64_TEXT). - log_level devient une directive de config.json plutôt qu'une variable d'environnement. - README: section démarrage rapide (copie de config.example.json, compose.override.yml pour les surcharges locales).
46 lines
1.8 KiB
Python
46 lines
1.8 KiB
Python
"""Mail delivery via a configured SMTP relay (host/port/credentials in config.json)."""
|
|
import logging
|
|
import smtplib
|
|
from email.message import EmailMessage
|
|
from email.utils import make_msgid, formatdate
|
|
|
|
logger = logging.getLogger("pointeuse.mail")
|
|
|
|
|
|
def send_mail(to_addr: str, subject: str, body: str, from_addr: str, smtp_cfg: dict):
|
|
host = smtp_cfg.get("host")
|
|
if not host:
|
|
logger.error("envoi annulé: aucun serveur SMTP configuré (smtp.host manquant dans config.json)")
|
|
raise RuntimeError("Aucun serveur SMTP configuré (smtp.host manquant dans config.json).")
|
|
port = int(smtp_cfg.get("port", 587))
|
|
user = smtp_cfg.get("user")
|
|
password = smtp_cfg.get("password")
|
|
use_tls = smtp_cfg.get("use_tls", True)
|
|
|
|
msg = EmailMessage()
|
|
msg.set_content(body, cte="quoted-printable") # évite MIME_BASE64_TEXT
|
|
msg["Subject"] = subject
|
|
msg["From"] = from_addr
|
|
msg["To"] = to_addr
|
|
msg["Message-ID"] = make_msgid(domain=from_addr.split("@", 1)[1])
|
|
msg["Date"] = formatdate(localtime=True)
|
|
|
|
logger.info(
|
|
"envoi mail: to=%r from=%r subject=%r via smtp=%s:%s user=%r tls=%r",
|
|
to_addr, from_addr, subject, host, port, user, use_tls,
|
|
)
|
|
try:
|
|
with smtplib.SMTP(host, port, timeout=10) as smtp:
|
|
smtp.set_debuglevel(1)
|
|
if use_tls:
|
|
logger.debug("STARTTLS vers %s:%s", host, port)
|
|
smtp.starttls()
|
|
if user:
|
|
logger.debug("login SMTP en tant que %r", user)
|
|
smtp.login(user, password)
|
|
smtp.send_message(msg)
|
|
logger.info("mail envoyé avec succès à %r", to_addr)
|
|
except Exception:
|
|
logger.exception("échec de l'envoi du mail à %r via %s:%s", to_addr, host, port)
|
|
raise
|