If you've installed MailWizz and your campaigns are stuck at "pending sending" or never leave the queue, the culprit is almost always missing or misconfigured cron jobs. MailWizz doesn't send emails the moment you click a button. Instead, it queues everything and relies on scheduled background tasks (crons) to do the heavy lifting. Let's get them set up properly so your campaigns fire on time, every time.

Why MailWizz Needs Cron Jobs

MailWizz splits its background work into several separate commands. Each one handles a different part of the email lifecycle:

  • Send campaigns — the core job that actually delivers your queued emails.
  • Bounce handler — checks your bounce mailbox and marks failed addresses.
  • Feedback loop (FBL) handler — processes spam complaint reports.
  • Email box monitor — reads reply mailboxes for auto-responder tracking.
  • Process delivery/bounce/complaint logs — keeps your lists clean.
  • Hourly and daily maintenance — housekeeping tasks like sending scheduled reports.

Without these, your list works fine but nothing gets delivered. Good news: on Hostiso's NVMe-backed servers with CloudLinux LVE isolation, these cron processes get consistent resources and won't get starved by noisy neighbors.

The Cron Commands You Need

First, you need the correct path to PHP and to your MailWizz installation. A typical set of commands looks like this (adjust the paths to match your account):

* * * * * /usr/local/bin/php -q /home/USERNAME/domains/yourdomain.com/public_html/apps/console/console.php send-campaigns >/dev/null 2>&1

* * * * * /usr/local/bin/php -q /home/USERNAME/domains/yourdomain.com/public_html/apps/console/console.php bounce-handler >/dev/null 2>&1

* * * * * /usr/local/bin/php -q /home/USERNAME/domains/yourdomain.com/public_html/apps/console/console.php feedback-loop-handler >/dev/null 2>&1

* * * * * /usr/local/bin/php -q /home/USERNAME/domains/yourdomain.com/public_html/apps/console/console.php process-subscribers >/dev/null 2>&1

0 * * * * /usr/local/bin/php -q /home/USERNAME/domains/yourdomain.com/public_html/apps/console/console.php hourly >/dev/null 2>&1

0 0 * * * /usr/local/bin/php -q /home/USERNAME/domains/yourdomain.com/public_html/apps/console/console.php daily >/dev/null 2>&1

Replace USERNAME and yourdomain.com with your real values. Notice the first four commands run every minute (* * * * *), while hourly runs at the top of each hour and daily runs once at midnight.

Pro Tip: The exact console path is shown right inside MailWizz. Go to Backend → Settings → Cron — MailWizz lists the recommended commands with your correct paths already filled in. Copy them straight from there to avoid typos.

Finding Your Correct PHP Path

On LiteSpeed servers the PHP binary is usually /usr/local/bin/php, but if you run multiple PHP versions you may need something like /usr/local/php82/bin/php. If in doubt, our 24/7 support team can confirm the exact path for your account in seconds.

Adding the Cron Jobs in DirectAdmin

  1. Log in to DirectAdmin.
  2. Under Advanced Features, click Cron Jobs.
  3. In the fields for minute, hour, day, month, and weekday, enter the schedule. For the every-minute jobs set the minute field to * and leave the rest as *.
  4. Paste the full command (everything after the schedule) into the Command box.
  5. Click Add.
  6. Repeat for each of the six commands above.

DirectAdmin also lets you toggle email notifications for cron output. Keep >/dev/null 2>&1 at the end of each command to silence routine output and avoid an inbox full of cron reports.

Adding the Cron Jobs in cPanel

  1. Log in to cPanel.
  2. Scroll to the Advanced section and open Cron Jobs.
  3. Under Add New Cron Job, use the Common Settings dropdown or manually set the timing fields. For every-minute jobs, set every field to *.
  4. Paste the command (the part starting with /usr/local/bin/php...) into the Command field.
  5. Click Add New Cron Job.
  6. Repeat for all six commands.

To stop cPanel from emailing you every minute, either clear the "Cron Email" field at the top or keep the >/dev/null 2>&1 redirect on each line.

Caution: Some shared environments limit how often crons can run. If per-minute crons aren't allowed, the closest allowed interval (for example, every 2 minutes) will still work — campaigns simply process in slightly larger batches. Our Shared Hosting plans support minute-level crons for MailWizz out of the box.

Verifying the Crons Are Working

After adding the jobs, test that sending actually happens:

  1. Create a small test campaign and schedule it to send immediately.
  2. Wait 1–2 minutes and refresh the campaign screen. The status should move from pending sending to processing, then sent.
  3. Check Backend → Misc → Cron jobs history (or the delivery logs) to confirm the send-campaigns command ran.

If nothing moves, run the command manually via SSH to see any errors:

/usr/local/bin/php -q /home/USERNAME/domains/yourdomain.com/public_html/apps/console/console.php send-campaigns

This prints output directly and quickly reveals path mistakes, permission issues, or PHP version problems.

Scaling Up: Parallel Sending for Large Lists

Sending to tens of thousands of subscribers? MailWizz supports running multiple send-campaigns processes in parallel by appending options like --campaigns_in_parallel and --subscribers_at_once. You configure the base values under Settings → Cron → Campaigns, then let the single per-minute cron manage the workers. This is where a Cloud VPS shines — more CPU and RAM means faster throughput and higher send rates without hitting shared limits.

Pro Tip: Pair MailWizz with Redis object caching (available on Hostiso) to speed up repeated database lookups during large sends. It noticeably reduces load when processing big subscriber batches.

Frequently Asked Questions

My campaigns say "sending" but never finish. What's wrong?

This usually means the send-campaigns cron started but was interrupted, or a previous process is stuck. Check the cron history in MailWizz and confirm the job runs every minute. If a campaign is frozen, use Campaigns → Bulk actions to mark it as sending again, or contact support to clear a locked process.

Do I need a separate cron for autoresponders?

No. Autoresponders and regular campaigns are both handled by the send-campaigns command. As long as that per-minute cron is active, your autoresponder sequences fire on schedule automatically.

Why am I getting cron emails every single minute?

Your cron commands are missing the output redirect. Add >/dev/null 2>&1 to the end of each line, or clear the cron notification email field in your control panel. That silences the routine output while still letting the jobs run.

Once your crons are running smoothly, MailWizz becomes a set-and-forget sending engine. Schedule your campaigns, and the background jobs handle delivery, bounces, and cleanup on their own — backed by the fast NVMe storage and reliable cron scheduling on Hostiso.