Bonjour à tous,

J'ai un souci avec l'envoi de mail sur Symfony. En effet, je suis sur Symfony 6.2.6 (je sais, cette version n'est plus maintenue).
Lorsque je travaille en local (dev), je suis obligé de lancer la commande :

symfony console messenger:consume async -vv

pour exécuter l'envoi des mails. Cependant, en production également, les mails ne partent pas sans cette commande.
Je dispose d'une adresse mail (fournie par mon hébergeur Hostinger).

4 réponses


lamigne
Réponse acceptée

C'est totalement normal et c'est le fonctionnement du composant messenger :)

https://symfony.com/doc/current/messenger.html#deploying-to-production
La doc t'explique que c'est le taff d'un worker de "consume" les files d'attentes (ici tes mails), le worker c'est un petit programme qui va être lancé et, pour le cas présent, qui va regarder en direct l'arrivée des nouveaux éléments en file d'attente afin de les traiter au plus vide et dans l'ordre.

Ils te conseillent d'utiliser un manager de processus tel que Supervisor ou systemd, qui permettront de relancer automatiquement le worker si il s'arrête (à l'inverse de ton ordi dev en local où tu vas manuellement entrer la commande messenger:consume). A voir si ton hébergeur te permet de faire de telles choses, ça c'est la partie linux / gestion serv.

Dans le cas contraire, si ton app te le permet (d'un point de vu fréquentation, ou que sais-je), gérer et envoyer les mails de façon synchrone est une possibilité

eltharin
Réponse acceptée

tu peux bypasser messenger en modifiant la config pour les mails, dans le fichier config/packages/messenger.yaml : [

framework:
        messenger:    
            failure_transport: failed

            transports:
                # https://symfony.com/doc/current/messenger.html#transport-configuration
                async:
                    dsn: '%env(MESSENGER_TRANSPORT_DSN)%'
                    options:
                        use_notify: true
                        check_delayed_interval: 60000
                    retry_strategy:
                        max_retries: 3
                        multiplier: 2
                sync: 'sync://'
                failed: 'doctrine://default?queue_name=failed'
                # sync: 'sync://'

            routing:
                Symfony\Component\Mailer\Messenger\SendEmailMessage: sync
                Symfony\Component\Notifier\Message\ChatMessage: async
                Symfony\Component\Notifier\Message\SmsMessage: async

                # Route your messages to the transports
                # 'App\Message\YourMessage': async

il faut ajouter l'élément sync: 'sync://' et l'assigner pour le SendMailMessage en remplacant async par sync

Ah je comprends mieux, merci. Mais je mon problème principal est sur l'hébergeur Hostinger, je ne sais pas comment je peux configurer cela. Si vous avez une idée je suis preneur. Merci pour votre aide.

c'est parfait c'est exactement ce que je voulais. Merci beaucoup à vous deux.