WooCommerce emails not sending: trigger, transport and delivery evidence.
WooCommerce Engineering 3–4 min read

WooCommerce Emails Not Sending: Fix Checklist

WooCommerce emails not sending? Check SMTP, spam blocks, order-status triggers and WP-Cron with this practical fix checklist.

READ THE ARTICLE

SMTP, spam filters, order-status triggers, and WP-Cron—fix the stack in order.

When WooCommerce emails are not sending, fix the stack in this order: (1) confirm the email is enabled for that order status under WooCommerce → Settings → Emails, (2) stop relying on PHP mail()—use authenticated SMTP or a transactional provider, (3) check spam/blocklists and “From” domain alignment (SPF/DKIM/DMARC), (4) verify WP-Cron or a real system cron is running, (5) test with a new order and a mail-logging plugin. Guest access after purchase: guest order links.


WooCommerce email flow from order event and email creation to authenticated mail transport and inbox delivery.
Check each stage separately: order status and notification, email generation, provider hand-off, then delivery evidence. A sent log does not guarantee that the message reached the inbox.

Symptoms vs root causes

What you seeLikely cause
No email for any orderSMTP / hosting mail blocked, or WP-Cron stuck
Only some statuses missingEmail type disabled or custom status without a template
Customer says “nothing arrived”Spam folder, wrong address, or provider deferral
Admin gets mail, customer does notCustomer template off; admin “New order” still on

Step 1: Confirm WooCommerce email settings

  1. Go to WooCommerce → Settings → Emails.
  2. Open Processing order, Completed order, New order (admin), and any custom templates you use.
  3. Ensure each needed email is Enabled, recipient fields are correct, and “From” name/address look legitimate.
  4. Place a test order (or use an order-actions “Resend” if available) after each change.

Custom order statuses often need their own email wiring. Check the notification’s trigger and enabled state after every custom-status change.

Step 2: Replace PHP mail with SMTP

Shared hosts frequently throttle or silently drop mail(). Use an authenticated SMTP plugin or transactional provider.

  • Match the From domain to a domain you control.
  • Publish SPF, DKIM, and preferably DMARC for that domain.
  • Send a test email to Gmail and a corporate inbox; check spam.

Step 3: Logging and conflict checks

Follow the evidence

WooCommerce generates transactional messages through WordPress wp_mail(). Where your installed version provides transactional email logs, check WooCommerce → Status → Logs → transactional-emails. Otherwise, inspect the SMTP provider or a mail logging plugin. A sent entry means the message was handed to the mail system; use provider delivery, bounce and deferral events to investigate whether it reached the recipient.

Reproduce conflicts on a staging copy before disabling a live store’s plugins or changing its theme. See the official WooCommerce email troubleshooting guide.

  • Inspect email generation logs and provider delivery, bounce and deferral events. A sent log confirms hand-off, not inbox placement.
  • On a staging copy, temporarily disable security or email-verification plugins that intercept checkout.
  • On staging, switch to a default theme if a custom checkout template breaks hooks.
  • Confirm the customer email on the order is valid.

Step 4: WP-Cron and queues

If emails queue but never leave, WP-Cron may be disabled (DISABLE_WP_CRON) without a system cron replacement, or a heavy site may starve cron. Set a real server cron to hit wp-cron.php, or use an Action Scheduler-aware host setup.

Do not “fix” deliverability with spoofed From addresses

Sending as @gmail.com from your server will fail SPF checks. Use your domain or the provider’s verified sender only.

After mail works: fix shipping surprises that trigger support mail storms (wrong shipping cost), and keep guest buyers able to view orders (guest order access).

FAQ: WooCommerce emails not sending

Why did WooCommerce emails suddenly stop?

Common triggers include expired SMTP credentials, a security-plugin update, or WP-Cron stopping after a migration.

Is WooCommerce broken if PHP mail works in a test plugin?

Not necessarily—check whether the specific order-status email is enabled and whether a custom status fires that template.

Do I need a paid email API?

Not always. Authenticated SMTP can work at low volume. Transactional APIs scale better and usually improve inbox placement.

Customers only miss Completed emails

Open the Completed order template and confirm it is enabled. Some stores stay on Processing and never flip to Completed—so the template never fires.

Next step

Need WooCommerce help beyond this fix?

Custom checkout, shipping, catalog rules, and store architecture—scoped delivery, not endless hourly tickets.

Add maksut.net as a preferred source on GoogleMy new articles can show up more often for you in Google’s Top Stories and AI Overviews.(opens in a new tab)

Send a note

Have a correction, suggestion or a different interpretation? Send me a note.

SEND A NOTE