Files
Antoine 0b47e4a625 Corrige le rendu de la page mot de passe, masque la nav si non connecté,
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).
2026-07-17 22:16:48 +02:00

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