Le composant mailer, sorti plus tôt cette année 2019, avait été annoncé lors du symfony live de lille par Fabien Potencier lui même.
Ce nouveau composant vient succéder au bundle Swift mailer qui continue à être maintenu à l’heure où j’écris cet article, mais ce nouveau composant Mailer va plus loin et propose plus de paramètres pour les mails.
Sur Symfony.com on retrouve toutes les explications pour bien configurer le composant mailer avec amazon, GCP de google, et d’autres fournisseurs, mais petit manquement côté ovh qui reste un des principaux hébergeurs.
Important : Cet article permet aussi d’améliorer la délivrabilité de vos mails, je vous explique comment ci-dessous.
Comment configurer mailer de symfony avec ovh ?
Installation de mailer
Dans votre projet symfony 5, l’installation du composant Mailer se fait via composer :
$ composer require symfony/mailer
Nous allons utiliser les deux classes suivantes pour envoyer nos emails : MailerIneterface et Email.
use Symfony\Component\Mailer\MailerInterface; use Symfony\Component\Mime\Email;
../..
Exemple de code pour l’envoi d’un mail via Mailer de symfony
$email = (new Email()) ->from('alepoutre@itroom.fr') ->to($user->getEmail()) //->cc('cc@example.com') //->bcc('bcc@example.com') //->replyTo('fabien@example.com') //->priority(Email::PRIORITY_HIGH) ->subject('Activation de compte sur mon appli !') //->text('Sending emails is fun again!') ->html('<p><a href="https://www2.itroom.fr/'.$user->getCleActivation().'">Activation de compte</a></p>'); $mailerInterface->send($email);
Jusqu’à là pas de problème, le code est facile à écrire et à utiliser, mais avant de le tester il faut finaliser la configuration : un compte mail existant et les paramètres dans le .env.
Création de l’expéditeur chez ovh
Pour une bonne délivrabilité de vos mails et ainsi éviter de tomber en SPAM, il est important d’utiliser la passerelle smtp de ovh dans le cas où ovh est le registrar du nom de domaine de votre expéditeur.
La passerelle que nous allons utiliser est : ssl0.ovh.net sur le port sécurisé : 587
Dans le manager OVH, rendez-vous sur la partie email de votre nom de domaine et créez un compte.
Configurer le MAILER_DSN dans le .env de symfony
Nous allons tout simplement ajouter le paramètre MAILER_DSN dans notre fichier .env.local (attention sur votre git est public, ne le mettez pas dans le .env, il y a votre mot de passe en clair 🙁
MAILER_DSN=smtp://symfony@it-room.fr:MonMotDePasse2019@ssl0.ovh.net:587
D’autres article trucs et astuces d’expert symfony.
Les problèmes que l’on peut rencontrer
Connection could not be established with host
Si l’on suit la documentation symfony.com, on utilise les classes suivantes : Mailer et EsmtpTransport
use Symfony\Component\Mailer\Mailer; use Symfony\Component\Mailer\Transport\Smtp\EsmtpTransport;
$transport = new EsmtpTransport('localhost'); $mailer = new Mailer($transport); ../.. $mailer->send($email);
Et là c’est le drame, pas de tâche d’écoute sur le port 25 du localhost…
Connection could not be established with host "tcp://localhost:25": Cannot assign requested address (99)
Environment variable not found: « MAILER_DSN »
Si l’on obtient cette erreur :
Environment variable not found: "MAILER_DSN"
Je vous invite a vérifier si la variable MAILER_DSN est bien présente dans votre .env.local et surtout si elle est correctement utilisée.
Configuration de symfony mailer avec ovh.
Message considéré comme spam par gmail
Si vous ne respectez pas les bonnes pratiques ci-dessus, vous risquez d’envoyer des emails qui ne seraient pas correctement paramétrés et qui seront considérés dangereux par google comme illustré ci-dessous.
Dans l’exemple ci-dessus, no-reply@… n’est pas connu du serveur qui effectue l’envoi. Il aurait fallu configurer le spf du domaine correctement pour autoriser ce serveur a envoyer des emails au nom de no-reply, ainsi que de configurer correctement le reverse dns, le dkim, ….
OU tout simplement suivre le tuto ci-dessus pour bien configurer le composant Mailer avec un compte ovh existant et la passerelle smtp.
Les limites d’ovh en terme d’envoi de mail
C’est bien d’envoyer des emails avec une bonne délivrabilité, mais gardez en tête que la solution proposé ci-dessus comporte bien des limites, vous ne pouvez pas créer votre serveur d’emailing 😉
En effet, ovh autorise le routage via ses passerelles smpt avec la limite de 200 emails par heure.
Bon, on est le 25 décembre 2019, alors Joyeux Noël à tous.