====== 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é
}