====== Email ====== Liens: * Doc: [[https://symfony.com/doc/current/email.html]] * Doc de SwiftMailer: [[https://swiftmailer.symfony.com/docs/messages.html]] * [[https://codereviewvideos.com/course/symfony-4-beginners-tutorial/video/send-email-symfony-4]] * [[https://kinsta.com/fr/base-de-connaissances/serveur-smtp-gratuit/|Comment utiliser le serveur SMTP gratuit de Google pour envoyer des emails]] ===== Swift Mailer ===== **Swift Mailer** est déjà inclus dans les dépendances du projet : { "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é }