You are currently viewing Symfony SwiftMailer – Et si je t’envoi un mail ?

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

  • Post comments:2 commentaires
  • Temps de lecture :5 min de lecture

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');
    }
}
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('[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.

Pas trop difficile 😉 ?

Cet article a 2 commentaires

  1. Aurélien

    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,

    1. Gary Houbre

      Bonjour Aurélien,

      Je vais vérifier de mon côté et je reviens vers toi dès que possible :).

Laisser un commentaire