Dans une application Symfony 4, ce n’est pas rare d’avoir besoin d’envoyer des mails. Dans cet article, je vais vous montrer l’envoi de mail avec Swiftmailer.
Installation
Pour l’installer, il faut utiliser composer.
composer require symfony/swiftmailer-bundle
Configuration
Pour le configurer, rien de bien compliquer. Lors de l’installation du composant, un fichier a été crée config/packages/swiftmailer.yaml.
Maintenant on peut utiliser sur notre .env.local la variable MAILER_URL qui permet de mettre notre configuration SMTP. Dans cet article, je vais prendre un smtp que tout le monde peut se procurer facilement et gratuitement donc Gmail.
Gmail – Google

MAILER_URL=smtp://smtp.gmail.com:587?encryption=tls&username=USERNAME&password=PASSWORD
Je précise au cas où, exemple : test42@gmail.com
- USERNAME = test42
- PASSWORD = mot de passe pour accéder à votre boite mail.
MAILER_URL=smtp://smtp.gmail.com:587?encryption=tls&username=test42&password=toto
A Savoir
Sur Gmail, Google a désactivé un système « Accès moins sécurisé des applications » qui bloquera vos envois smtp, il faudra donc l’activer ce système avec ce lien : https://myaccount.google.com/u/1/security
Utilisation
Maintenant on va envoyer un mail via une commande Symfony (Lien vers l’article).
//src/Command/SendEmailCommand.php namespace App\Command; use Symfony\Component\Console\Command\Command; use Swift_Mailer; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; class SendEmailCommand extends Command { protected static $defaultName = 'send:email'; private $mailer; public function __construct(Swift_Mailer $mailer) { $this->mailer = $mailer; parent::__construct(); } protected function configure() { $this ->setDescription('Command for send self email') ; } protected function execute(InputInterface $input, OutputInterface $output) { $output->writeln([ 'Command Send Self Email', '============' ]); $message = (new \Swift_Message('Hello Email')) ->setFrom('test42@gmail.com') ->setTo('test42@gmail.com') ->setBody("Test Email", 'text/html') ; $this->mailer->send($message); $output->writeln('Successful you send a self email'); } }

Félicitation.
Maintenant, je vais expliquer quelques parties afin que vous puissiez approfondir votre envie d’envoyer des emails.
$message = (new \Swift_Message('Hello Email')) ->setFrom('test42@gmail.com') ->setTo('test42@gmail.com') ->setBody("Test Email", 'text/html') ;
Dans l’email nous avons envoyé uniquement un texte, mais si vous voulez envoyer un template Twig ou autre.
$message = (new \Swift_Message('Hello Email')) ->setFrom('test42@gmail.com') ->setTo('test42@gmail.com') ->setBody( $this->renderView( // templates/emails/registration.html.twig 'emails/registration.html.twig', ['name' => $name] ) , 'text/html') ;
A savoir, la fonction renderView est comme la fonction render qu’on utilise à la fin de nos fonctions contrôleur quand on veut afficher une page html. Cela vous permettra aussi de faire de joli mail avec un template twig et des variables que vous injectez.
Maintenant vous êtes un pro pour envoyer un mail via le smtp de google, à savoir que les autres smtp (mailjet, mailchimp etc.) sont aussi relativement simple à mettre en place.
