How to make order emails actually arrive
An order email that silently fails to arrive looks fine from the admin screen and generates a support ticket from everywhere else.
An order confirmation email is not a nice-to-have — it is the moment a customer gets proof they have actually paid you, and its absence generates support tickets far out of proportion to how small a feature it sounds like. WooCommerce believes it has sent the email as soon as WordPress hands it off; whether it actually reaches the inbox is a completely separate question, and the two get confused constantly.
Why WordPress email and real email are different things
By default, WordPress sends email through PHP's built-in mail function, which hands the message to the server and does not confirm delivery, does not authenticate the message as genuinely from your domain, and is treated with active suspicion by major inbox providers precisely because it is the same generic method spammers use. An order confirmation sent this way can succeed from WooCommerce's point of view — no error, no failure logged — and still never reach the customer.
WooCommerce's own order logs typically show only whether the send was handed off successfully, not whether it was accepted, delivered or filtered into spam at the receiving end. Do not treat a clean-looking order log as proof the customer actually got their confirmation.
The fix: send through SMTP with proper authentication
The reliable fix is to stop using PHP's default mail function and send order emails through an authenticated SMTP connection instead — either your hosting's own mail service or a dedicated transactional email provider. An SMTP plugin for WordPress redirects all outgoing mail, including WooCommerce's order emails, through a connection that properly authenticates as your domain rather than looking like generic server mail.
SPF, DKIM and DMARC matter here specifically
Order emails are transactional mail that a customer is actively expecting, which makes them exactly the kind of message that authentication records protect. Without a correctly configured SPF record, DKIM signing, and ideally a DMARC policy on your sending domain, receiving mail servers have no way to confirm your order confirmations are genuinely from you rather than a spoofed message — and increasingly, major providers filter or reject unauthenticated bulk and transactional mail outright. See SPF, DKIM and DMARC explained for what each one does and the order to set them up in.
Checking whether emails are actually arriving
-
Place a real test order using an email address you control
Not an address on the same domain as the store, since mail sent and received on the same domain can behave differently from mail crossing to a genuinely external inbox like Gmail or Outlook.
-
Check the spam or junk folder, not just the inbox
An email that lands in spam is a deliverability problem, not a "not sending" problem, and the fix is different — usually authentication records rather than plugin configuration.
-
Check your SMTP plugin's own send log if one is available
Most SMTP plugins log every attempted send along with the receiving server's response, which is far more informative than WooCommerce's own basic order log.
-
Test with more than one receiving provider
An email that arrives fine at one major provider but not another points towards a reputation or authentication issue specific to how that provider evaluates your domain.
Other common causes worth checking
- The "from" email address is not on your own domain. Sending order confirmations from a free webmail address instead of your store's domain looks suspicious to receiving servers and undermines the authentication records you have set up.
- A plugin conflict is silently disabling the order email trigger. If emails were working and stopped after adding a plugin, particularly anything touching checkout, orders or marketing automation, test with that plugin temporarily disabled.
- The customer mistyped their email address at checkout. Worth ruling out directly with the customer before assuming a systemic fault — it happens more often than it seems like it should.
If you plan to send abandoned cart reminder emails as well as order confirmations, both depend on the same reliable, authenticated sending setup. Fix deliverability once, properly, rather than troubleshooting it separately for every type of email the store sends. See what to do about abandoned carts for that side of it.
If mail is failing to send at all rather than just landing in spam, the general troubleshooting steps in how to fix email that will not send apply directly on top of everything specific to WooCommerce covered here.
Related reading
Not every abandoned cart was ever going to convert — the ones worth chasing are the ones lost to friction you can actually fix.
Why your emails go to spam, and how to stop itEvery common reason outgoing mail is filtered as spam, ordered from the fixes that matter most to the ones that matter least.
How to fix email that will not sendThe most common reasons an email client refuses to send, checked in the order most likely to find the fault.
SPF, DKIM and DMARC explainedThree DNS records that between them answer one question: is this message really from you? Here is what each proves.