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 : [email protected]
- 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('[email protected]') ->setTo('[email protected]') ->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('[email protected]') ->setTo('[email protected]') ->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('[email protected]') ->setTo('[email protected]') ->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.

Bonjour,
Quand je le fais, il me demande de passer un paramètre dans l’instanciation de mon Swift_Mailer, et tous les exemples que je trouve ne le stipulent pas…
public function __construct(\Swift_Mailer $mailer)
De plus, le use Swift_Mailer; me génère un warning…
Je suis en Symfony 4.3.
Une idée ?
Bien à vous,
Bonjour Aurélien,
Je vais vérifier de mon côté et je reviens vers toi dès que possible :).