# Mailer : Gestion des emails système ## Principe général et fonctionnement actuel ### Les modèles Un modèle toutes les données nécessaires pour construire un certain type d'email (destinataire, sujet de l'email, contenu, etc.) Par exemple, SubdomainChangeModel contient des informations spécifiques nécessaires pour informer un utilisateur d'un changement de sous-domaine facilitant le stockage des données, mais aussi la standardisation de l'envoi d'emails avec une même interface pour les builders. > @dir src/Service/Mailer/Model ### Les Builders Les Builders sont des composants qui prennent les modèles préparés (comme SubdomainChangeModel) et les transforment en objets Email. Ils utilisent des services de rendu comme Twig pour générer le contenu de l'email basé sur des templates dynamiques, et configurent les objets Email en y ajoutant les destinataires, les sujets, et autres données nécessaires. Ces objets Email sont ensuite prêts à être envoyés par le service de messagerie. > @dir src/Service/Mailer/Builder ### Les templates Les templates twig servent de base pour la création du contenu des emails. > @dir templates/emails ### Le service Mailer Le service Mailer assure les envois d'emails de la manière la plus agnostique possible. Sa fonction `main` attend un Model en entrée (voir plus haut). A partir de ce modèle, elle : - génère le ou les mails correspondants - les envoie - les enregistre en base de données - envoie le rapport d'envoi > @see src/Service/Mailer/Mailer.php ### L'entité Email (Message) Une ligne est ajoutée à la table Message pour chaque email ou série d'emails envoyés. Les emails systèmes sont identifiés par l'attribut `isSystem`. > @see src/Entity/Message/Mail.php ### Messenger Les envois d'email sont gérés par [Messenger](https://symfony.com/doc/current/components/messenger.html). > @see src/Message/Command/MailerCommand.php et src/Message/Handler/MailerHandler.php ## Flux général Exemple d'un email de notification de changement de sous-domaine : +-----------------------------+ +-------------------------------+ | Action: Changement de | | Crée un message | | sous-domaine +--------------->+ MailerCommand avec | | (par utilisateur ou script)| | SubdomainChangeModel | +-----------------------------+ +---------------+---------------+ | v +-------------+-------------+ | MailerHandler reçoit la | | commande | +-------------+-------------+ | v +--------------+--------------+ | Extraction du modèle | | SubdomainChangeModel | +--------------+--------------+ | v +---------------+---------------+ | Utilisation du builder | | OnSubdomainChangeMailBuilder | +---------------+---------------+ | v +----------------+----------------+ | Construction de l'email: | | - Génération du contenu via | | Twig | | - Configuration des | | destinataires | +----------------+----------------+ | v +----------------+----------------+ | Envoi de l'email via le | | service Mailer | +----------------+----------------+ | v +----------------+----------------+ | Notification post-envoi (si | | requis par getNotify()) | +--------------------------------+