"I never got a confirmation. Did my order go through?"
Every store owner gets this message. And when it arrives often enough, you stop treating it as customer confusion and start realising your receipts genuinely aren't landing.
This costs more than most email problems, because a missing order confirmation doesn't just annoy someone — it generates support tickets, refund requests, and chargebacks from customers who assume the payment failed. It also wastes the single most valuable email you'll ever send, since order confirmations get opened at rates marketing email never approaches.
Here's why it happens and how to fix it properly.
The short version
Five causes, and most stores have several:
- PHP mail with no authentication — the structural one
- A
Fromaddress that isn't a real mailbox — usually[wordpress](https://wordpress.org/)@yourdomain.com - No SPF, DKIM, or DMARC on the sending domain
- Sharing a domain with marketing mail, so promotional problems damage your receipts
- Content patterns that filters scrutinise — prices, links, urgency
The fix, in order: SMTP through a transactional service, a real From address, full authentication, and ideally a separate subdomain for transactional mail.
Why stores have it worse
The underlying problem is the same as any WordPress site, but three things make it sharper.
Volume. A brochure site sends a handful of emails a month. A store sends several per order — new order, processing, completed, plus admin notifications. Problems surface faster and at scale.
Content that looks commercial. Order emails contain prices, currency symbols, product names, tracking links, and payment references. That's a pattern filters examine closely, and it's much closer to promotional mail than a password reset is.
Customers who don't check spam. Someone waiting on a password reset will look in junk. Someone who just spent £200 assumes something went wrong and contacts you — or their bank.
One thing worth naming: order confirmations are your highest-reputation mail. They're wanted, they get opened, nobody reports them as spam. Getting them delivered properly doesn't just fix a support problem — it builds the reputation that everything else you send benefits from.
Fix 1 — Stop using PHP mail
WooCommerce sends through WordPress's wp_mail(), which defaults to PHP's mail() — unauthenticated mail from your web server.
Since 2024, Gmail, Yahoo, and Microsoft require proper authentication, and failures mean rejection rather than filtering. A web server's IP has no sending reputation, and on shared hosting it may already be tainted by other sites.
Route WooCommerce mail through a transactional service — Postmark, Brevo, Mailgun, SendGrid, or SES — using an SMTP plugin. Step by step.
This alone resolves a large share of cases.
Fix 2 — Set a real From address
Check WooCommerce → Settings → Emails for your "From" name and address.
The default is often [email protected], a mailbox that doesn't exist.
What it should be: something real on your own domain — [email protected] — that actually receives mail.
Why a real mailbox matters: customers reply to order confirmations constantly, asking about delivery or changes. If nobody's reading that address, you're losing conversations. It also means bounces have somewhere to go.
What not to use:
A free-mail address. [email protected] means your server claims to send as Gmail, which fails DMARC outright.
noreply@. Beyond being unfriendly, it structurally signals to providers that you're a broadcaster rather than a correspondent — and it guarantees you miss customer replies.
Also set "Force From Address" in your SMTP plugin, since payment gateway and shipping plugins sometimes override it per-message.
Fix 3 — Authenticate the sending domain
SMTP routes your mail properly. Authentication proves it's yours.
SPF, DKIM, and DMARC, all published, all aligned. Your transactional provider gives you the records.
The detail that catches people is alignment. SPF and DKIM can both pass while DMARC fails, because the domain in your visible From doesn't match the domain that was actually authenticated. If your provider signs under its own domain rather than yours, you'll see green ticks and mail still landing in spam.
Fix 4 — Separate transactional from marketing
The structural fix, and worth doing if you send newsletters as well as receipts.
Providers score reputation per domain and subdomain. If your promotional campaigns and your order confirmations flow from the same domain, one bad campaign can damage the reputation your receipts depend on.
There's a subtler trap too: if a customer unsubscribes from marketing but keeps receiving mixed-stream mail from the same address, providers can read that as ignoring the unsubscribe.
The architecture:
| Stream | Domain |
|---|---|
| Human / corporate | yourstore.com |
| Marketing | news.yourstore.com |
| Transactional | notify.yourstore.com |
Each subdomain needs its own complete SPF, DKIM, and DMARC setup, and builds its own reputation while inheriting brand recognition from the root.
One honest caveat: subdomain separation reduces blast radius rather than granting immunity. Providers still consider the root domain's overall behaviour.
And if you set up a new subdomain, warm it. A brand-new sending domain has zero reputation, and "new plus sudden volume" is the classic spam fingerprint. Ramp gradually rather than switching all your order mail across on a Monday morning.
Fix 5 — Clean up the emails themselves
Lower priority than the above, and worth doing once the infrastructure is right.
Keep the templates lean. WooCommerce defaults are reasonable; heavily designed order emails with large images and multiple promotional banners drift toward looking like marketing.
Don't attach invoices as PDFs by default if you can link instead. Attachments increase size and invite scrutiny.
Avoid promotional content in transactional emails. A discount banner in an order confirmation blurs the line between transactional and marketing — which matters legally in some jurisdictions and reputationally everywhere.
Check your link domains. You inherit the reputation of every domain you link to. Shortened links and third-party tracking redirects in a receipt are worth removing.
Testing properly
The plugin's test email is not sufficient. It proves the SMTP connection works, not that WooCommerce is using it — some payment and shipping extensions send through their own mechanisms.
Place a real test order and check:
- The customer confirmation, at a Gmail address
- The same, at an Outlook address
- The admin new-order notification
- The processing and completed emails as you change the order status
Check spam folders, not just inboxes. Arriving in spam is a different result from arriving.
Then turn on email logging so that next time someone says they didn't receive a confirmation, you can check whether it was sent and to what address. Very often the answer is a typo at checkout — which is a completely different conversation from "our system is broken."
Can you resend an order email?
Yes, and it's worth knowing before you need it.
In WooCommerce: open the order, and in the "Order actions" box choose the email you want to resend — customer invoice, order details, or the relevant status email — then update.
A caution: if the underlying delivery problem isn't fixed, resending sends it into spam again. Fix the cause, then resend.
For a customer who typo'd their address, correct it on the order first, then resend.
Frequently asked questions
Why don't customers get order emails?
Usually because WooCommerce sends via PHP mail, which is unauthenticated and often blocked outright by hosts — so your site reports success while nothing leaves. The other common causes are a From address like [email protected] that isn't a real mailbox, and missing SPF, DKIM, or DMARC on the sending domain. Route mail through a transactional service via SMTP, set a real From address, and authenticate properly.
Should store emails use a different domain?
Ideally a different subdomain rather than a different domain. Providers score reputation per domain and subdomain, so putting transactional mail on something like notify.yourstore.com and marketing on news.yourstore.com means a bad promotional campaign can't damage the reputation your order confirmations depend on. Each subdomain needs its own complete authentication, and a new one should be warmed gradually rather than switched on at full volume.
Can I resend an order email?
Yes. Open the order in WooCommerce, and in the "Order actions" panel select the email to resend, then update. If the customer mistyped their address, correct it on the order first. Worth knowing that resending won't help if the underlying delivery problem isn't fixed — it'll land in spam again. Fix the sending setup, then resend.
What to do next
Go to WooCommerce → Settings → Emails and look at your From address.
If it's [email protected], that's contributing to the problem right now, and changing it to a real mailbox on your own domain takes two minutes.
Then place a test order to a Gmail address and see where the confirmation lands. That tells you in five minutes whether you have a sending problem, a spam problem, or no problem at all.
Free: The 60-Minute Email Authentication Fix.
Go deeper: The Email Deliverability Playbook — the full domain architecture model and warm-up schedule.
Related guides
- WordPress emails not sending — the wider diagnosis
- How to set up SMTP in WordPress — the configuration
- Email authentication — SPF, DKIM, DMARC, and alignment
- WooCommerce SEO — the other store-specific problems
Join the Newsletter
Get practical marketing tactics delivered straight to your inbox.

Written by
Muhammad Basim
Related Articles
Transactional Email Services Compared for WordPress
Every one of these services will deliver your password resets. That's not the differentiator. What differs is setup difficulty, what the free tier covers, how good the logs are when something goes wrong, and — the one people never consider until it bites them — whether the service also handles marketing mail, and whether you […]
Contact Form Notifications Not Arriving: Every Cause
Here's the version of this problem that costs the most: it's been happening for months and you don't know. The form says "thank you." The visitor believes they've reached you. You believe nobody's been in touch. There's no error, no bounce, no alert — just an absence, and absences are invisible. Most of the time […]
How to Set Up SMTP in WordPress, Step by Step
Twenty minutes, once, and your site's email stops being a mystery. The job is simple in principle: stop WordPress handing mail to your web server, and hand it to a service that exists to send mail properly. What follows is the actual sequence, including the two steps people skip that make the difference between "the […]