Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to send email from Symfony without running consume command?

I want to send email from Symfony 6.2. I followed the documentation and made this code (gmail address is example, I'm using own domain name):

$email = (new Email())
    ->from("[email protected]")
    ->to("[email protected]")
    ->subject("Here is my subject")
    ->html("<p>Here is the content</p>");

$mailer->send($email);

I also edit the file .env.

  • I changed MESSENGER_TRANSPORT_DSN from doctrine://default?autosetup=false to doctrine://default
  • I added MAILER_DSN=smtp://from%40gmail.com:[email protected]

And, actually it doesn't send email automatically, Symfony say they are queued. And it's right as it created the table with messages, put queued on them. I should use the command php bin/console messenger:consume -vv async and let it running to see email be sent.

Here is my config/packages/messenger.yaml file:

framework:
    messenger:
        failure_transport: failed
        transports:
            async:
                dsn: '%env(MESSENGER_TRANSPORT_DSN)%'
                options:
                    use_notify: true
                    check_delayed_interval: 60000
                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

How can I make email be sent from php (or at least not necessary to use the command)?

like image 396
Elikill58 Avatar asked Oct 20 '25 00:10

Elikill58


1 Answers

Symfony 6 now sends email via messenger queuing. This is a better approach, however if you would like to disable this functionality and send email directly, you can comment out (or remove) Symfony\Component\Mailer\Messenger\SendEmailMessage: async like so:

# config/packages/messenger.yaml
routing:
    # Symfony\Component\Mailer\Messenger\SendEmailMessage: async
    Symfony\Component\Notifier\Message\ChatMessage: async
    Symfony\Component\Notifier\Message\SmsMessage: async
like image 109
Bossman Avatar answered Oct 21 '25 15:10

Bossman