1 pièce(s) jointe(s)
[5.x]Composant Mailer: impossible d'envoyer un mail avec un template
Bonjour à tous,
je rencontre un problème tout bête mais je ne parviens pas à comprendre d'où il vient.
Contexte :
Je suis en train de mettre en place un système d'activation de compte par mail.
- L'utilisateur créé son compte via un formulaire
- Un mail contenant un token lui est envoyé
- Lors du click sur le lien du mail, le compte est validé si le token est identique
Problème :
Pour envoyer le mail, j'ai créé un service que j'appelle dans mon controlleur.
J'ai tout d'abord suivi la documentation en utilisant la classe
Code:
Symfony\Component\Mime\Email
.
Tout a bien fonctionné jusqu’à ce que je veuille utiliser des templates de mail (class Symfony\Bridge\Twig\Mime\TemplatedEmail).
J'ai suivi la doc symfony sur l'envoi de template de mail.
Dans mon controlleur j'envoi toute les données nécessaire à mon service de mail, dont le path vers le fichier de template.
Et l'envoi échoue en m'indiquant qu’apparemment le template n'est pas trouvé.
Je reçois l'erreur suivante :
Pièce jointe 548834
Cette erreur est levé quand il n'y a ni texte, ni html dans le corps du message.
J'ai testé avec différents path mais rien n'y a fait.
Est ce que quelqu'un a déja rencontré ce problème bizarre?
Merci ;)
Controlleur
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
* @Route("/registration", name="registration", methods={"POST"})
*/
public function registration(Request $request, UserPasswordEncoderInterface $encoder, EntityManagerInterface $manager, Validator $validator, Mailgun $mailgun)
{
$data = json_decode($request->getContent());
$token = bin2hex(random_bytes(24));
$user = new User();
$user->setEmail($data->email)
->setFirstName($data->firstname)
->setLastName($data->lastname)
->setRoles(['ROLE_USER'])
->setCreatedAt(new \DateTime())
->setActivated(false)
->setToken($token)
->setPassword($data->password)
->setPasswordConfirmation($data->password_confirmation);
$error = $validator->validate($user);
if (!empty($error)) {
return new JsonResponse($error, 400);
}
$mailgun->send('ed@gmail.com', 'Activation du compte', 'mail/activate_account.html.twig', ['token' => $token]);
$user->setPassword($encoder->encodePassword($user, $data->password));
$manager->persist($user);
$manager->flush();
return new JsonResponse('User registered', 200);
} |
Service
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
namespace App\Service;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Component\Mailer\Bridge\Mailgun\Transport\MailgunApiTransport;
use Symfony\Component\Mailer\Mailer;
use Symfony\Component\Mime\Email;
class Mailgun
{
private Mailer $mailer;
public function __construct()
{
$this->mailer = new Mailer(new MailgunApiTransport($_ENV['MAILGUN_KEY'], $_ENV['MAILGUN_DOMAIN'], $_ENV['MAILGUN_REGION']));
}
public function send(string $to, string $subject, $template, array $var) :void
{
$mail = (new TemplatedEmail())
->from('noreply@domain.com')
->to($to)
->priority(Email::PRIORITY_HIGH)
->subject($subject)
->htmlTemplate($template)
->context($var);
$this->mailer->send($mail);
}
} |