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 :

Nom : Capture d’écran 2020-03-24 à 15.13.42.png
Affichages : 581
Taille : 54,7 Ko

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 : 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);
}
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
 
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);
    }
}