InboxRatio
Check your domain

WooCommerce emails going to spam: rescuing order emails from the PHP mail() default

"Hi, I just placed an order but never got a confirmation email — did it go through?" If that support ticket looks familiar, your store has the standard WooCommerce mail problem, and it is worth being precise about what WooCommerce actually does with email: nothing of its own. Every order confirmation, processing notice and password reset is built by WooCommerce and handed to WordPress's wp_mail(), which by default hands it to the web server's PHP mail() function. Your revenue-critical customer mail is delivered by the same generic mechanism as a comment notification, from infrastructure no mailbox provider has reason to trust. The fix is a transport change, and it is the highest-leverage half hour a store owner can spend on email.

Why the default transport gets filtered

Looked at from the receiving filter's side, a stock WooCommerce store's mail presents three strikes at once:

  • The IP. Delivery comes from the hosting box's shared IP, whose reputation is set by every site on the server, including the hacked ones. Whole web-host ranges sit on blocklists for this reason; the blacklist checker will tell you if yours does.
  • The missing signature. PHP mail() applies no DKIM signature, so nothing cryptographically ties the order email to your store's domain, and DMARC has nothing aligned to evaluate.
  • The SPF mismatch. Your domain's SPF record almost certainly does not list the web server, producing a softfail on every order email, and the server frequently lacks the reverse DNS real mail servers carry (check with the reverse DNS checker).

Order emails limp through anyway some of the time, which is what makes the problem sneaky: it presents as intermittent, provider-specific, "only Outlook customers", rather than as a clean outage. Different providers weigh the same weak evidence differently, so the store sees scattered complaints instead of a pattern, and the pattern is only visible from the headers. The evidence is one test order away: send one to a mailbox you control, open the raw message, and read Authentication-Results in the email header analyzer. The stock setup shows failed or missing authentication across the board.

The fix: give store mail a real transport

The repair is the same family as for WordPress generally, with the stakes raised by revenue:

For low-volume stores: an SMTP plugin that submits wp_mail() output through an authenticated SMTP account, such as your business mailbox, removes all three strikes at once. Mind the mailbox provider's daily sending caps: a store that grows past a few hundred emails a day will hit them, and order emails queued behind a cap fail at exactly the moment sales are best. Treat the cap as your signal to graduate to the next option rather than as a limit to manage around.

For everything bigger: route store mail through a transactional email service built for application-generated mail. As category examples from our catalog, services like MailerSend, SMTP2GO or SparkPost verify your domain once, sign every message with your DKIM key, handle bounces and suppressions, and deliver from professionally managed infrastructure. Choosing among providers is a measured-comparison question; that data lives in our deliverability rankings rather than in this repair guide.

After switching, finish the DNS: add the new service to your SPF record (validate with the SPF checker, watching the lookup limit), confirm DKIM alignment, and publish DMARC per how to set up DMARC. Then place another test order and re-read the headers until you see three passes.

Woo-specific pitfalls around the switch

The transport change is simple; the WooCommerce environment around it has sharp edges worth knowing in advance. Email logging: install a mail-log plugin (or use the SMTP plugin's built-in log) so "did the confirmation send?" becomes a lookup instead of a debate, which matters when a payment gateway's webhook delay, not email, is the real reason a confirmation seems missing. Duplicate senders: staging copies of the store fire real order emails from unconfigured hosts unless outgoing mail is suppressed there, writing bad authentication history for your domain while you test features. Template plugins: heavy customizers that rebuild order emails can strip or mangle headers; re-run the header test after installing one. And the SPF record itself: add the new service by editing the existing record, since a second v=spf1 entry at the same name produces a permerror that fails everything. Each pitfall costs minutes to prevent and days to diagnose after the fact.

Store-specific hygiene the transport fix doesn't cover

Transport moves the transactional stream into the inbox; a store's marketing mail (abandoned-cart flows, newsletters via an installed plugin) also answers to bulk-mail rules:

  • Separate the streams. Keep marketing on its own subdomain or sending identity so a campaign mistake never folders order confirmations, and warm any new identity before it carries volume.
  • Respect the bulk rules. Cart-recovery and newsletter mail needs working one-click unsubscribe and a complaint rate under Google's published 0.3% ceiling, per the bulk-sender requirements.
  • Keep the list honest. Checkout-sourced addresses include typos and one-time buyers; suppress the hard bounces, watch the bounce rate, and let list hygiene retire the silent.

A finishing sweep with the email deliverability score verifies the whole sending side in one pass, and if marketing mail still folders after all this, the general diagnostic is why emails go to spam.

Related guides

About this guide

Written by InboxRatio Editorial. Platform behavior described (WooCommerce's use of wp_mail(), the PHP mail() default, SMTP plugin mechanics) follows WordPress and WooCommerce documentation; provider thresholds come from Google's and Yahoo's published sender guidelines. Transactional services are cited as category examples, not recommendations; comparative data belongs to our rankings. No vendor sponsorship influences it.

Methodology

InboxRatio's benchmark sends real campaigns through the platforms we review to a controlled seed list and records where each message lands. This guide draws on platform and provider documentation rather than our measurements; the protocol is in how we test and our source rules in sources.

Last updated

29 September 2026. Platform behavior and provider requirements reviewed quarterly.

Frequently asked questions

Why are my WooCommerce emails going to spam? Because store mail ships through WordPress's default PHP mail() transport: an untrusted shared hosting IP, no DKIM signature, SPF that omits the web server, often no valid reverse DNS. Filters read that as spam-shaped regardless of the order inside.

How do I stop WooCommerce order emails going to spam? Change the transport: an SMTP plugin through an authenticated mailbox account for small stores, or a transactional email service for real volume. Then align SPF, DKIM and DMARC for the store domain and confirm with a test order's headers.

Are customers not receiving WooCommerce emails the same problem as spam placement? Usually yes, on a spectrum: weak authentication gets mail spam-foldered at some providers and rejected outright at others, which presents as "emails not arriving." The same transport-and-DNS fix addresses both ends.

Do I need a transactional email service for WooCommerce? Above light volume, effectively yes, or an equivalent authenticated relay: order mail needs domain-level DKIM, bounce handling and stable sending reputation, none of which PHP mail() or a capped personal mailbox account provides sustainably.

Should abandoned-cart emails come from the same address as order confirmations? Same brand, separate stream: cart recovery is marketing and carries bulk-mail obligations (one-click unsubscribe, complaint ceilings), so put it on its own subdomain or identity. That isolation keeps a campaign problem from foldering the confirmations customers must receive.

How do I test whether my WooCommerce email fix worked? Place test orders delivered to mailboxes you control at Gmail, Outlook and Yahoo, confirm inbox placement and three authentication passes in the headers, and sweep the domain with the deliverability score tool. The seed-testing method and its limits are in how to check if emails go to spam.

Every order email is revenue infrastructure. Move it off the web server's default mailer, authenticate it as your own domain, and let a test order's headers, read in the email header analyzer, prove the tickets are over.