Muhammad Basim
Pin for WooCommerce Emails Not Sending: A Diagnostic Order
WordPress

WooCommerce Emails Not Sending: A Diagnostic Order

Muhammad Basim
Muhammad Basim
·8 min read

Part of the comprehensive guide on: WordPress Email: Why Your Site’s Emails Never Arrive

WooCommerce Emails Not Sending

A large share of missing WooCommerce emails were never sent, because the event that triggers them never happened.

That is worth establishing before touching any mail configuration, because the two failures look identical to a customer and completely different to fix. A message that was never generated cannot be a deliverability problem, and hours get spent on DNS records for an order stuck at the wrong status.

Work through this in order. Each step rules out the next.


Step 1 — Was the email supposed to fire?

WooCommerce order emails are triggered by status transitions, not by orders existing.

Email Fires on Goes to
New order Payment received Admin recipients
Processing order Pending → Processing Customer
Completed order → Completed Customer
Order on hold → On hold Customer
Cancelled / Failed → Cancelled or Failed Admin
Refunded Refund processed Customer
Invoice / order details Manual send only Customer
Note to customer Adding a customer note Customer
Password reset, new account Account actions Customer

The most common cause of a missing "processing" email is an order that never left pending payment. That happens when a payment gateway does not confirm back to the site — a webhook or IPN that failed, was misconfigured, or was blocked.

Check WooCommerce → Orders and look at the status column. An order sitting at pending payment while the customer's card was charged is a gateway callback problem, not an email problem. The email will fire correctly the moment the status changes.

Also check the per-email toggles. WooCommerce → Settings → Emails lists every notification with an enable checkbox and a recipient field. The "New order" email has its own recipient list, separate from the site admin address, and a blank or stale address there is a frequent cause of admins not being notified while customers are fine.


Step 2 — Did WordPress try to send it?

Install an email logging plugin, then place a test order.

Three outcomes, each pointing somewhere different:

  • Nothing in the log. The email was never generated. Back to step 1, or a plugin conflict is suppressing it
  • Logged, marked failed. A transport problem. Step 3
  • Logged, marked sent. It left. The problem is delivery or filtering. Step 4

This single step is the difference between a ten-minute fix and an afternoon. It is also the thing most guides put last, after the DNS work.

If nothing is logged, temporarily switch to a default theme and deactivate non-essential plugins, then retest. A plugin hooking into WooCommerce email actions can prevent them firing, and marketing or CRM integrations that take over order notifications are the usual candidates.


Step 3 — Transport

If messages are logged as failed, WordPress could not hand them off.

On a site without an SMTP plugin, this is expected behaviour rather than a fault: WordPress is using PHP mail(), which frequently fails outright on modern hosting and reports nothing useful when it does. Why that is.

On a site with one, check credentials, port and encryption. A connection timeout on port 25 is your host blocking outbound SMTP; use 587 with STARTTLS or the service's API. Configuring it properly.


Step 4 — Delivery

Logged as sent and not arriving means it left your site and was rejected, filtered or discarded downstream.

The likeliest cause on a WooCommerce site is authentication, and the reason it bites stores particularly hard is volume plus content: a store sends more automated mail than a blog, and order confirmations contain the links, prices and urgency patterns filters weigh heavily.

Check three things:

1. Read the headers of a message that did arrive. Find Authentication-Results and confirm dkim=pass with header.d showing your domain. A pass on your host's domain does not align, and DMARC fails despite it.

2. Check your domain's blocklist status. Check it here. Total non-delivery to every provider at once points here rather than at configuration. If the store's site was compromised at any point, this is more likely than it sounds. Why a hack lands your domain on a blocklist

3. Check where mail lands per provider. Test to Gmail, Outlook and one other. Delivery to one and not another is a reputation pattern, not a configuration fault.


Step 5 — The From address problem

WooCommerce has its own From settings, and they override your SMTP plugin unless you force otherwise.

WooCommerce → Settings → Emails → Email sender options sets a "from" name and address used on all store mail.

Two failures here:

A From address on a domain you do not control. A store whose sender address is a Gmail or Yahoo address is sending mail from your server claiming to be from a provider's domain. That fails that provider's DMARC policy, and the outcome is not filtering but rejection. Use an address on your own store domain.

A disagreement between WooCommerce and your SMTP plugin. Both set a From address, and which wins depends on hook order. The result is some messages aligned and some not. Set the SMTP plugin to force the From address, and match WooCommerce's setting to it so there is nothing to disagree about.

Set Reply-To separately. Customers reply to order emails constantly. From should be your store address; Reply-To should be wherever a human reads.


Step 6 — Customer-side causes

Some non-arrivals are not your site at all.

  • Typos at checkout. Check the order record. gmial.com is a real and frequent cause
  • Corporate filtering, which is stricter than consumer providers and often discards silently
  • Full mailboxes, which bounce
  • Spam folders. Ask the customer to check before you rebuild anything

A bounce log tells you which of these it was, which is one more reason to send through a service that reports bounces rather than through PHP mail, which reports nothing. What bounces mean.


What matters more on a store than elsewhere

Two things, and both are about consequence rather than cause.

Transactional mail is the last thing you want filtered. An unread newsletter costs an open. An undelivered password reset costs a customer who cannot log in, and an undelivered order confirmation generates a support ticket and, often, a chargeback dispute where the customer says they received no confirmation.

Marketing sending on the same domain puts that at risk. A campaign that generates complaints degrades the domain reputation your order confirmations depend on. A store that sends both should separate the streams — a subdomain for campaigns, the main domain for transactional — so a bad campaign cannot take checkout email down with it. How reputation works across streams.


Frequently asked questions

Why are WooCommerce order emails not sending?
Most often the status transition that triggers them never happened — an order stuck at pending payment never fires the processing email. Check order status first, then the per-email enable toggles, then whether WordPress attempted to send at all using an email log. Only after that is it a delivery problem.

Why do I get customer emails but not admin ones?
The "New order" notification uses its own recipient field in WooCommerce → Settings → Emails, separate from the site admin address. A blank, stale or mistyped address there stops admin notifications while customer mail continues normally.

Do I need an SMTP plugin for WooCommerce?
Yes for any store that depends on order emails arriving. Without one WordPress sends through PHP mail() from your web server, which is unauthenticated for your domain and reports success whether or not the message was delivered.

Why do my order emails go to spam?
Usually failed authentication, and stores are hit harder because they send more automated mail containing links and prices. Confirm DKIM passes on your own domain in the message headers, check your domain's blocklist status, and make sure the From address is on a domain you control.

Can I use my Gmail address as the WooCommerce sender?
Not safely. Your server would be sending mail claiming to be from Gmail's domain, which fails Gmail's DMARC policy and gets rejected rather than filtered. Use an address on your store's own domain and set Reply-To to wherever you actually read mail.

Why does the customer say they never got the confirmation?
Check the order record for a typo in the email address, then your email log for whether it was sent and what the response was, then ask them to check spam. A bounce log distinguishes a full mailbox from a rejection, which is why sending through a service that reports bounces matters on a store.

The short version

  1. Check the order statusCheck the order status in WooCommerce u2192 Orders u2014 an order at pending payment never fires the processing email.
  2. Check the per-email toggles and recipient fieldsCheck the per-email toggles and recipient fields in WooCommerce u2192 Settings u2192 Emails.
  3. Install an email logging pluginInstall an email logging plugin and place a test order.
  4. If nothing is loggedIf nothing is logged , deactivate non-essential plugins and switch to a default theme, then retest.
  5. If logged as failedIf logged as failed , check SMTP credentials, port and encryption, or install an SMTP plugin.
  6. If logged as sentIf logged as sent , read the `Authentication-Results` header on a delivered message and confirm DKIM passes on your own domain.
  7. Check the store domain's blocklist statusCheck the store domain's blocklist status
  8. Set the WooCommerce From addressSet the WooCommerce From address to a mailbox on your own domain and force the same address in the SMTP plugin.
  9. Set Reply-ToSet Reply-To to a monitored inbox.
  10. Test delivery to Gmail, Outlook and one other providerTest delivery to Gmail, Outlook and one other provider
  11. Move marketing sending to a separate subdomainMove marketing sending to a separate subdomain

The WordPress Email Delivery Checklist

Stop your WordPress emails from failing silently. Get the complete setup guide.

Muhammad Basim

About the Author

Muhammad Basim

Digital Marketer & WordPress Developer

Muhammad Basim has worked in digital marketing since 2013, focused on email deliverability and AI-assisted content production. He is the author of The Email Deliverability Playbook and The Email Copywriting Playbook.

Related Articles

Newsletter

Free: The 60-Minute
Email Authentication Fix

A no-fluff checklist from the Deliverability Playbook. In one hour: set up SPF, DKIM & DMARC correctly, check your domain against blocklists, and pass Gmail & Yahoo's 2026 sender requirements.

No spam — that would be ironic. Unsubscribe anytime.