Outils pour utilisateurs

Outils du site


symfony4:email

Email

Swift Mailer

Swift Mailer est déjà inclus dans les dépendances du projet :

composer.json
{
    "require": {
        "symfony/swiftmailer-bundle": "^3.1",
    }
}

Si ce n'est pas le cas, faire ceci :

composer require symfony/swiftmailer-bundle

Configuration

La configuration se fait via la variable MAILER_URL dans le fichier .env.

Utiliser un SMTP générique

Par exemple celui de Skynet, qui ne requiert aucune authentification :

MAILER_URL=smtp://smtp.skynet.be:25?encryption=&auth_mode=

Utiliser le SMTP de Google

Pour que cela fonctionne il faut aller dans les paramètres du compte Gmail, dans la section Sécurité et activer Accès moins sécurisé des applications.

# Remplacer [ADRESSE-GMAIL] par l'adresse Gmail COMPLÈTE (nom@gmail.com)
# Remplacer [MOT-DE-PASSE] par le mot de passe de ce compte Gmail

MAILER_URL=smtp://smtp.gmail.com:465?encryption=ssl&auth_mode=login&username=[ADRESSE-GMAIL]&password=[MOT-DE-PASSE]

Chargement des classes

use \Swift_Mailer;
use \Swift_Message;
use \Swift_Attachment;

Envoi d'un email

Dans une fonction d'un contrôleur :

public function index(Request $request, \Swift_Mailer $mailer) {
 
    $message = (new \Swift_Message())
        ->setSubject('Sujet du message')
        ->setFrom(['envoyeur@mail.com' => 'Nom Envoyeur'])
        ->setTo('destinataire_1@mail.com')
        ->setBody(
            "Texte du message",
            'text/plain'
        );
 
    $mailer->send($message);
 
}

À partir d'un template Twig au format TXT :

        ->setBody(
            $this->renderView(
                // templates/hello/email.txt.twig
                'hello/email.txt.twig',
                ['name' => $name]
            ),
            'text/plain'
        )

Et un template au format HTML :

        ->setBody(
            $this->renderView(
                // templates/hello/email.html.twig
                'hello/email.html.twig',
                ['name' => $name]
            ),
            'text/html'
        )

Attacher un fichier au message ( :!: attention à la limite de taille :!: ) :

        ->attach(Swift_Attachment::fromPath('my-document.pdf'))

Résultat de l'envoi

Pour constater le succès ou l'échec de l'envoi : la méthode send retourne le nombre d'emails envoyés.

if($mailer->send($message) > 0) {
  // L'email a bien été envoyé
} else {
  // L'email n'a pas été envoyé
}
symfony4/email.txt · Dernière modification: 2020/05/31 13:47 (modification externe)