Symfony SwiftMailer — Et si je t’envoi un mail ?

Gary Houbre
Aug 14 · 3 min read

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');
}
}
Vous avez reçu votre propre mail .. 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')
;

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.

Pas trop difficile ;)

Publié à l’origine sur https://blog.gary-houbre.fr le 14 août, 2019.

Gary Houbre

Written by

Développeur web depuis 5 ans, je me suis spécialisé sur le développement web avec le language PHP et les framework Symfony et Laravel.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade