WooCommerce
Why WooCommerce order emails stop arriving
30 July 2026 · 6 min read
On this page
Customers pay and hear nothing. Some email to ask whether the order went through. Most simply assume it did not, request a refund, or never buy again.
This is one of the most damaging failures a shop can have, and one of the hardest to notice, because nothing on your side looks wrong.
Why it happens
WordPress sends email badly by default. It uses PHP's mail() function, which sends directly from your web server. Web servers are not mail servers — they lack the authentication records that make mail trustworthy, so providers treat the message as suspicious.
That was tolerable ten years ago. Since Gmail and Yahoo tightened bulk sender requirements in 2024, mail without proper authentication is routinely rejected outright rather than filtered to spam.
So the common causes are:
- No SMTP configured — sending via the web server
- Missing or wrong SPF, DKIM and DMARC records
- The "from" address is a domain the server is not authorised to send for
- Your host blocking or rate-limiting outbound mail
- A plugin conflict intercepting WooCommerce emails
- The email disabled in WooCommerce settings, usually by accident
- Your host's IP on a blacklist because of a neighbouring site
Diagnosing it
1. Is WordPress sending at all? Install a logging plugin — WP Mail Logging or the log built into WP Mail SMTP. Place a test order and see whether the email was generated and handed off. That splits the problem in half: generated but not delivered is a deliverability issue; not generated at all is a WooCommerce or plugin issue.
2. Check WooCommerce settings. WooCommerce → Settings → Emails. Confirm the relevant emails are enabled and the recipient addresses are right. It is worth checking even though it feels too obvious — a theme or plugin update can reset them.
3. Test deliverability. Send a test to a Gmail address and a Microsoft one; those are the strictest. Use mail-tester.com for a score and a list of what is missing.
4. Check your DNS records. SPF, DKIM and DMARC. If you have no DMARC record at all, add one — major providers now expect it.
5. Look for conflicts. Deactivate other email-related plugins on staging and retest.
The permanent fix: use a real mail service
Stop sending through your web server. This is the fix, and it is not optional for a shop.
Set up an SMTP plugin — WP Mail SMTP, FluentSMTP or Post SMTP — connected to a proper sending service:
- Brevo — generous free tier, good for most shops
- Mailgun or Postmark — Postmark in particular is excellent for transactional mail
- Amazon SES — cheapest at volume, more setup
- Google Workspace or Microsoft 365 — fine at low volume, and rate limits will bite as you grow
Then add the DNS records they give you: SPF, DKIM, and a DMARC policy. This is the part people skip, and it is the part that makes the difference between arriving and being rejected.
Use a real address on your own domain — orders@yourdomain.com, not wordpress@yourhost.com.
Use a service that separates transactional from marketing mail. An order confirmation must never be delayed behind a newsletter send, and a marketing complaint should not damage the reputation of the address delivering receipts.
Monitoring it afterwards
The reason this problem persists is that it is invisible. So make it visible:
- Keep the mail log on. Ten seconds a month to check that emails are still going out.
- Watch your sending service's dashboard for bounce and complaint rates.
- Place a real test order monthly, and after every update. This is on the maintenance checklist for exactly this reason.
- Send yourself a copy of order confirmations, so you notice when they stop.
That last one is the cheapest insurance available. If your copy stops arriving, so did the customer's.
Why it recurs
Email breaks after updates, DNS changes, host migrations and gateway changes — none of which obviously relate to email, which is why nobody connects them.
It is on our post-update checklist for every client shop for that reason: place a test order, confirm the email arrives. Five minutes, and it catches the most expensive silent failure in WooCommerce. That is what the WooCommerce care add-on covers.