Feature #1142
openFeature #1133: Implémenter une page de profil utilisateur avec gestion des crédits et des tiers d'abonnement
Backend — Notifications email (mot de passe, tier, crédits bas <20 %)
0%
issue:1133 — spec in epic + ticket description
Description
## Objectif
Envoyer des emails automatiques en réaction aux événements de domaine émis par le modèle crédits/tiers (#1141). Couvre : changement de mot de passe, changement de tier, et crédits bas (<20 % du quota du tier).
## Dépendances
Dépend du backend modèle crédits/tiers/historique (#1141) qui émet les événements de domaine.
## Portée
- Souscripteurs/handlers consommant les événements de domaine (tier changé, crédits ajustés/bas, mot de passe changé) côté `api/` (application/infrastructure).
- Gabarits d'email (FR) pour : confirmation de changement de mot de passe, notification de changement de tier (ancien→nouveau), alerte crédits bas (<20 %).
- Service d'envoi via la configuration SMTP existante; envoi non bloquant (n'échoue pas la requête métier si l'email échoue — log + retry/best-effort).
- Anti-spam pour l'alerte crédits bas : ne pas renvoyer tant que le seuil n'est pas re-franchi (un seul email par passage sous 20 %).
## Acceptance criteria
- [ ] Un email de confirmation est envoyé lors d'un changement de mot de passe.
- [ ] Un email est envoyé au client lors d'un changement de tier (mentionnant ancien et nouveau tier).
- [ ] Une alerte email est envoyée quand les crédits passent sous 20 % du quota, une seule fois par franchissement.
- [ ] Les emails sont en français et utilisent la configuration SMTP du projet.
- [ ] L'échec d'envoi d'email ne fait pas échouer l'opération métier (loggé, best-effort).
- [ ] Tests pytest verts (handlers déclenchés sur événements, mock SMTP), `ruff check .` et `mypy src` propres.