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).
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é
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.