WooCommerce order emails fail in one of two places. Either WooCommerce never sends them, because the order is still on “Pending payment” or the email is switched off, or WooCommerce sends them and the receiving mail server drops them or files them as spam. The second case usually comes from a “From” address on Gmail or Yahoo, or from a domain with no SPF, DKIM or DMARC records. WooCommerce’s own log tells you which of the two you have.
This guide shows how to find out which one it is, how to read your domain’s mail records, and what to change so order emails reach the inbox.
Is WooCommerce sending the email at all?
Start here, because the fixes for the two problems have nothing in common.
Which orders trigger an email?
WooCommerce sends order emails when an order changes status, not when it is created. We read the email classes in the WooCommerce source code. The “New order” email to the store owner fires when an order moves from Pending payment, Failed or Cancelled to Processing, Completed or On hold. The “Processing order” email to the customer fires on moves into Processing.
So an order that stays on “Pending payment” sends nothing, to you or the customer. WooCommerce’s email troubleshooting guide says the same thing. It also says that if you have received payment for orders still on Pending payment, you have a payment gateway problem, not an email problem. The gateway’s result is not reaching your site. Our guide on setting up PayFast on WooCommerce covers the usual causes, such as a firewall or security plugin blocking the callback.
Cash on delivery and bank transfer orders do change status straight away, so they should always produce an email. In the source, a cash on delivery order goes to Processing, or to On hold if it contains a downloadable product. A bank transfer order goes to On hold.
Is the email switched on?
Go to WooCommerce, Settings, Emails, open the email (for example “New order” or “Processing order”) and make sure “Enable this email notification” is ticked. For the New order email, check the recipient field too. It is easy to leave an old address there.
What does WooCommerce’s email log say?
WooCommerce logs each transactional email attempt. Go to WooCommerce, Status, Logs, and open the log source named transactional-emails. According to WooCommerce’s guide, each entry has one of four outcomes:
- Sent. WooCommerce handed the email to your site’s mail system. If the customer still did not get it, the problem is delivery, so read the next section.
- Failed. Your site’s mail system returned an error. The entry usually includes the reason, and it points at the hosting or mail setup.
- Disabled. That email is switched off in WooCommerce, Settings, Emails.
- Skipped. A required condition was missing, such as a recipient.
Sent and failed attempts for order emails also appear as private notes on the order itself. If no entry appears at all when an email should have gone out, look for a fatal error or a plugin conflict during checkout.
To resend an email once you have fixed the cause, open the order, pick “Resend new order notification” or “Send order details to customer” from the order actions box, and click the update button.
Why do order emails go to spam or never arrive?
When the log says Sent but nothing arrives, the receiving server did not trust the message. Two things decide that trust: the address in the From line, and whether your domain proves your server may send for it.
How does WooCommerce pick the From address?
We read this in the source as well. WooCommerce’s “From” address setting, under WooCommerce, Settings, Emails, defaults to the WordPress admin email. Many store owners set the admin email to a personal Gmail or Yahoo address when they install WordPress. If you never changed the From address, your store sends order emails that claim to come from that Gmail or Yahoo address, through your hosting server.
WordPress then hands the email to its wp_mail() function. In the WordPress source, wp_mail() sends through PHP’s mail function on the server unless a plugin changes that. So the message leaves from your hosting server’s address, not from Google’s or Yahoo’s servers.
What does Yahoo’s own DNS say about that?
We looked up the DMARC records of the two free mail services that store owners use most, over DNS-over-HTTPS:
- yahoo.com publishes “v=DMARC1; p=reject; pct=100”. That tells receiving servers to reject every message that claims to be from a yahoo.com address and fails authentication. An order email sent as your Yahoo address from your hosting server fails authentication, because Yahoo’s SPF record does not list your server.
- gmail.com publishes “v=DMARC1; p=none; sp=quarantine”. Its SPF record points to Google’s own servers. Google’s email sender guidelines tell senders not to impersonate Gmail From headers, so a store sending as a Gmail address from its own server is on the wrong side of Google’s rules.
WooCommerce’s guide gives the same advice from the other side. Use a From address on your website’s own domain, because a Gmail or Yahoo From address is likely to land in spam or be blocked.
What do Google and Yahoo require from every sender?
Both publish requirements that apply to all senders, not just bulk mailers. Google’s guidelines ask every sender to set up SPF or DKIM for the sending domain, to send from a server with valid forward and reverse DNS, and to use a TLS connection. Yahoo’s sender best practices ask all senders for SPF or DKIM at a minimum and a spam rate below 0.3%. Both ask bulk senders for DMARC as well.
Here is what each record does, in one line each:
- SPF is a TXT record on your domain that lists the servers allowed to send mail for it.
- DKIM is a signature your mail server adds to each message, checked against a public key published in your DNS.
- DMARC is a TXT record at _dmarc on your domain that tells receivers what to do with mail that fails SPF and DKIM, and where to send reports.
How do you check your own domain’s records?
You do not need a special tool. Google Public DNS answers lookups in a browser. Open these two addresses, with your domain in place of example.com:
https://dns.google/resolve?name=example.com&type=TXTshows the TXT records on your domain. Look for one starting with v=spf1.https://dns.google/resolve?name=_dmarc.example.com&type=TXTshows your DMARC record, if you have one. A “Status” of 3 in the answer means the name does not exist, so you have no DMARC record.
Then read the SPF record. It must cover the server that actually sends your order emails. If your site sends through your hosting server and the SPF record only names another mail service, your order emails fail SPF. That happens often when a domain’s mailboxes live with one company and the website lives with another.
DKIM records sit at a name made of a selector, then ._domainkey., then your domain. The selector depends on your mail system, and cPanel shows the exact name in its Email Deliverability page.
How do you fix delivery on cPanel hosting?
Work through these in order:
- Create a real mailbox on your domain, such as orders@ or info@. Our help guide on creating an email account shows the cPanel steps.
- Set it as the From address. In WooCommerce, Settings, Emails, change the “From” address to that mailbox and the “From” name to your store’s name.
- Repair SPF and DKIM. Open Email Deliverability in cPanel. cPanel’s Email Deliverability documentation says the Repair button reviews and fixes a domain’s invalid records, and it can take up to five minutes. If your DNS is managed somewhere else, for example at your domain registrar or a CDN, cPanel cannot change it. Copy the suggested records from the Manage page and add them at your DNS provider.
- Add a DMARC record. Start with a policy of p=none and a reporting address, so you can see who sends mail as your domain before you tighten it.
- Send a test order to a Gmail address. Open the email, choose More, then Show original, and read the Authentication-Results line for spf=pass, dkim=pass and dmarc=pass.
Reverse DNS for the server’s address is your host’s job, not yours. If Show original reports a problem there, ask your host.
Do you need an SMTP plugin?
WooCommerce’s guide recommends one. It suggests an account with a dedicated SMTP provider and calls that more reliable than your own server’s mail function. An SMTP plugin then sends WooCommerce’s emails through that provider instead of PHP’s mail function.
It is not the only fix. If your hosting server sends with an SPF record that covers it, a DKIM signature and a From address on your own domain, order emails can pass authentication without a plugin. An SMTP setup makes the most sense when your mailboxes already live with another mail provider. The SPF and DKIM records you have for that provider then cover your order emails too.
Whichever way you send, keep one rule. The From address, SPF and DKIM must all belong to the same domain, which is the domain customers see.
How many emails can your store send?
Hosting plans usually cap how much mail each domain can send. On Webstribe hosting each domain can send up to 300 emails an hour and 3,000 a day, as set out in our acceptable use policy. That covers order emails for a busy shop. It does not cover a newsletter to your whole customer list, which should go through a mailing service. Our WooCommerce hosting page covers the rest of what the plans include for stores.
Ask your own host for its numbers if you are elsewhere. A sale that sends a newsletter and a wave of order emails in the same hour can use up a limit you never notice on a normal day.
If you are still setting up mail on your domain, our guide to setting up business email on your own domain covers mailboxes and records from the start.
Frequently asked questions
Why do I get the new order email but my customer gets nothing?
Check that the customer email (Processing order, or On hold order for bank transfer) is enabled under WooCommerce, Settings, Emails. If it is, check the transactional-emails log. If it says Sent, the customer’s mail server rejected or filtered it, so fix your From address, SPF and DKIM.
Why are WooCommerce emails going to spam?
Usually the From address is a Gmail or Yahoo address, or your domain has no SPF and DKIM records covering the server that sends. Use a mailbox on your own domain as the From address, repair SPF and DKIM, and add a DMARC record.
Does WooCommerce send an email for orders on Pending payment?
No. Order emails fire when the status changes to Processing, Completed or On hold. If customers paid but orders stay on Pending payment, the payment gateway’s result is not reaching your store.
How do I resend a WooCommerce order email?
Open the order, choose “Resend new order notification” or “Send order details to customer” in the order actions box, and click the update button.
Do I need an SMTP plugin for WooCommerce?
WooCommerce’s guide recommends a dedicated SMTP provider as more reliable than the server’s own mail function. A server that is covered by your SPF record, signs with DKIM and sends from your own domain can also deliver order emails without one.
