Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
symfony4:email [2019/10/15 07:50] marclebrun [Envoi d'un email] |
— (Version actuelle) | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== 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 : | ||
- | |||
- | <code json composer.json> | ||
- | { | ||
- | "require": { | ||
- | "symfony/swiftmailer-bundle": "^3.1", | ||
- | } | ||
- | } | ||
- | </code> | ||
- | |||
- | Si ce n'est pas le cas, faire ceci : | ||
- | |||
- | <code bash> | ||
- | composer require symfony/swiftmailer-bundle | ||
- | </code> | ||
- | |||
- | ===== 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 : | ||
- | |||
- | <code> | ||
- | MAILER_URL=smtp://smtp.skynet.be:25?encryption=&auth_mode= | ||
- | </code> | ||
- | |||
- | ==== 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**. | ||
- | |||
- | <code> | ||
- | # 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] | ||
- | </code> | ||
- | |||
- | ===== Chargement des classes ===== | ||
- | |||
- | <code php> | ||
- | use \Swift_Mailer; | ||
- | use \Swift_Message; | ||
- | use \Swift_Attachment; | ||
- | </code> | ||
- | |||
- | ===== Envoi d'un email ===== | ||
- | |||
- | Dans une fonction d'un contrôleur : | ||
- | |||
- | <code php> | ||
- | 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); | ||
- | |||
- | } | ||
- | </code> | ||
- | |||
- | À partir d'un template **Twig** au format **TXT** : | ||
- | |||
- | <code php> | ||
- | ->setBody( | ||
- | $this->renderView( | ||
- | // templates/hello/email.txt.twig | ||
- | 'hello/email.txt.twig', | ||
- | ['name' => $name] | ||
- | ), | ||
- | 'text/plain' | ||
- | ) | ||
- | </code> | ||
- | |||
- | Et un template au format **HTML** : | ||
- | |||
- | <code php> | ||
- | ->setBody( | ||
- | $this->renderView( | ||
- | // templates/hello/email.html.twig | ||
- | 'hello/email.html.twig', | ||
- | ['name' => $name] | ||
- | ), | ||
- | 'text/html' | ||
- | ) | ||
- | </code> | ||
- | |||
- | Attacher un fichier au message : | ||
- | |||
- | <code php> | ||
- | ->attach(Swift_Attachment::fromPath('my-document.pdf')) | ||
- | </code> | ||
- | |||
- | ===== 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. | ||
- | |||
- | <code php> | ||
- | if($mailer->send($message) > 0) { | ||
- | // L'email a bien été envoyé | ||
- | } else { | ||
- | // L'email n'a pas été envoyé | ||
- | } | ||
- | </code> | ||