Accueil » Développement » Symfony » Symfony SwiftMailer – Et si je t’envoi un mail ?
Symfony Swiftmailer

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

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')
;

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 😉 ?

Si vous voulez soutenir le blog, n’hésitez pas à me faire une donation, merci