Mautic 6.0.6 — Campaign emails not sending + “The --batch-limit option does not exist” error

Your software
My Mautic version is:v6.0.6
My PHP version is:8.2
My Database type and version is:Mariadb

Your problem
My problem is:
:fire: Main Issue

My campaigns are active, contacts appear correctly in the campaign, but no campaign email ever sends.

Whenever the cron job executes:

php bin/console mautic:messages:send

I consistently receive this error:

Symfony\Component\Console\Exception\RuntimeException:
The "--batch-limit" option does not exist.

This happens even though --batch-limit appears in examples in the official documentation and in many community posts.


:pushpin: Cron Jobs Configured

*/10 * * * * docker exec contenedor-mautic php /var/www/html/bin/console mautic:segments:update --batch-limit=300
*/5  * * * * docker exec contenedor-mautic php /var/www/html/bin/console mautic:campaigns:trigger
*/15 * * * * docker exec contenedor-mautic php /var/www/html/bin/console mautic:messages:send --batch-limit=200
*/5  * * * * docker exec contenedor-mautic php /var/www/html/bin/console mautic:campaigns:update

Segments update correctly.
Campaigns update correctly.
The only failing command is mautic:messages:send.


:puzzle_piece: Relevant Log Output

Every 15 minutes, the same error appears:

[mautic.ERROR] Symfony\Component\Console\Exception\RuntimeException:
The "--batch-limit" option does not exist.

Followed by:

[mautic.WARNING] Command `mautic:messages:send` exited with status code 1

No queue is created.
No message is processed.
No “Sending X emails” log entry appears.


:blue_square: Actual Effects

  • The “Send Email” steps inside the campaign never execute.

  • The campaign does not send the first email.

  • The message queue is never populated.

  • Contacts enter the campaign but remain stuck at the first step.


:brain: Technical Notes (possible core issue)

After researching similar reports in 6.0.6 and 6.0.7:

  • The messages:send command may not support --batch-limit anymore.

  • Several users report that campaign events are not enqueueing emails at all.

  • The behavior seems consistent with a regression in the Campaign Execution Helper.

This aligns 100% with what’s happening in my environment.


:red_question_mark: Questions for the community

  1. Can someone confirm whether this is a known bug in Mautic 6.0.6?

  2. Is there an official hotfix, patch, or PR for the messages:send parameter issue?

  3. Should I downgrade to 6.0.5 or upgrade to 6.1.x to fix this?

  4. Is anyone else experiencing failed campaign email execution + missing message queues?


These errors are showing in the log:
Every 15 minutes, the same error appears:

[mautic.ERROR] Symfony\Component\Console\Exception\RuntimeException:
The "--batch-limit" option does not exist.

Followed by:

[mautic.WARNING] Command `mautic:messages:send` exited with status code 1

I consistently receive this error:

Symfony\Component\Console\Exception\RuntimeException:
The "--batch-limit" option does not exist.

This happens even though --batch-limit appears in examples in the official documentation and in many community posts.

Steps I have tried to fix the problem:

I think batch limit doesn’t exist in mautic 6 because you send all at once or use a worker to send the batches.

So you have 2 commands to send the emails to the queue:

  • /bin/console mautic:messages:send ← this one sends campaign emails and sms
  • /bin/console mautic:broadcasts:send ← this one sends the segment emails and sms

After you configure your queue manager (>configuration>queue manager), all those messages end in a table called messenger_messages and a worker, will send the messages.

The worker is a 3rd cron job, and there you configure the cadence:

  • /bin/console messenger:consume email --limit=100 --time-limit=1 --memory-limit=1096M ← where limit is the total messages sent per batch, time limit is the duration of the batch and memory limit how much ram you are assigning to the process

This changed in mautic 5 and is how emails/sms will be send from now on.
If you have more questions, feel free to ask.

Thanks a lot for the clarification — this helps me understand what’s actually happening.

So if I understand correctly:

:white_check_mark: 1. --batch-limit was removed in Mautic 6

This explains the crash. My cron was still using the old parameter, so the command failed before enqueueing anything.

:white_check_mark: 2. Mautic 6 uses Messenger as the mail queue engine

Meaning that campaign emails go through mautic:messages:send, which only queues the messages.

:white_check_mark: 3. The actual sending now depends on a Messenger worker

And without the worker running, nothing gets delivered — exactly what I’m seeing.

:puzzle_piece: To confirm, these should now be the 3 required cron jobs:

(1) Segments

php bin/console mautic:segments:update

(2) Campaign events → enqueue emails

php bin/console mautic:campaigns:trigger
php bin/console mautic:messages:send

(3) Messenger worker → actually send emails

php bin/console messenger:consume email --limit=100 --time-limit=1 --memory-limit=1024M

And optionally:

php bin/console mautic:broadcasts:send

for segment emails.


Questions to make sure my setup is correct:

  1. Should the worker run continuously (as a service), or is it safe to run it via cron every minute?

  2. In Docker environments, is there a recommended way to keep the messenger worker alive? Supervisor? Systemd? A dedicated container?

  3. Does messenger:consume email handle both campaign emails and segment broadcasts, or do they still need separate consumers?

  4. Are there any recommended memory/time settings for high-volume environments?


Thanks again for your help — this finally explains why nothing was sending.

If you can confirm the correct cron design for Docker setups, that would help me (and others) avoid misconfiguration.

I don’t like to have the worker running continuosly because it can not stop and create new workers until the server crashes, I did a full guide to use a file to manage the workers, but not all think like me, there are several guides stating otherwise.

@joeyk have a great video guide (can’t find it now), probably he can help us with the link

and this is my (outdated) guide to prevent workers stacking: Configuring Doctrine for Email Queue Management in Mautic with Cron Jobs - Mautic Knowledgebase ← If you want to go this way, I can update it

****

About your answer, yes you are correct with all you wrote.

Hi, I have a working Mautic installation running in a Docker container (mautic/mautic:latest) connected to a MariaDB database that holds all my previous data (over 200 tables, many prefixed with bak_).

The problem is that I cannot log in with my only user (Abraham) despite trying several methods to reset the password (direct SQL UPDATE to the users table, generating a password_hash() with BCRYPT and updating it manually, clearing the cache, restarting the container, etc). Login still fails silently without error.

When I try to use the CLI command:

php bin/console mautic:user:change-password Abraham

I get the following response:

There are no commands defined in the "mautic:user" namespace.

Also tried mautic:user:create, with the same result.

:red_question_mark: My specific questions:

  1. Are the latest versions of Mautic (like the current mautic/mautic:latest) no longer including mautic:user:* CLI commands?

  2. What is the recommended way to reset a user password today if I can’t access the web interface but have full database access?

  3. After updating the users.password field with a new BCRYPT hash, are there any extra steps Mautic expects to validate the login?

  4. Can you confirm whether the missing mautic:user:* namespace is expected behavior in recent versions, or is it a sign of a broken or incomplete installation?

Thanks a lot for your help. I’m trying to avoid reinstalling Mautic from scratch since the existing database contains critical configurations, forms, campaigns, emails, and contacts.