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 : Sélectionner tout - Visualiser dans une fenêtre à part 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 :
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
Service
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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); } }
Partager