Database queue for email in Mautic 5 doesn't work as expected

You have 3 key commands in this

2 are for sending the messages to the queue and 1 is for actually sending the queue

For filling the queue:

php bin/console mautic:campaigns:trigger
This will send campaign events into the queue

php bin/console mautic:campaigns:trigger
This will send segmented emails and SMS into the queue

php bin/console messenger:consume email
This will process the queue and actually send the emails and sms

Here is some extra info about the consume command (thanks ChatGPT)

php bin/console messenger:consume email — options (the useful manual)

Syntax (core):
messenger:consume [-l|--limit] [-f|--failure-limit] [-m|--memory-limit] [-t|--time-limit] [--sleep] [-b|--bus] [--queues] [--no-reset] [<receivers>...]

Options you actually use

  • --limit=NUM → process NUM messages then exit (good for cron).

  • --time-limit=SECONDS → run up to SECONDS (finishes current message, then exits).

  • --memory-limit=128M|256M|... → exit if memory exceeds that (prevents slow leaks).

  • --failure-limit=NUM → stop after NUM failed messages (useful when something is broken).

  • --sleep=SECONDS → when queue is empty, wait this long before polling again (CPU-friendly).

  • --queues=NAME1,NAME2 → only consume specific queue(s) if the transport supports it.

  • --bus=BUSNAME → force which bus receives the messages (rare in Mautic setups).

  • --no-reset → don’t reset services after each message (can leak state; only use if you really know why).

Two Mautic-specific “gotchas” (important)

  • If you run messenger:consume from cron, Mautic docs recommend you include at least one of: --memory-limit, --limit, or --time-limit (otherwise it becomes a long-lived process).

  • The receiver name email is just the transport/receiver. For “WhatsApp”, it would be whatever receiver you configured (e.g. whatsapp). Messenger doesn’t care what it sends — it just consumes that receiver.