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 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 twig servent de base pour la création du contenu des emails.
@dir templates/emails
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 :
@see src/Service/Mailer/Mailer.php
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
Les envois d'email sont gérés par Messenger.
@see src/Message/Command/MailerCommand.php et src/Message/Handler/MailerHandler.php
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()) |
+--------------------------------+