Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Symfony 6] Envoi de mail

Symfony mailer - Hostinger

    14 janvier 2024 à 11:22:41

    Bonjour,

    J'ai un soucis avec l'envoi d'email. J'ai une adresse sur Hostinger que j'ai ajoutée dans mon projet :

    Mon fichier services.yaml :

    parameters:
      sender_dsn: "contact@garage.deroonicola.eu"

    Dans mon fichier .env, j'ai ajouté ceci :

    MAILER_DSN=smtp://contact@garage.deroonicola.eu:MONMOTDEPASSE@smtp.hostinger.com:465

    Ensuite, dans mon contrôleur, j'envoie un mail de la manière suivante :

          // Get information
          $name = $form->get('name')->getData();
          $surName = $form->get('surName')->getData();
          $email = $form->get('email')->getData();
          $phone = $form->get('phone')->getData();
          $subject = $form->get('subject')->getData();
          $message = $form->get('message')->getData();
    
          // Send mail
          $mail = (new Email())
            ->from($email)
            ->to($this->getParameter('sender_dsn'))
            ->subject('Nouvel email de ' . $surName . ' ' . $name . ': sujet : ' . $subject)
            ->text(
              'Expéditeur : ' . $email . \PHP_EOL .
                'Nom : ' . $name . \PHP_EOL .
                'Prénom : ' . $surName . \PHP_EOL .
                'Téléphone : ' . $phone . \PHP_EOL .
                'Message : ' . \PHP_EOL . $message,
              'text/plain'
            );
          $mailer->send($mail);

    Je ne reçois pas l'email sur ma boîte Hostinger et dans les logs, je vois ceci :

    [Application] Jan 14 10:06:20 |DEBUG  | SECURI User was reloaded from a user provider. provider="Symfony\\Bridge\\Doctrine\\Security\\User\\EntityUserProvider" username="deroo.nicolas@gmail.com"
    [Application] Jan 14 10:06:20 |DEBUG  | SECURI Checking for authenticator support. authenticators=2 firewall_name="main"
    [Application] Jan 14 10:06:20 |DEBUG  | SECURI Checking support on authenticator. authenticator="App\\Security\\AppAuthenticator"
    [Application] Jan 14 10:06:20 |DEBUG  | SECURI Authenticator does not support the request.
    [Application] Jan 14 10:06:20 |DEBUG  | SECURI Checking support on authenticator. authenticator="Symfony\\Component\\Security\\Http\\Authenticator\\RememberMeAuthenticator"
    [Application] Jan 14 10:06:20 |DEBUG  | SECURI Authenticator does not support the request.
    [Application] Jan 14 10:06:20 |DEBUG  | PHP    User Warning: Configure the "curl.cainfo", "openssl.cafile" or "openssl.capath" php.ini setting to enable the CurlHttpClient
    [Application] Jan 14 10:06:22 |INFO   | MESSEN Sending message Symfony\Component\Mailer\Messenger\SendEmailMessage with async sender using Symfony\Component\Messenger\Bridge\Doctrine\Transport\DoctrineTransport alias="async" class="Symfony\\Component\\Mailer\\Messenger\\SendEmailMessage" sender="Symfony\\Component\\Messenger\\Bridge\\Doctrine\\Transport\\DoctrineTransport"
    [Application] Jan 14 10:06:22 |DEBUG  | DOCTRI Executing statement: INSERT INTO messenger_messages (body, headers, queue_name, created_at, available_at) VALUES(?, ?, ?, ?, ?) (parameters: array{"1":"O:36:\\\"Symfony\\\\Component\\\\Messenger\\\\Envelope\\\":2:{s:44:\\\"\\0Symfony\\\\Component\\\\Messenger\\\\Envelope\\0stamps\\\";a:1:{s:46:\\\"Symfony\\\\Component\\\\Messenger\\\\Stamp\\\\BusNameStamp\\\";a:1:{i:0;O:46:\\\"Symfony\\\\Component\\\\Messenger\\\\Stamp\\\\BusNameStamp\\\":1:{s:55:\\\"\\0Symfony\\\\Com...........

    Apparemment il y a un problème avec l'AuthenticatorAuthenticator does not support the request

    Merci d'avance si vous avez une piste.

    Bonne journée

    EDIT :

    J'ai suivi la procédure de ce lien mais l'erreur persiste : https://stackoverflow.com/questions/70677736/how-to-enable-curlhttpclient-for-wamp-in-php-7-4

    -
    Edité par Ninicocolalas 14 janvier 2024 à 11:40:10

    • Partager sur Facebook
    • Partager sur Twitter
      15 janvier 2024 à 16:58:17

      Salut

      C'est apparemment le même souci que dans cet autre sujet (edit : en fait, plutôt celui-ci), et en résumé, cela veut juste dire que l'URL utilisée n'est pas prévue pour fonctionner avec l'authentification, soit parce qu'elle n'est pas derrière un pare-feu (accès "public"), soit parce que ce n'est pas la route qui sert à l'authentification.

      -
      Edité par Ymox 15 janvier 2024 à 17:01:29

      • Partager sur Facebook
      • Partager sur Twitter
        17 janvier 2024 à 23:11:34

        Merci pour ta réponse.

        C'est bizarre car j'ai regardé dans l'historique de mes commits et il n'y a pas de différence avec ce que j'ai aujourd'hui et cela fonctionnait "à l'époque" :euh:

        Donc, oui, sûrement un problème de conf. mais je ne vois pas trop comment résoudre le problème... :(

        Ou ajouter un firewall 'public' ?

        Bonne soirée et encore merci

        -
        Edité par Ninicocolalas 17 janvier 2024 à 23:12:49

        • Partager sur Facebook
        • Partager sur Twitter
          18 janvier 2024 à 22:54:22

          Ce n'est pas un problème de configuration, si tu lis bien les sujets mentionnés et ce que j'ai écrit : c'est simplement que le pare-feu écrit désormais dans le journal comme quoi il n'a pas à travailler quand tu vas sur une route qu'il ne gère pas d'une manière ou d'une autre. C'est plus un petit souci du côté du code du firewall en lui-même, à mon avis.

          Je note néanmoins que je n'ai pas réussi à reproduire le souci dans mes projets, seulement quand j'ai voulu voir ce qu'il en était vraiment pour répondre au second sujet.

          • Partager sur Facebook
          • Partager sur Twitter
            19 janvier 2024 à 15:06:37

            Merci pour ta réponse.

            Honnêtement, je sèche malgré avoir lu les sujets que tu m'as donnés en lien...

            Quand tu parles du "code du firewall", à quel(s) fichier(s) fais tu référence ?

            Je joins mon security.yaml tout de même mais je ne pense que cela aidera :euh:

            security:
              password_hashers:
                Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface: "auto"
              providers:
                app_user_provider:
                  entity:
                    class: App\Entity\User
                    property: email
            
              firewalls:
                main:
                  lazy: true
                  provider: app_user_provider
                  custom_authenticator: App\Security\AppAuthenticator
                  logout:
                    path: app_logout
                    target: /
                    invalidate_session: true
                  remember_me:
                    secret: "%kernel.secret%"
                    lifetime: 604800
                    path: /
                    always_remember_me: true
            
              # Easy way to control access for large sections of your site
              # Note: Only the *first* access control that matches will be used
              access_control:
                - { path: ^/register, roles: ROLE_ADMIN }
                - { path: ^/hours, roles: ROLE_ADMIN }
                - { path: ^/service, roles: ROLE_ADMIN }
            
                - { path: ^/car/new, roles: ROLE_EMPLOYE }
                - { path: ^/car/\d+/edit, roles: ROLE_EMPLOYE }
                - { path: ^/car/\d+/delete, roles: ROLE_EMPLOYE }
                - { path: ^/opinion/moderate, roles: ROLE_EMPLOYE }
            
            when@test:
              security:
                password_hashers:
                  # By default, password hashers are resource intensive and take time. This is
                  # important to generate secure password hashes. In tests however, secure hashes
                  # are not important, waste resources and increase test times. The following
                  # reduces the work factor to the lowest possible values.
                  Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface:
                    algorithm: auto
                    cost: 4 # Lowest possible value for bcrypt
                    time_cost: 3 # Lowest possible value for argon
                    memory_cost: 10 # Lowest possible value for argon
            

            Merci d'avance et bon après-midi

            • Partager sur Facebook
            • Partager sur Twitter
              19 janvier 2024 à 17:37:56

              OK, après vérification, dans un projet que j'ai récemment mis à jour de Symfony 6.2 à 6.4, j'ai les messages que tu cites depuis plus ou moins le début — je ne me souvenais pas que les logs pouvaient finir par prendre autant de place.

              Et quitte à me répéter : ce n'est pas un problème de configuration (donc le fichier security.yaml, qui configure ceci, n'est pas en cause), c'est juste que ces inscriptions dans le journal se font désormais, avec le niveau debug, qui est un des sinon le plus "bas". debug, pas error ni même warn ou même pas info. Donc ce n'est pas une erreur. C'est une information de débogage.

              • Partager sur Facebook
              • Partager sur Twitter
                19 janvier 2024 à 18:21:00

                Merci pour ta réponse.

                Désolé de t'avoir fait répéter mais je ne vois vraiment pas où se situe le problème...

                Je creuse depuis pas mal de temps mais j'avoue que là, je commence à désespérer :(

                Même les réponses sur le Net sont assez diverses et ils parlent toujours de conf (d'où le services.yaml que j'avais joint) mais bon, comme ce n'est pas ça, je ne vois vraiment pas ce que cela peut être o_O

                Rien à voir mais est-ce dangereux de passer de la 6.2 à la 6.4 ? C'est un projet de formation en ligne (passage à l'exam le 30...).

                Merci d'avance

                • Partager sur Facebook
                • Partager sur Twitter
                  20 janvier 2024 à 0:44:38

                  OK, est-ce que par hasard tu n'as pas quelque chose qui correspondrait à une file d'attente des mails, comme dans une table de base de données ?

                  • Partager sur Facebook
                  • Partager sur Twitter
                    20 janvier 2024 à 10:22:36

                    Effectivement, j'ai la table messenger_messages qui est remplie à chaque essai d'envoi et les enregistrements sont les suivants :

                    https://ibb.co/dMG1zdk

                    Je ne sais même pas par quel processus elle se remplit car je n'y fais jamais référence dans mon code :euh:

                    EDIT : J'ai exécuté la commande php bin/console messenger:consume -vv et la table s'est vidée...

                    Dans mes logs, j'ai eu ceci :

                    09:40:42 CRITICAL  [messenger] Error thrown while handling message Symfony\Component\Mailer\Messenger\SendEmailMessage. Removing from transport after 3 retries. Error: "Handling "Symfony\Component\Mailer\Messenger\SendEmailMessage" failed: Connection could not be established with host "ssl://smtp.hostinger.com:465": stream_socket_client(): SSL operation failed with code 1. OpenSSL Error messages:\nerror:0A000086:SSL routines::certificate verify failed" ["class" => "Symfony\Component\Mailer\Messenger\SendEmailMessage","retryCount" => 3,"error" => """  Handling "Symfony\Component\Mailer\Messenger\SendEmailMessage" failed: Connection could not be established with host "ssl://smtp.hostinger.com:465": stream_socket_client(): SSL operation failed with code 1. OpenSSL Error messages:\n  error:0A000086:SSL routines::certificate verify failed  ""","exception" => Symfony\Component\Messenger\Exception\HandlerFailedException^ { …}]

                    Et dans mon .env, je vois MESSENGER_TRANSPORT_DSN qu'il faut peut-être modifier :

                    MESSENGER_TRANSPORT_DSN=doctrine://default?auto_setup=0

                    Ainsi que MAILER_DSN qui n'est peut-être pas correct...

                    MAILER_DSN=smtp://MOT_MAIL:MON_MOT_DE_PASSE@smtp.hostinger.com:465

                    Mais bon, du coup, je devrais ajouter la commande php bin/console messenger:consume -vv dans mon code ?... :o

                    EDIT 2 :

                    Bon j'ai réussi à envoyer un mail avec php bin/console messenger:consume -vv.

                    -> il n'y a pas d'erreur dans le .env

                    -> En revanche, l'email ne s'envoie que si j'indique dans le from l'adresse Hostinger :

                    $mail = (new Email())
                            ->from($this->getParameter('sender_dsn'))
                            ->to($this->getParameter('sender_dsn'))

                    Ce que je ne souhaite pas. Lorsque j'indique l'adresse de l'utilisateur dans le from, j'ai l'erreur suivante : not owned by contact@deroonicolas.eu :

                    Error: "Handling "Symfony\Component\Mailer\Messenger\SendEmailMessage" failed: Expected response code "250/251/252" but got code "553", with message "553 5.7.1 <deroo.nicolas@gmail.com>: Sender address rejected: not owned by user contact@deroonicola.eu"

                    Et j'ai toujours ce problème du mail qui s'enregistre dans la table mais qui ne s'envoie que si j'exécute la commande... :euh:



                    EDIT 3 :

                    Me revoilà! En commentant la ligne 16 du fichier messenger.yaml, l'email est bien envoyé :) :

                    framework:
                        messenger:
                            failure_transport: failed
                            transports:
                                async:
                                    dsn: '%env(MESSENGER_TRANSPORT_DSN)%'
                                    options:
                                        use_notify: true
                                        check_delayed_interval: 6000
                                    retry_strategy:
                                        max_retries: 3
                                        multiplier: 2
                                failed: 'doctrine://default?queue_name=failed'
                    
                            routing:
                                #Symfony\Component\Mailer\Messenger\SendEmailMessage: async
                                Symfony\Component\Notifier\Message\ChatMessage: async
                                Symfony\Component\Notifier\Message\SmsMessage: async
                    

                    Dernier problème : le fameux from qui veut absolument l'adresse de Hostinger :colere2:

                    -
                    Edité par Ninicocolalas 21 janvier 2024 à 13:47:00

                    • Partager sur Facebook
                    • Partager sur Twitter
                      21 janvier 2024 à 10:57:04

                      Bonjour, je me permets de faire un petit up :)
                      • Partager sur Facebook
                      • Partager sur Twitter
                        22 janvier 2024 à 12:01:54

                        Plus personne ne veut de moi ? :'( :)
                        • Partager sur Facebook
                        • Partager sur Twitter
                          22 janvier 2024 à 19:47:25

                          Regarde dans la documentation de Hostinger s'ils ne bloquent pas l'envoi avec une autre adresse que celle de ton domaine, pour éviter le spam. Chez OVH, j'ai dû utiliser l'en-tête Reply-To pour y mettre l'adresse de l'auteur en cas de prise de contact par formulaire, mais laisser From comme étant une adresse du domaine.

                          -
                          Edité par Ymox 22 janvier 2024 à 19:48:23

                          • Partager sur Facebook
                          • Partager sur Twitter
                            2 février 2024 à 12:54:27

                            Merci c'était bien ça (désolé pour le retard).

                            Du coup, je suis passé par un ReplyTo aussi

                            Merci encore 

                            • Partager sur Facebook
                            • Partager sur Twitter

                            [Symfony 6] Envoi de mail

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