Your WooCommerce store is processing orders. Customers are paying. But nobody is getting an email — no order confirmation, no receipt, no shipping notification. Your inbox is filling up with "where's my order?" messages and you have no idea why.

This is one of the most common WooCommerce problems we fix — and one of the most misdiagnosed. Store owners spend hours checking WooCommerce settings when the actual fault is three layers deeper. This guide covers every layer, in the order you should check them, with specific instructions at each step.

ℹ️
The most important thing to know firstWooCommerce does not send emails itself. It asks WordPress to send them. WordPress asks your hosting server (or an SMTP plugin) to send them. That means a WooCommerce email failure can live in any of four different places — and the fix is completely different for each.

Understanding the email stack

Before you can diagnose the fault, you need to understand how WooCommerce email actually works. Most store owners assume it's a WooCommerce setting. It usually isn't.

Here's the complete chain from order to inbox:

1. WooCommerce
Triggers the email event (new order, status change, etc.)
Rarely the fault
2. wp_mail()
WordPress core function — hands the email to whatever mailer is configured
Rarely the fault
3. SMTP plugin / mailer
WP Mail SMTP, Fluent SMTP, etc. — routes email to a delivery service
Common fault point
4. Delivery service
Brevo, Mailgun, SendGrid, Gmail SMTP, or PHP mail()
Most common fault
5. DNS records
SPF, DKIM, DMARC — tell receiving servers your mail is legitimate
Often missing
6. Recipient inbox
Gmail, Outlook, Apple Mail — may filter to spam
Check spam first

The most common fault is at layer 3 or 4 — an SMTP plugin is misconfigured, or the delivery service API key has expired. WooCommerce (layer 1) is almost never the cause. But because WooCommerce is what shows the error, that's where most store owners start — and waste time.

Step 1 — Check the obvious things first

Before going deep, eliminate the quick wins.

Are the emails enabled in WooCommerce?

Go to WooCommerce → Settings → Emails. Every email type — New Order, Processing Order, Customer Invoice, etc. — has an Enable toggle. Check that the ones you expect to fire are actually enabled. Also verify the "From" email address uses your domain, not a Gmail or Hotmail address.

Are the emails in spam?

Ask a customer to check their spam folder. Ask yourself to place a test order and check your own spam. If emails are arriving in spam but not the inbox, skip ahead to the DNS records section — that's almost certainly the cause.

Is the order status correct?

WooCommerce only sends a "Processing" email when an order moves to Processing status. If orders are sitting on Pending Payment, no email will fire. Check WooCommerce → Orders and confirm the status is what you expect.

Step 2 — Install WP Mail SMTP and run a test

The fastest way to diagnose a WooCommerce email failure is to install WP Mail SMTP (free version) and use its built-in test tool. This catches the actual error that WooCommerce silently swallows.

01

Install WP Mail SMTP

Go to Plugins → Add New, search "WP Mail SMTP", install and activate the free version.

02

Run the email test

Go to WP Mail SMTP → Tools → Email Test. Send a test to your own email address — not the customer's.

03

Read the debug output

If the test fails, WP Mail SMTP shows you the exact error. This is the most valuable piece of information in the whole diagnostic. Note it down and use it to jump to the relevant section below.

The test output will tell you one of three things: the email sent successfully (delivery problem, jump to DNS section), the mailer failed with a specific error (jump to the relevant mailer section), or WordPress itself failed to hand off the email (PHP mail is blocked, see below).

Step 3 — PHP mail() is probably blocked

If no SMTP plugin is installed and WP Mail SMTP's test fails immediately with no specific error, the fault is almost certainly that your hosting server has disabled PHP's mail() function.

Most shared hosting providers — GoDaddy, Bluehost, SiteGround, and others — restrict or block mail() by default to prevent spam abuse. WordPress falls back to this function when no SMTP plugin is configured, which means every email attempt silently fails.

The fix is to stop relying on PHP mail entirely. You need a dedicated email delivery service.

The recommended fix for PHP mail failuresCreate a free account with Brevo (300 emails/day free), generate an API key, and configure WP Mail SMTP to use it. This bypasses PHP mail entirely and routes all WooCommerce emails through Brevo's reliable infrastructure. Takes about 15 minutes.

Step 4 — Common SMTP plugin error messages

If WP Mail SMTP is already installed and you can see a specific error in the test output, here's what the most common errors mean and how to fix them.

unauthorized: API Key is not enabled

Your delivery service (Brevo, Mailgun, SendGrid) has rejected the API key. The key has been revoked, expired, or was generated on a different account. Log into the delivery service, generate a new API key, and update it in WP Mail SMTP settings. This is the single most common WooCommerce email fault we encounter.

SMTP connect() failed

WP Mail SMTP can't reach the SMTP server. Usually caused by wrong host, port, or SSL settings. Double-check the SMTP credentials against your provider's documentation. Common port issues: use 587 with STARTTLS, or 465 with SSL/TLS — never mix the two.

535 Authentication failed

The SMTP username or password is wrong. If using Gmail, you need an App Password (not your regular password) — standard Gmail passwords are rejected. Go to your Google Account → Security → App Passwords and generate one specifically for WordPress.

530 Must issue a STARTTLS command first

Your encryption setting is wrong. Switch from "None" to "STARTTLS" in WP Mail SMTP's mailer settings for the relevant port.

Connection timed out

Your hosting server is blocking the outbound SMTP port. Contact your host and ask them to open port 587 or 465, or switch to an API-based mailer (Brevo, Mailgun) which uses port 443 — almost never blocked.

Real case · May 2026

The Brevo API key nobody knew had expired

A UK retail client came to us after customers stopped receiving order confirmations. WooCommerce showed a vague "Error sending test email" with no further detail. We installed WP Mail SMTP, ran a test, and got a clear answer within two minutes:

→ Mailer: Brevo
→ unauthorized: API Key is not enabled

The site had been configured to send through Brevo by a previous developer. At some point the API key was revoked — possibly when the developer left and cleaned up their accounts. WooCommerce had no way to surface this clearly, so the store owner had no idea what had changed.

We created a new Brevo account under the client's ownership, generated a fresh API key, configured WP Mail SMTP, verified the DNS records, and confirmed delivery. The entire fix took under two hours from first contact.

Step 5 — Choosing and configuring a delivery service

If you're setting up a fresh delivery service — or switching from one that's broken — here's an honest comparison of the main options for WooCommerce stores.

ServiceFree tierBest forSetup difficulty
Brevo300/dayMost WooCommerce stores — generous free tier, simple API setupEasy
Mailgun100/day (trial)Higher volume stores, developers comfortable with DNSMedium
SendGrid100/dayStores that also do marketing email — unified platformMedium
Postmark100/month (trial)Stores where deliverability is critical — excellent reputationEasy
Gmail / Google Workspace500/daySmall stores already on Google WorkspaceMedium (App Password required)

For most WooCommerce stores, Brevo is the default recommendation — 300 emails per day covers the vast majority of small to medium UK stores, the API setup is straightforward, and WP Mail SMTP has native Brevo support that makes configuration simple.

Step 6 — DNS records (SPF, DKIM, DMARC)

Even if your delivery service is configured correctly, emails can still land in spam or get rejected entirely if your DNS records aren't set up properly. This is the most commonly overlooked part of WooCommerce email configuration.

What these records do

SPF tells receiving mail servers which servers are authorised to send email on behalf of your domain. Without it, Gmail and Outlook may mark your emails as suspicious.

DKIM adds a cryptographic signature to outgoing emails that proves they haven't been tampered with in transit. Most delivery services generate this for you.

DMARC tells receiving servers what to do if SPF or DKIM fail — reject, quarantine, or monitor. Even a basic DMARC record significantly improves deliverability.

How to check your DNS records

Go to MXToolbox.com and enter your domain. Run the SPF Lookup, DKIM Lookup, and DMARC Lookup. Missing or failing records are the most common reason correctly-configured WooCommerce emails end up in spam.

⚠️
Don't add a second SPF recordYour domain can only have one SPF record. If you already have one (common if you use Google Workspace for email) and add another, both records become invalid. Instead, merge them into a single record. Your delivery service's documentation will show you exactly how.

Adding the records

Your delivery service will provide the exact values to add. Log into wherever your domain's DNS is managed — typically the domain registrar (GoDaddy, Namecheap, 123-reg) or your hosting cPanel — and add the TXT records they specify.

DNS changes can take up to 48 hours to propagate, though usually much faster. Recheck MXToolbox after 30 minutes and again after a few hours.

Step 7 — Emails sending but landing in spam

If WP Mail SMTP's test shows success but emails are still going to spam, the delivery configuration is working but your domain's sending reputation is low. This is a DNS and reputation problem, not a WooCommerce problem.

01

Check your spam score

Go to mail-tester.com, copy the test email address, send a WooCommerce test email to it, then check your score. It will flag exactly what's hurting deliverability.

02

Fix missing DNS records

MXToolbox and mail-tester will both flag missing SPF, DKIM, or DMARC. Add them as described in Step 6.

03

Check your sending domain

The "From" address in WooCommerce should use your domain — not a free email provider. orders@yourshop.com is fine. yourshop@gmail.com will hurt deliverability significantly.

04

Check Google Postmaster Tools

If most of your customers use Gmail, Google Postmaster Tools shows your domain's reputation score with Google directly. A low score explains high spam rates regardless of correct DNS setup.

Step 8 — Plugin conflicts blocking wp_mail()

Occasionally a plugin hooks into wp_mail() and interferes with email sending — either by replacing it entirely, adding broken filters, or conflicting with your SMTP plugin. This is less common but worth checking if everything else looks correct.

Signs of a plugin conflict: emails worked before, stopped after a plugin update, and the WP Mail SMTP test fails with a generic error rather than a specific SMTP error.

How to test for a plugin conflict

Deactivate all plugins except WooCommerce and WP Mail SMTP. Run the email test. If it passes, reactivate plugins one by one until the test fails — the last plugin you activated is the culprit.

Common offenders: other SMTP plugins (if two are active simultaneously they conflict), security plugins that intercept outgoing requests, and old email marketing plugins that override wp_mail().

Quick reference — causes and fixes

SymptomMost likely causeFix
No emails at all, no SMTP pluginPHP mail() blocked by hostSet up Brevo + WP Mail SMTP
"unauthorized: API Key not enabled"Delivery service API key revokedGenerate new API key, update in SMTP plugin
"SMTP connect() failed"Wrong host, port, or SSL settingsCheck credentials against provider docs
"535 Authentication failed"Wrong password (Gmail needs App Password)Generate App Password in Google Account
Emails sending but going to spamMissing SPF / DKIM / DMARC recordsAdd DNS records via delivery service setup
Worked before, stopped after updatePlugin conflict or API key rotatedTest with plugins deactivated, check API key
WooCommerce logs show no mail entriesFailure before wp_mail() is calledEnable WP_DEBUG_LOG, check PHP error log

How to prevent this happening again

Once you've fixed the immediate problem, a few steps will significantly reduce the chance of it recurring.

  • Document your delivery service credentials. The most common cause of WooCommerce email failures is a previous developer leaving and their API keys being revoked. Keep a record of which delivery service is used, which account it's registered to, and where the API key lives.
  • Own the delivery service account yourself. If a developer or agency set up your Brevo or Mailgun account, make sure it's registered to your email address — not theirs.
  • Set up email monitoring. Tools like UptimeRobot can send a monthly test email and alert you if delivery fails — before customers start complaining.
  • Run a test after any major update. Plugin updates, WordPress core updates, and hosting migrations are the most common triggers for email failures. Run WP Mail SMTP's test tool after any significant change.
  • Verify DNS records after a domain migration. Moving to a new host or registrar can break SPF and DKIM records. Always recheck MXToolbox after any DNS changes.

Still not working after following this guide?

Some WooCommerce email failures require hands-on access to diagnose properly — particularly API key failures from previous developers, complex DNS configurations, and plugin conflicts. We fix these daily.

Summary

WooCommerce email failures almost always live below the WooCommerce layer — in the SMTP plugin, the delivery service, or the DNS records. The diagnostic path is consistent: install WP Mail SMTP, run a test, read the error, and trace it to the relevant layer.

The most common single cause is a revoked delivery service API key — usually from a previous developer's account that's since been cleaned up. The second most common is PHP mail being blocked by the hosting server. Both are fixable in under an hour once identified.

If you've worked through this guide and the problem persists, the fault is likely in a layer that requires direct server access to diagnose — error logs, hosting configuration, or a delivery service account you may not have access to. That's when it makes sense to bring in a specialist.