Réseaux sociaux

Envoyer des mails à partir de Symfony 5.0 et supérieur

 Les composants Mailer et Mime de Symfony forment un système puissant pour la création et l'envoi d'e-mails.

Il permet une prise en charge des messages multi-parties, une intégration de Twig, d'intégration du CSS Inline, d'ajouter des pièces jointes et bien plus encore.

Installation

Installez-les avec :

compositeur nécessite symfony/mailer

Paramétrage

Les courriers électroniques sont envoyés via un "fournisseur". Par défaut, vous pouvez envoyer des e-mails via SMTP en le configurant dans votre fichier .env (les paramètres user, pass et port sont facultatifs mais fortement recommandés).

#.env

MAILER_DSN = smtp://user:[email protected]:port

Si vous migrez depuis Swiftmailer (et le bundle Swiftmailer), sachez que le format DSN est différent.

Il existe d'autres fournisseurs que votre propre serveur SMTP, vous pouvez envoyer des e-mails via un fournisseur tiers. Mailer en supporte plusieurs – installez celui que vous voulez :

SERVICEINSTALLATEUR AVEC LA COMMANDE
Amazon SEScomposer require symfony/amazon-mailer
Gmailcomposer require symfony/google-mailer
MailChimpcomposer require symfony/mailchimp-mailer
Pistolet postalcomposer require symfony/mailgun-mailer
Cachet de la postecomposer require symfony/postmark-mailer
Grille d'envoicomposer require symfony/sendgrid-mailer

Chaque bibliothèque comprend un paramétrage Symfony Flex qui ajoutera un exemple de configuration à votre fichier .env.

Par exemple, supposons que vous souhaitiez utiliser Amazon SES. Tout d'abord, installez-le :

compositeur nécessite symfony/amazon-mailer

Une ligne sera ajoutée dans votre fichier .env que vous pouvez décommenter et ajouter les paramètres :

###> symfony/amazon-mailer #### MAILER_DSN=ses://ACCESS_KEY:SECRET_KEY@default?region=eu-west-1# MAILER_DSN=ses+smtp://ACCESS_KEY:SECRET_KEY@default?region=eu-west-1

Le MAILER_DSN n'est pas une adresse réelle mais d'un format permettant de ne pas avoir à configurer le mailer à chaque utilisation.

e schéma Amazon SES active le fournisseur AWS SES que vous venez d'installer, qui sait tout sur la façon de livrer les messages via AWS SES. La seule partie à configurer dans cet exemple est l'ACCESS_KEY , le SECRET_KEY ainsi que la région.

Chaque fournisseur possède différentes variables que le Mailer utilise pour configurer le service, l'adresse et l'authentification pour la livraison. Certains ont également des options qui peuvent être configurées avec des paramètres de requête à la fin du MAILER_DSN – comme ?region= pour Amazon SES ou Mailgun. Certains fournisseurs prennent en charge l'envoi via http, api ou smtp. Symfony choisit le meilleur transport disponible, mais vous pouvez forcer l'utilisation d'un seul.

Vérifiez le format DSN pour votre fournisseur.

Création et envoi d'un message

Pour envoyer un email il faut au préalable loader les librairies Symfony\Component\Mailer\MailerInterface et Symfony\Component\Mime\Email

 utilisez Symfony\Component\Mailer\MailerInterface ;
utilisez Symfony\Component\Mime\Email ;
 la classe SendmailController étend AbstractController
{

/**
* @Route("/send_email")
*/
fonction publique sendEmail(MailerInterface $mailer)
{
$email = nouvel e-mail();
$email->de('[email protected]')
$email->à('[email protected]')
$email->subject('Test avec Symfony Mailer')
$email->text('Envoi d'emails de test avec Symfony !')
$email->html('Voir l'intégration de Twig pour une meilleure

Intégration HTML ! ' );
$mailer->envoyer ($email);
}

}

C'est tout ! Le message sera envoyé via le provider que vous avez configuré.

Voici quelques méthodes supplémentaires que vous pouvez utiliser

 ->cc('[email protected]')
->bcc('[email protected]')
->répondreà('[email protected]')
->priority(Email::PRIORITY_HIGH)

Ajouter une adresse Email d'expéditeur et de destinataire

Les méthodes permettant de fournir des adresses mail ( from() , to() , etc.) acceptent aussi bien une chaîne de caractère qu'un Object de type Address

 utilisez Symfony\Component\Mime\Address;$email = (new Email())

// adresse électronique en tant que simple chaîne de caractères
->de('[email protected]')

// adresse électronique en tant qu'objet
->de(nouvelle adresse('[email protected]'))

// définir l'adresse e-mail et le nom comme un objet (les clients de messagerie afficheront le nom)
->de(nouvelle Adresse('[email protected]', 'Mon Nom'))

// définir l'adresse électronique et le nom sous forme de chaîne
// (le format doit correspondre à : 'Nom ')
->from(Adresse::fromString('Nom ')) ;

Vous pouvez ajouter plusieurs adresses mail en utilisant la fonction addTo() :

 $email = nouvel e-mail();

$email->addTo('[email protected]');
$email->->addTo('[email protected]');

Vous pouvez faire de même avec les autres fonctions cc ou bcc de la manière suivante :

 $email = nouvel e-mail();

$email->cc('[email protected]', '[email protected]');
$email->bcc('[email protected]', '[email protected]');

En tête de message

Un message inclut un certain nombre d'enquêtes il est possible de personnaliser.

Symphonie définie par défaut toutes les en-têtes nécessaires, mais vous pouvez également définir vos propres en-têtes si nécessaire. Il existe différents types d'entête (Entête Id, Entête Mailbox, Entête Date, etc.).

Les en-têtes marqués des manières suivantes :

 $email = nouvel e-mail();

$email->getHeaders();
// cet en-tête indique aux auto-réplicateurs ("mode vacances e-mail") de ne pas répondre
// à ce message car il s'agit d'un courriel automatisé ->addTextHeader('X-Auto-Response-Suppress', 'OOF, DR, RN, NRN, AutoReply');

Commenter ajouter un contenu à votre mail

Il est possible d'ajouter un contenu de type texte où html à votre mail, mais il est également possible d'ajouter d'autres ressources grâce aux fonctions PHP.

Le rendu du HTML peut également être mis en forme avec des feuilles de style CSS, ainsi qu'avec des templates Twig.

 $email = nouvel e-mail();

$email->texte('Mont texte brut');
$email->html('Mon texte HTML
');

Pour ajouter du contenu à partir d'un fichier existant procéder de la même manière en récupérant votre texte avec la fonction fopen le PHP

 $email = nouvel e-mail();

$email->text(fopen('/chemin/vers/emails/user_signup.txt', 'r'));
$email->html(fopen('/chemin/vers/emails/user_signup.html', 'r'));

Commentaire attacher un fichier à votre email

Il est régulièrement nécessaire d'ajouter des pièces jointes à un mail, pour cela il suffit d'utiliser la fonction attachFromPath().

Pour attacher les fichiers il faudra qu'ils soient présents sur le serveur qui enverra l'e-mail.

 $email = nouvel e-mail();

$email->attachFromPath('/path/to/documents/terms-of-use.pdf');

// en option, vous pouvez demander aux clients de messagerie d'afficher un nom personnalisé pour le fichier.
$email->attachFromPath('/chemin/vers/documents/privacy.pdf', 'Politique de confidentialité');

// en option, vous pouvez fournir un type MIME explicite (sinon il est déterminé automatiquement).
$email->attachFromPath('/chemin/vers/documents/contrat.doc', 'Contrat', 'application/msword');

// vous pouvez également utiliser une URL absolue si votre configuration PHP permet de récupérer des URL en utilisant fopen()
// (ce n'est pas recommandé car votre application peut fonctionner ou non selon la configuration de PHP).
$email->attachFromPath('http://example.com/path/to/documents/contract.doc', 'Contract', 'application/msword');

Parallèlement il était vraiment possible de joindre un fichier en utilisant un flux avec la méthode attach()

 $email = nouvel e-mail();

$email->attach(fopen('/chemin/vers/documents/contrat.doc', 'r'));

Insérer une image

Si vous souhaitez afficher une image au sein de votre courrier, vous devez intégrer au lieu de les ajouter en tant que pièce jointe. Si vous utilisez Twig pour générer le contenu de votre e-mail, vos images sont intégrées automatiquement (vous obtiendrez plus de détails à ce sujet un autre article).

Vous devez intégrer les images manuellement en utilisant les méthodes suivantes embed() ou embedFromPath(), à partir d'un fichier ou d'un flux.

 $email = nouvel e-mail();

// récupérer le contenu de l'image à partir d'une ressource PHP
$email->embed(fopen('/chemin/vers/images/logo.png', 'r'), 'logo');

// récupérer le contenu de l'image à partir d'un fichier existant
$email->embedFromPath('/chemin/vers/images/signature.gif', 'footer-signature');

Le 2ème paramètre facultatif les 2 méthodes et le nom ("Content-ID" dans la norme MIME). Cette valeur est utilisée pour référencer les images dans le code HTML.

Envoyer l'email

Pour envoyer un email nous avons procédé en 2 étapes.

La première la création de l'email en lui-même en ajoutant l'expéditeur des destinataires ainsi que le contenu du message (texte et/où pièce jointe).

Puis la 2nde étape consiste à envoyer l'email en utilisant le mailer tu auras au préalable été paramétré et instancié.

 $mailer->envoyer ($email);

Dans un prochain article nous rentrerons dans les fonctions plus avancées vous permettant de personnaliser le comportement de l'envoi des e-mails, ainsi que leur contenu.

Traduction de l'article Source : https:// symfony .com/doc/current/mailer.html

Ce travail, y compris les exemples de code, est sous licence Creative Commons BY-SA 3.0 .


Georges 13 septembre 2021
Partager cet article
Se connecter pour laisser un commentaire.