Symfony 5 | Envoyer un mail avec SwiftMailer et maildev

Développeur web Front-End dans l'Oise - Gary Deshayes <--Translation

Crée le : lundi 1 novembre 2021


Prérequis :

Installer SwiftMailer https://symfony.com/doc/5.2/email.html

Installer Maildev https://github.com/maildev/maildev 

Configurer SwiftMailer :

Dans le fichier swiftmailer.yaml qui se trouve dans le dossier config/packages nous avons accès à l'url du SMTP qui est dans le .env.

swiftmailer:
    url: '%env(MAILER_URL)%'
    spool: { type: 'memory' }

Dans le .env changez MAILER_URL :

MAILER_URL=smtp://localhost:1025

Qui enverra tout les mails sur le port 1025 qui est le port de réception de maildev.

Lancez Maildev :

Allez dans une invite de commande et tapez maildev, le message suivant apparaitra pour vous dire où envoyer le mail et où se situe l'interface.

MailDev webapp running at http://0.0.0.0:1080
MailDev SMTP Server running at 0.0.0.0:1025

Envoyez les mails via un controller Symfony :

Nous allons envoyer un mail sans format HTML et un mail avec format HTML.

Nous définissons donc un Swift_Message avec les différentes options nécessaires, et nous l'envoyons avec $swiftmailer qui est l'object Swift_Mailer passé en injection de dépendances.

<?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

class AppController extends AbstractController
{
    /**
     * @Route("/app", name="app")
     * On appel Swift_Mailer en injection de dépendances
     */
    public function app(\Swift_Mailer $swiftmailer): Response
    {
        //Premier mail sans format HTML, que du texte
        $message = (new \Swift_Message('Tutorial'))
            ->setFrom('from@email.fr')
            ->setTo('to@email.fr')
            ->setBody('Sending mail !', 'text/html');
        $swiftmailer->send($message);
        //Voici un mail avec un template HTML et des variables dynamique
        $message = (new \Swift_Message('Tutorial with template'))
            ->setFrom('from@email.fr')
            ->setTo('to@email.fr')
            ->setBody(
                $this->renderView(
                    'emails/tutorial.html.twig',
                    ['subject' => 'Tutorial with template', 'text' => 'Your text !', "datas" => [1, 
                     2, 3, 4, 5]]
                ),
                'text/html'
            );
        $swiftmailer->send($message);

        return $this->json('mail');
    }
}

Premier mail sans format HTML :

$message = (new \Swift_Message('Tutorial'))
            ->setFrom('from@email.fr')
            ->setTo('to@email.fr')
            ->setBody('Sending mail !', 'text/html');
        $swiftmailer->send($message);

Deuxième mail avec un template Twig pour un format HTML :

$message = (new \Swift_Message('Tutorial with template'))
            ->setFrom('from@email.fr')
            ->setTo('to@email.fr')
            ->setBody(
                $this->renderView(
                    'emails/tutorial.html.twig',
                    ['subject' => 'Tutorial with template', 'text' => 'Your text !', "datas" => [1, 
                     2, 3, 4, 5]]
                ),
                'text/html'
            );

Le template Twig avec du style pour montrer les possibilités : 

<h1 style="color: red;">
  {{ subject }}
</h1>
<p>
  {{ text }}
</p>
<ul>
  {% for li in datas %}
    <li>{{ li }}</li>
  {% endfor %}
</ul>

Nous avons donc un template dynamique avec les variables passées en paramètres de la fonction renderView du controller.

Reception des mails avec Maildev :

Rendez vous sur l'interface maildev sur localhost:1080 et lancez le script d'envoi des mails.

Mail texte : 

Swiftmailer texte

     

Mail HTML :

Swiftmailer html

Voici le résultat, vous pouvez séparer l'envoi dans un service pour pouvoir l'utiliser partout dans votre code facilement.

 

Ce tutoriel est fini, merci de l'avoir lu.

Articles récents :
Symfony

Crée le : lundi 1 novembre 2021

Javascript Framework JS

Crée le : dimanche 31 octobre 2021

Symfony

Crée le : mercredi 1 septembre 2021

Javascript Framework JS

Crée le : samedi 28 novembre 2020

Javascript SQL Framework JS

Crée le : dimanche 20 septembre 2020

Symfony Bugs

Crée le : dimanche 26 janvier 2020