WooCommerce order emails stop arriving when your host’s server tries to send them through PHP mail(), which most receiving mail servers now reject or dump straight into spam because it has no authentication attached to it. The fix is to route order confirmations, shipping notices, and admin alerts through an authenticated SMTP connection instead. Here is how to diagnose the exact cause, set up a permanent fix, and avoid the mistakes that cause stores to think the problem is solved when it isn’t.
First, confirm it is actually an email problem
Before touching any settings, place a test order and watch what happens in three places: the customer’s inbox and spam folder, the admin email inbox, and WooCommerce’s own order notes on that order. If the order note says the email was triggered but nothing arrived, WordPress attempted to send and the message got lost somewhere between your server and the recipient. That points to a sending problem, not a WooCommerce configuration problem.
Step 1: Check WooCommerce email settings
Go to WooCommerce > Settings > Emails and confirm each email type (New order, Processing order, Completed order, Customer invoice) is toggled on. It sounds obvious but a plugin update or theme customization occasionally resets these. Also check the “From” email address field at the bottom of that screen. If it is set to an address on a different domain than your site, some receiving servers will flag or block it.
Step 2: Check whether WordPress is actually sending mail
Install Check Email or WP Mail Logging temporarily, or use the delivery log inside an SMTP plugin if you already have one. Place another test order. If nothing shows up in the log at all, the problem is happening before WordPress even tries to send, which usually means a plugin conflict or a fatal PHP error interrupting the checkout process silently.
Step 3: Rule out plugin conflicts
Some caching plugins and security plugins interfere with WooCommerce’s transactional emails, either by caching a page in a way that skips the trigger or by blocking outgoing requests as a false-positive security measure. Deactivate other plugins one at a time (on a staging copy if possible) and place a test order after each deactivation until the email arrives.
Step 4: Switch from PHP mail() to SMTP
This step resolves the issue in the large majority of cases because it removes your host’s unauthenticated PHP mail() function from the process entirely.
- Install ReadyGo Tools SMTP, a free WordPress plugin built for exactly this problem.
- Connect a provider. It supports 14 of them, including Gmail, Brevo, Mailgun, SendGrid, and Amazon SES, so you can use whichever one you already have an account with.
- Enter your API key or SMTP login details on the plugin’s settings screen.
- Use the built-in test send to confirm the connection works before going back to WooCommerce.
- Place a real test order and confirm the New order and Processing order emails both arrive within a minute or two.
- Check the plugin’s delivery log to see the send status recorded against that order’s email.
A worked example
Say a store selling handmade goods runs on shared hosting and has been live for six months using the host’s default PHP mail(). The owner notices Gmail customers keep asking “did my order go through?” even though the order shows as processing in the dashboard. Checking the order notes on ten recent orders shows “Order email sent to customer” on every one, which looks fine at first glance, but that note only confirms WordPress attempted the send, not that it was delivered or accepted.
After installing ReadyGo Tools SMTP and connecting a Gmail account with an app password, the owner places a test order and the confirmation lands in the inbox within seconds, not the spam folder. Checking the plugin’s delivery log against the same ten recent orders (by re-sending manually where needed) confirms that several of the earlier sends had actually failed silently, since PHP mail() doesn’t reliably report bounce or rejection information back to WordPress the way an authenticated SMTP connection does. That gap between “WooCommerce says it sent” and “the customer actually received it” is exactly what SMTP with a proper delivery log closes.
Common setup mistakes to avoid
- Using your personal email as the From address without matching SPF/DKIM records. Even with SMTP configured, if your domain’s DNS doesn’t authorize the sending provider, some inboxes will still flag the message. Most providers give you a short DNS setup guide during connection, and it’s worth following it rather than skipping straight to the API key step.
- Forgetting to test with the actual order flow, not just the plugin’s test button. A test email confirms the connection works, but WooCommerce’s order emails go through a different template and trigger path. Always place one real test order after setup.
- Leaving the old configuration active alongside the new one. If you previously installed a different SMTP plugin, deactivate it fully before activating a new one, since two plugins both trying to hook into wp_mail() can cause emails to send twice or not at all.
- Ignoring the delivery log after setup. Checking it once during setup isn’t enough. A provider can start rejecting mail weeks later due to a changed API key or a hit sending limit, and the log is the only place you’ll see that before a customer tells you.
Step 5: Set up a backup provider
A single SMTP provider can still fail. Free tiers often cap daily sending volume, and any provider can have an outage. WooCommerce stores are more exposed to this than a typical blog because a missed order email means a customer with no confirmation and a store owner who does not know a sale happened. ReadyGo Tools SMTP supports load balancing and automatic failover across multiple connected providers at no cost, so if your primary provider is unreachable or hits its limit, the plugin automatically routes through the second one instead of the email simply failing.
Why this beats paying for a premium SMTP plugin
WP Mail SMTP’s free version sends through one provider with no failover and a limited log. Getting failover and a full delivery log normally means upgrading to its Pro plan. ReadyGo Tools SMTP includes multi-provider failover and delivery logs in the free version, which matters most for a store where every missed order email is a customer service problem or a lost sale you never find out about.
FAQ
Why did order emails work fine for months and then stop? This is usually a sign your host’s mail server reputation degraded, or a receiving provider like Gmail or Outlook tightened its spam filtering. PHP mail() has no authentication to fall back on when that happens, which is why the failure often looks sudden even though the underlying weakness was there the whole time.
Do I need a paid email provider account to use SMTP? No. Gmail, Brevo, and several others offer free tiers with daily sending limits that are more than enough for a small to mid-size store’s transactional email volume.
Will switching to SMTP fix emails that are landing in spam, not just missing entirely? In most cases, yes, since authenticated sending is one of the main signals spam filters use. If emails still land in spam after switching, check your domain’s SPF and DKIM records next, since that’s the next most common cause.
Does this affect customer account emails too, like password resets? Yes. Once you connect SMTP through a plugin like this, it reroutes all wp_mail() traffic, not just WooCommerce order emails, so password resets and other account notifications get the same reliability improvement.
Quick takeaways
- Order emails failing almost always means PHP mail() is being blocked or unauthenticated, not that WooCommerce is broken.
- Check order notes and a delivery log before changing any settings, so you know whether WordPress even tried to send.
- Switching to SMTP fixes the root cause instead of masking symptoms.
- A single SMTP provider is still a single point of failure for a store; failover matters more here than on a blog.
- You do not need a paid plugin to get authenticated sending, failover, and logs, ReadyGo Tools SMTP covers all three for free.
