Partage
  • Partager sur Facebook
  • Partager sur Twitter

Mail envoyé par Symfony, mais pas reçu

    27 janvier 2024 à 19:20:11

    Bonjour à tous !

    Je suis confronté un étrange problème

    En envoyant un mail via un formulaire de contact que j'ai fait, les emails arrivent bien dans la boîte

    Par contre les e-mails envoyés via le bundle verify-email-bundle n'arrive pas.. Pourtant le profiler m'indique que le mail est parti

    Avez-vous une piste ?

    Merci

    • Partager sur Facebook
    • Partager sur Twitter
      1 février 2024 à 17:15:16

      Malgré plusieurs jours de recherches, rien de concluant :/

      • Partager sur Facebook
      • Partager sur Twitter
        2 février 2024 à 9:56:27

        Bonjour, as-tu consulté des spams ?
        • Partager sur Facebook
        • Partager sur Twitter
          3 février 2024 à 0:41:59

          Asmitta a écrit: >

          Oui évidemment c'est la première chose que j'ai faite J'ai même attendu et regarder au cas où y aurait du retard

          • Partager sur Facebook
          • Partager sur Twitter
            12 février 2024 à 16:31:39

            Bonjour,

            Pourrais-tu nous montrer ton code, comment tu effectue t'es envoie de mail ?
            Tu as essaye de debuger ton code avec la console de dev après l'envoie de ton mail ?
            • Partager sur Facebook
            • Partager sur Twitter
              13 février 2024 à 19:03:40

              Le code de base généré par les différents make
              RegistrationController.php
              <?php
              
              namespace App\Controller;
              
              use App\Entity\Membres;
              use App\Form\RegistrationFormType;
              use App\Security\EmailVerifier;
              use Doctrine\ORM\EntityManagerInterface;
              use Symfony\Bridge\Twig\Mime\TemplatedEmail;
              use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
              use Symfony\Component\HttpFoundation\Request;
              use Symfony\Component\HttpFoundation\Response;
              use Symfony\Component\Mime\Address;
              use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
              use Symfony\Component\Routing\Annotation\Route;
              use Symfony\Contracts\Translation\TranslatorInterface;
              use SymfonyCasts\Bundle\VerifyEmail\Exception\VerifyEmailExceptionInterface;
              
              class RegistrationController extends AbstractController
              {
                  private EmailVerifier $emailVerifier;
              
                  public function __construct(EmailVerifier $emailVerifier)
                  {
                      $this->emailVerifier = $emailVerifier;
                  }
              
                  #[Route('/register', name: 'app_register')]
                  public function register(Request $request, UserPasswordHasherInterface $userPasswordHasher, EntityManagerInterface $entityManager): Response
                  {
                      if ($this->getUser()) {
                          return $this->redirectToRoute('app_home');
                      }
                      $user = new Membres();
                      $form = $this->createForm(RegistrationFormType::class, $user);
                      $form->handleRequest($request);
              
                      if ($form->isSubmitted() && $form->isValid()) {
                          // encode the plain password
                          $user->setPassword(
                              $userPasswordHasher->hashPassword(
                                  $user,
                                  $form->get('plainPassword')->getData()
                              )
                          );
              
                          $entityManager->persist($user);
                          $entityManager->flush();
              
                          // generate a signed url and email it to the user
                          $this->emailVerifier->sendEmailConfirmation('app_verify_email', $user,
                              (new TemplatedEmail())
                                  ->from('sym@identifiant.odns.fr')
                                  ->to($user->getEmail())
                                  ->subject('Please Confirm your Email')
                                  ->htmlTemplate('registration/confirmation_email.html.twig')
                          );
                          // do anything else you need here, like send an email
              
                          //return $this->redirectToRoute('app_home');
                          $this->addFlash('success', 'votre compte a bien été créé');
                          return $this->render('registration/register_confirm.html.twig');
                      }
              
                      return $this->render('registration/register.html.twig', [
                          'registrationForm' => $form->createView(),
                      ]);
                  }
              
                  #[Route('/verify/email', name: 'app_verify_email')]
                  public function verifyUserEmail(Request $request, TranslatorInterface $translator): Response
                  {
                      $this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
              
                      // validate email confirmation link, sets User::isVerified=true and persists
                      try {
                          $this->emailVerifier->handleEmailConfirmation($request, $this->getUser());
                      } catch (VerifyEmailExceptionInterface $exception) {
                          $this->addFlash('verify_email_error', $translator->trans($exception->getReason(), [], 'VerifyEmailBundle'));
              
                          return $this->redirectToRoute('app_register');
                      }
              
                      // @TODO Change the redirect on success and handle or remove the flash message in your templates
                      $this->addFlash('success', 'Your email address has been verified.');
              
                      return $this->redirectToRoute('app_register');
                  }
              }
              Alors que la page contact fonctionne parfaitement 
              ContactController.php
              <?php
              
              namespace App\Controller;
              
              use App\Form\ContactType;
              use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
              use Symfony\Component\HttpFoundation\Request;
              use Symfony\Component\HttpFoundation\Response;
              use Symfony\Component\Mailer\MailerInterface;
              #use Symfony\Component\Mime\Email;
              use Symfony\Bridge\Twig\Mime\TemplatedEmail;
              use Symfony\Component\Routing\Annotation\Route;
              
              class ContactController extends AbstractController
              {
                  #[Route('/contact', name: 'app_contact')]
                  public function index(Request $request, MailerInterface $mailer)
                  {
                      $form = $this->createForm(ContactType::class);
                      $form->handleRequest($request);
                      if($form->isSubmitted() && $form->isValid()) {
                          $contactFormData = $form->getData();
              //            $email = (new Email())
              //                ->from('hello@example.com')
              //                ->to($contactFormData['email'])
              //                ->subject('Demande de contact sur votre site de ' . $contactFormData['email'])
              //                ->text($contactFormData['name'] . ' vous a envoyé le message suivant: ' . $contactFormData['message']);
              //
              //            $mailer->send($email);
              
                          $email = (new TemplatedEmail())
                              ->from('sym@identifiant.odns.fr')
                              ->to($contactFormData['email'])
                              ->subject('Demande de contact sur votre site')
                              ->htmlTemplate('emails/contact.html.twig')
                              ->context([
                                  'name' => $contactFormData['name'],
                                  'message' => $contactFormData['message']
                              ]);
                          $mailer->send($email);
              
                          $this->addFlash('success', 'Votre message a été envoyé');
              //            return $this->redirectToRoute('app_home');
                      }
                      return $this->render('contact/index.html.twig', [
                          'form' => $form->createView()
                      ]);
                  }
              }

              -
              Edité par solodown 13 février 2024 à 19:04:49

              • Partager sur Facebook
              • Partager sur Twitter
                13 février 2024 à 22:28:00

                Salut

                Il me semble qu'il manque quelque chose comme $mailer->send() dans RegistrationController, non ? Il y a le commentaire qui dit de le faire, mais je ne vois pas l'action en elle-même…  :ange:

                Peut-on voir le code de EmailVerifier ?

                -
                Edité par Ymox 13 février 2024 à 22:29:06

                • Partager sur Facebook
                • Partager sur Twitter
                  13 février 2024 à 22:36:04

                  justement j'y ai pensé pense tu ^^ il y est

                  <?php
                  
                  namespace App\Security;
                  
                  use Doctrine\ORM\EntityManagerInterface;
                  use Symfony\Bridge\Twig\Mime\TemplatedEmail;
                  use Symfony\Component\HttpFoundation\Request;
                  use Symfony\Component\Mailer\MailerInterface;
                  use Symfony\Component\Security\Core\User\UserInterface;
                  use SymfonyCasts\Bundle\VerifyEmail\Exception\VerifyEmailExceptionInterface;
                  use SymfonyCasts\Bundle\VerifyEmail\VerifyEmailHelperInterface;
                  
                  class EmailVerifier
                  {
                      public function __construct(
                          private VerifyEmailHelperInterface $verifyEmailHelper,
                          private MailerInterface $mailer,
                          private EntityManagerInterface $entityManager
                      ) {
                      }
                  
                      public function sendEmailConfirmation(string $verifyEmailRouteName, UserInterface $user, TemplatedEmail $email): void
                      {
                          $signatureComponents = $this->verifyEmailHelper->generateSignature(
                              $verifyEmailRouteName,
                              $user->getId(),
                              $user->getEmail()
                          );
                  
                          $context = $email->getContext();
                          $context['signedUrl'] = $signatureComponents->getSignedUrl();
                          $context['expiresAtMessageKey'] = $signatureComponents->getExpirationMessageKey();
                          $context['expiresAtMessageData'] = $signatureComponents->getExpirationMessageData();
                  
                          $email->context($context);
                  
                          $this->mailer->send($email);
                      }
                  
                      /**
                       * @throws VerifyEmailExceptionInterface
                       */
                      public function handleEmailConfirmation(Request $request, UserInterface $user): void
                      {
                          $this->verifyEmailHelper->validateEmailConfirmation($request->getUri(), $user->getId(), $user->getEmail());
                  
                          $user->setIsVerified(true);
                  
                          $this->entityManager->persist($user);
                          $this->entityManager->flush();
                      }
                  }
                  



                  -
                  Edité par solodown 13 février 2024 à 23:07:08

                  • Partager sur Facebook
                  • Partager sur Twitter
                    14 février 2024 à 19:44:36

                    Est-ce que tu sais utiliser xdebug et un outil de débogage pas à pas ?

                    Il faut pour cela :

                    • xdebug pour ta version de PHP
                    • j'utilise personnellement avec les valeurs xdebug.mode = develop,debug et xdebug.start_with_request = "trigger"
                    • une extension dans le genre de xdebug helper
                    • un IDE qui permet de faire du débogage pas à pas
                    • un breakpoint au début de l'action

                    Et avec cela, quand tu arrives sur l'action, tu devrais pouvoir suivre l'exécution du code et voir plus précisément ce qui ne fonctionne pas.

                    • Partager sur Facebook
                    • Partager sur Twitter
                      14 février 2024 à 23:23:08

                      J'utilise phpstorm

                      Je vais voir ça je vais essayer je vous tiens au courant 

                      • Partager sur Facebook
                      • Partager sur Twitter
                        15 février 2024 à 23:40:01

                        Donc tu mettrais le breakpoint à la ligne 51 de RegistrationController.php c'est bien ça ?
                        • Partager sur Facebook
                        • Partager sur Twitter
                          16 février 2024 à 9:26:12

                          Pour s'assurer que les outils fonctionnent et sont bien configurés, je mettrais déjà un breakpoint au début de l'action — comme dit précédemment.

                          Et ensuite, je le mettrais (ou me rendrais) dans EmailVerifier, ligne 24, pour commencer. Pas à pas, voir ce qui est effectué, surtout entrer dans l'exécution de send() pour voir le résultat retourné mais actuellement non vérifié. Si tu n'y passes pas, c'est probablement qu'une des conditions n'est pas remplie, on aura le temps de voir laquelle et pourquoi.

                          -
                          Edité par Ymox 16 février 2024 à 9:27:02

                          • Partager sur Facebook
                          • Partager sur Twitter
                            18 février 2024 à 18:22:31

                            @Ymox tu utilises PhpStorm ? Car je galère un peu à faire fonctionner xdebug dessus
                            • Partager sur Facebook
                            • Partager sur Twitter
                              19 février 2024 à 17:04:36

                              Salut, tu as vérifié si l'envoie de mail n'est pas désactivé dans la config de ton projet en environnement de dev ?

                              # config/packages/mailer.yaml
                              when@dev:
                                  framework:
                                      mailer:
                                          dsn: 'null://null'

                              https://symfony.com/doc/current/mailer.html#disabling-delivery

                              -
                              Edité par Warps73 19 février 2024 à 17:14:58

                              • Partager sur Facebook
                              • Partager sur Twitter

                              While(true)

                                19 février 2024 à 20:58:09

                                Bon bah retournement de situation 

                                Pour des raisons personnelles j'ai dû changer mon site test de sous-domaine et... tout fonctionne !!!o_O

                                Donc le souci venait de la configuration c'est ça ?

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  20 février 2024 à 22:51:22

                                  J'arrive après la tempête, mais non, j'utilise VS Code.

                                  Au vu de ce que tu nous dis, je doute que changer de sous-domaine (mais pas de domaine) change quoi que ce soit. Si par contre tu as dû non seulement changer de sous-domaine, mais aussi de sous-domaine, alors oui, cela peut avoir une influence.

                                  -
                                  Edité par Ymox 25 mars 2024 à 17:19:04

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    20 février 2024 à 23:29:17

                                    J'avais fait un sous-domaine du "domaine" fournit avec o2switch, du coup j'ai créer un sous-domaine sur le véritable domaine et ça fonctionne
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      21 février 2024 à 19:44:54

                                      Donc c'est bien un changement de domaine, vu que tu est désormais sur sous-domaine.tonsite.truc et que tu étais avant sur sous-domaine.trucmuche.o2switch.chose.

                                      Pour des raisons de sécurité, les hébergeurs ne laissent plus nécessairement envoyer des mails quand l'adresse web et le nom de domaine d'envoi ne coïncident pas.

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        21 février 2024 à 22:38:41

                                        D'accord.... excusez moi pour la gène occasionné :/
                                        • Partager sur Facebook
                                        • Partager sur Twitter

                                        Mail envoyé par Symfony, mais pas reçu

                                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                        • Editeur
                                        • Markdown