Back to blog
Content··11 min read·WillItInbox Team

WordPress and WooCommerce Emails Going to Spam? Here's the Real Fix

WordPress emails going to spam? The root cause is wp_mail() and your host's server. Here's the 5-step fix that actually works, with exact DNS records.

wordpress emails going to spamEmail deliverability

WordPress emails going to spam almost always trace back to one root cause: WordPress sends email through your web hosting server, not through a real email service. Your host's server isn't built or trusted for email, so Gmail and Outlook treat everything it sends as suspicious. The fix is to stop sending through your host — route mail through a proper SMTP service, authenticate your domain, and verify with a real test.

Everything below walks you through that fix step by step. No fluff, no "install this magic plugin" advice that doesn't address the actual problem.

The Symptoms (Sound Familiar?)

If any of these are happening, you're dealing with the same underlying issue:

  • Contact form submissions vanish. The visitor sees "Message sent!" — you never get the email.
  • WooCommerce order confirmation emails land in the customer's spam folder (or don't arrive at all).
  • Password reset emails never show up, so users think your site is broken.
  • New user registration emails go missing.
  • Admin notifications (new order, low stock, comment alerts) arrive hours late or not at all.
  • Emails arrive fine at your own domain's mailbox but spam at Gmail, Outlook, and Yahoo.

Notice the pattern: the email often sends fine. The problem is what happens between your server and the recipient's inbox.

Why WordPress Emails Go to Spam: The Root Cause Most Guides Bury

Out of the box, WordPress sends every email through a PHP function called wp_mail(). Under the hood, wp_mail() calls the server's built-in mail() function, which hands the message to whatever mail transfer software your web host happens to run.

That setup fails on three fronts:

1. No authentication. The email goes out with no SPF-aligned identity, no DKIM signature, nothing proving your domain actually authorized it. To Gmail, it looks like a stranger claiming to be you.

2. Terrible IP reputation. If you're on shared hosting (Bluehost, HostGator, GoDaddy, SiteGround shared plans — most WordPress sites are), your email leaves from an IP address shared with hundreds or thousands of other websites. You inherit their reputation. If any neighbor on that IP has ever sent spam — and someone always has — the IP is already on Gmail's internal naughty list, and probably a few public blacklists too.

3. Missing or generic reverse DNS (PTR). Receiving servers check whether the sending IP's reverse DNS matches the hostname it claims. Shared hosting boxes usually have a generic PTR like server123.webhost.com — which matches nothing about your domain. Another red flag.

Here's the blunt version: your web host is a web host. Its servers are optimized for serving pages, not for inbox placement. No amount of tweaking email subject lines fixes that. You have to change where the email is sent from.

The Fix Ladder: 5 Steps in Order

Do these in order. Step 1 fixes 80% of cases by itself.

Step 1: Stop Using PHP Mail — Route Through a Real SMTP Service

This is the single most important change. You need two things:

A. An SMTP plugin. Plugins in the "WP Mail SMTP" category intercept wp_mail() and reroute it through a proper email service instead of the server's mail() function. There are several solid options in the WordPress plugin directory — pick one with a wizard-style setup and native integrations for the major email services. Install, activate, and follow the setup wizard.

B. A real email service provider (ESP) to send through. Any of these work well for transactional WordPress email:

ProviderFree tierGood for
Amazon SES3,000/mo free (first year)Cheapest at scale, slightly more setup
Brevo300/day freeEasy start, EU-friendly
SMTP2GO1,000/mo freeSimple, good support
MailgunTrial creditsDeveloper-friendly
SendGrid100/day freeWidely documented

For a typical WooCommerce store sending a few hundred emails a day, the free tier of any of these is enough.

How to wire it up (generic, takes ~15 minutes):

  1. Sign up with your chosen ESP and verify your sending domain in their dashboard.
  2. They'll give you either an API key or SMTP credentials (host, port, username, password).
  3. In your SMTP plugin's settings, choose your ESP from the list, paste in the API key or credentials.
  4. Set the From Email to an address on your own domain (e.g. [email protected]) — never [email protected] left at default, and never a Gmail address.
  5. Set From Name to your store name.
  6. Send the plugin's built-in test email.

Two shared-hosting gotchas that trip people up here:

  • Your host may block outbound SMTP ports (587/465). Some hosts (GoDaddy is notorious for this) block connections to external SMTP servers and force you through their own relay (relay-hosting.secureserver.net on GoDaddy). If your SMTP plugin shows connection timeouts, that's why. The better fix: use your ESP's HTTP API integration instead of SMTP in the plugin settings — APIs travel over port 443, which hosts don't block. This bypasses the port problem entirely.
  • "Force From Email" conflicts. If you run multiple plugins that send mail (contact forms, WooCommerce, membership plugins), enable the plugin's option to force the From address, so everything goes out under the authenticated identity.

Step 2: Authenticate Your Domain (SPF + DKIM + DMARC)

Now that mail flows through your ESP, you need the DNS records that prove it's allowed to. When you verified your domain in Step 1, your ESP gave you these records. Here's what they look like in practice — swap in your own domain and the exact values your ESP provides.

SPF — one TXT record on your root domain. If you already have one, merge the new include into it (you can only have one SPF record):

yourstore.com.  TXT  "v=spf1 include:amazonses.com include:sendgrid.net ~all"

DKIM — usually one or more CNAME records pointing at the ESP:

s1._domainkey.yourstore.com.  CNAME  s1.domainkey.u123.wl.sendgrid.net.
s2._domainkey.yourstore.com.  CNAME  s2.domainkey.u123.wl.sendgrid.net.

DMARC — a TXT record at _dmarc.yourstore.com. Start with monitoring, tighten later:

_dmarc.yourstore.com.  TXT  "v=DMARC1; p=none; rua=mailto:[email protected]; fo=1"

Add all three at your DNS provider (wherever your nameservers point — often your registrar, Cloudflare, or your host's DNS panel). Wait 15–60 minutes for propagation, then verify each one. Don't eyeball it — a single typo like a duplicated v=spf1 or a stray space breaks the whole record silently.

Try it: Check your records in seconds with the free SPF checker and DKIM checker — no signup needed. If you want the full picture of how these three protocols fit together, see SPF, DKIM, and DMARC explained, and when you're ready to move DMARC beyond monitoring, follow the DMARC rollout from none to reject.

One hard requirement since the 2024–2025 sender rule changes: Gmail and Yahoo require SPF and DKIM and DMARC for anyone sending volume, and both providers now enforce with hard rejections — Gmail started bouncing non-compliant mail with 5xx errors in late 2025. Even a small WooCommerce store gets caught by alignment checks now. This isn't optional anymore. More detail in our breakdown of the Gmail and Yahoo bulk sender rules.

Try it: Run your domain through the free Gmail/Yahoo sender compliance checker to see exactly which requirement you're failing.

Step 3: Check Your Server's IP Against Blacklists

If you're staying on shared hosting for web (which is fine), your site's IP reputation still matters for one reason: some receiving servers and spam filters score based on anything associated with your domain, and if your ESP setup has any fallback path through the host, that IP is still in play.

More importantly: if you skip Step 1, no DNS record on earth will save you from a blacklisted shared IP.

Look up your hosting IP (find it in your hosting control panel, or just ping your domain) and run it against the major DNS blacklists. If it's listed on Spamhaus, Barracuda, or similar, that's confirmation of why your mail was dying — and shared-host IP removals are largely out of your control, since your host owns the IP.

Try it: The free blacklist checker scans 20+ DNSBLs at once. If your IP shows up listed, our blacklist removal playbook covers the delisting process — but honestly, the faster path is Step 1: move sending off that IP entirely.

Step 4: Fix the Emails Themselves

Once delivery infrastructure is solid, content still matters. WooCommerce and WordPress default templates have a few known reputation risks:

From name and subject. "WordPress" as a From name looks like a bot. Set a human brand name. Avoid ALL CAPS and subjects like "URGENT: Your order."

Links inside order emails. Two common mistakes:

  • URL shorteners (bit.ly etc.) in tracking or review-request emails are a spam-filter magnet. Remove them. Link directly to full URLs.
  • Third-party tracking links that redirect through domains with poor reputation. If you add shipment tracking, link to the carrier's real tracking page, not a redirect chain.

Image-heavy templates. A one-logo header is fine. An email that's 90% images with almost no text scores poorly. Keep a healthy text-to-image ratio, and always include plain-text versions (WooCommerce sends both by default — don't strip the plain-text part with a template plugin).

Reply-to and abuse addresses. Make sure abuse@ and postmaster@ for your domain actually exist and are monitored — providers check for them.

If you want the deeper dive on content-side triggers, read why emails land in spam — the WordPress-specific causes are infrastructure, but the content checklist there applies to your order and marketing templates too.

Step 5: Test Before You Assume It's Fixed

Most guides end at "install plugin, done." That's how stores keep losing order emails for months — the plugin test email went to the site owner's own mailbox on the same domain, which proves nothing about Gmail or Outlook delivery.

Do a real end-to-end test instead:

  1. Place a real test order on your store (use a test payment gateway or a 100%-off coupon) so WooCommerce generates an actual order confirmation email.
  2. Trigger the emails customers complain about: order confirmation, password reset, contact form.
  3. Check where each one lands at real Gmail, Outlook, and Yahoo addresses — inbox or spam.
  4. Run the same emails through a diagnostic that shows you why: authentication results, blacklist status, header analysis, content scoring, link checks.

Try it: Send a real order email to the WillItInbox deliverability tester — you'll get 70+ checks covering SPF/DKIM/DMARC results as Gmail sees them, IP and domain blacklist status, header problems, and content flags, with a 0–100 score and a prioritized fix list in about 15 seconds. It's free to try and it's the difference between "I think it's fixed" and "I know it's fixed."

Re-run the test after every change. Deliverability isn't a one-time fix — DNS records get edited, plugins update, ESP settings change.

A Quick Diagnostic Cheat Sheet

Match your symptom to the likely cause:

SymptomMost likely cause
Emails never arrive anywhereHost blocks port 587/465, or PHP mail disabled → use ESP API integration
Arrives at your own domain, spams at GmailNo SPF/DKIM/DMARC, or shared IP reputation
Worked for months, suddenly spammingShared IP got blacklisted, or DNS record was edited/lost
Only WooCommerce emails fail, contact forms fineFrom-address mismatch between plugins — force one authenticated From
Test email works, real orders don'tTemplate/plugin overriding From or adding bad links
GoDaddy host, nothing connectsForced relay — use ESP HTTP API, not SMTP

What NOT to Bother With

  • "Email deliverability" plugins that only change headers. If mail still leaves from your host's IP, you've changed nothing that matters.
  • Warming gimmicks. Transactional email from a properly authenticated ESP doesn't need warmup tricks. (IP warming only matters when you run your own dedicated IP at volume — if that's ever you, see our IP warming schedule.)
  • Switching themes or page builders. Irrelevant to email.
  • Blaming WooCommerce. WooCommerce hands mail to wp_mail() correctly. The problem is what happens after.

Frequently asked questions

Sources reviewed

Factual review: June 13, 2026 by WillItInbox Editorial.

Keep reading