mailer.md 5.5 KB

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.

@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())        |
                                               +--------------------------------+