You hit publish on a new contact form, send yourself a test message, and... nothing arrives. Or a customer emails to say they never got their order confirmation. WordPress not sending emails is one of the most common silent failures on the platform — and it almost always traces back to a single root cause that has nothing to do with your theme or your plugins.
The good news? It's usually fixable in under 15 minutes. Here's exactly why it breaks and how to stop it for good.
Quick Answer: WordPress sends mail through PHP's built-in
mail()function, which most servers block or fail to authenticate — so messages get rejected or filtered as spam. The fix is to route WordPress email through authenticated SMTP, using a plugin like WP Mail SMTP or FluentSMTP connected to a real mailbox or transactional service.
Why WordPress Email Fails in the First Place
Every email WordPress sends — password resets, contact replies, WooCommerce receipts — runs through one internal function, wp_mail(). By default it hands the message off to PHP's mail() function, which tries to send straight from your web server. That's the weak link, and it's why most modern hosts — Hostaccent, for one — disable raw PHP mail outright.
Why disable it? Because PHP mail has no authentication. It doesn't sign your message, doesn't prove your server is allowed to send for your domain, and doesn't speak the language modern inboxes expect. Gmail, Outlook, and Yahoo see an unsigned message from an unverified source and do exactly what you'd expect — reject it, or quietly file it under spam.
In the email-delivery tickets our team handles, the single most common cause isn't a broken plugin or a corrupt install. It's a site still leaning on PHP mail with no real sending infrastructure behind it.
So when raw mail is disabled at the server level, a fresh WordPress install will often fail to send anything at all until you wire up proper authentication. That's not a bug. It's a security decision working as intended — and as of 2026, with inbox providers tightening their rules every year, it's the right one.
The Most Common Causes, Ranked by Frequency
No two sites are identical, but after enough troubleshooting the pattern is clear. Here's what actually breaks WordPress email, roughly in order of how often it shows up.
| Cause | What's happening | Typical fix |
|-------|------------------|-------------|
| PHP mail unauthenticated or disabled | Server can't send, or sends unsigned mail that gets blocked | Switch to authenticated SMTP |
| No SMTP configured | WordPress has no real mailbox to send through | Install an SMTP plugin |
| "From" address mismatch | Sender is wordpress@yourdomain but no such mailbox exists | Use a real, authenticated address |
| Missing SPF / DKIM / DMARC | Receiving servers can't verify you | Add the DNS records |
| Wrong port or encryption | The SMTP connection silently fails | Use port 587 (TLS) or 465 (SSL) |
| Contact form plugin only | wp_mail fails underneath the form | Fix wp_mail first; the form follows |
| Mail sends but lands in spam | Not a sending failure — a reputation one | Authenticate, then warm the domain |
Notice that almost everything points back to one place: authentication. Fix that, and the long tail of symptoms — the contact form that won't send, the missing receipts, the password resets that never arrive — tends to clear up at once.
A quick note for the panicked: if you're also chasing unrelated WordPress problems, the email issue is separate from things like a 500 Internal Server Error in WordPress or a 403 Forbidden error. Those are server-response errors, not delivery failures — don't let them muddy your diagnosis here. If your emails are sending but landing in spam instead of the inbox, that's a different (reputation) problem — see WordPress Emails Going to Spam? Here's the Actual Fix. And if scheduled emails (like WooCommerce order confirmations) are delayed rather than missing entirely, the culprit is often WP-Cron not firing on low-traffic sites — worth checking after you confirm SMTP is working.
How to Fix WordPress Not Sending Emails (Step by Step)
This is the part that matters. The plan: stop trusting PHP mail, and route everything through authenticated SMTP instead. Budget roughly 15 minutes.
Step 1 — Confirm it's really a sending problem. Install a test plugin (WP Mail SMTP and FluentSMTP both include one) and send a test to an address on a different provider — if you use Gmail, test to Outlook, and vice versa. Nothing arrives at any of them? You've confirmed a sending failure, not a stray spam-folder issue.
Prefer the command line? On a server with WP-CLI you can fire a test in one line:
bashwp eval 'wp_mail("[email protected]","SMTP test","If you got this, it works.");'
If wp_mail() returns nothing useful, that confirms the wp_mail() function is falling back to the broken PHP default.
Step 2 — Install an SMTP plugin.
The standard choices — WP Mail SMTP, FluentSMTP, and Post SMTP — are all free in the WordPress plugin directory. Any of them overrides wp_mail() and forces WordPress to send through a proper authenticated connection. FluentSMTP is fully free with no send limits, which makes it a common first pick.
Step 3 — Pick your mailer. You have two real options:
- A mailbox on your domain (e.g.
[email protected]) — simplest, and fine for low volume like contact forms and password resets. - A transactional email service — Brevo, Mailgun, SendGrid, or Amazon SES. Stronger deliverability, built for volume, and the right call for any store sending receipts.
Pro Tip: Don't send transactional mail from your everyday inbox. If a delivery problem ever damages your sending reputation, you don't want it dragging down the same address you use to talk to clients. Keep your sending identity separate from your day-to-day mailbox.
Step 4 — Enter your SMTP settings. Whichever mailer you choose, you'll plug in a host, a port, and credentials. Use port 587 with TLS as your default — it's the modern standard. If 587 is blocked on your network, fall back to port 465 with SSL. Steer clear of port 25; it's unauthenticated and blocked almost everywhere.
Step 5 — Set a real "From" address.
This trips people up constantly. Your "From" address has to be a real, authenticated mailbox on the domain you're sending for. [email protected] won't cut it unless that mailbox genuinely exists and you've authenticated it.
Step 6 — Add SPF, DKIM, and DMARC records. These three DNS records tell the world your mail is legitimate. SPF lists who's allowed to send for your domain, DKIM cryptographically signs each message, and DMARC tells inboxes what to do when a message fails. Cloudflare has a clear primer on how DMARC, DKIM, and SPF work together if you want the deeper version. Your SMTP service will hand you the exact records to paste into DNS.
On our own Nginx → Apache stack, the most frequent setup mistake we see here is a duplicate SPF record — a domain is allowed exactly one, and a second one silently breaks the first.
Step 7 — Send a final test. Repeat the Step 1 test. This time it should land in the inbox, not spam. If it does, you've fixed it.
How to Test That Email Is Actually Working
Sending once isn't proof. You want to know your mail passes the checks inboxes run on it.
The fastest external check is a free tool like mail-tester.com: send it a message and it scores you out of 10. A result of 9/10 or higher means SPF, DKIM, and your content all check out. Below 7, and you've still got work to do — the report tells you exactly what's failing.
Then test across the big three — Gmail, Outlook, and Yahoo — because each filters differently. A message that sails into Gmail can still trip Outlook's stricter rules.
Insider Insight: Open the message in Gmail, click the three dots, and choose "Show original." You're looking for
SPF: PASSandDKIM: PASS. If either reads FAIL or NEUTRAL, your DNS records aren't quite right yet — and that's the single most common reason "fixed" email still lands in spam.
In the deliverability tickets our Hostaccent support team works through, this header check resolves more cases than any plugin reconfiguration. The plugin is usually fine. The DNS is usually the culprit.
How to Stop It From Happening Again
Once it's working, the goal is to keep it that way.
Migrating hosts? Move your DNS records too. When we migrate customer sites, we repeatedly see email break the moment DNS changes — the SPF and DKIM records get left behind on the old setup, and authenticated mail suddenly starts failing. Export your DNS zone before you switch, then confirm SPF, DKIM, and DMARC all survived the move.
Log your outgoing email. Both WP Mail SMTP and FluentSMTP can log every send. On managed setups like Hostaccent's, server-level mail logs add a second layer of visibility, so when someone says "I never got the email," you can prove whether it left the building.
Scale up to a transactional service when volume grows. A contact form might send 20 emails a day. A growing store sends thousands. Past a certain point, a dedicated sending service — often paired with a server that has a clean dedicated IP — protects your reputation in a way a shared mailbox can't. At that scale, server location and IP reputation start to matter, which is part of why teams choose region-specific infrastructure like Amsterdam VPS hosting for EU audiences or Atlanta VPS hosting for the US Southeast.
Pro Tip: Start DMARC at
p=none. That's monitor-only — it reports failures without blocking anything, so you can confirm your legitimate mail passes before tightening the policy toquarantineorreject. Jumping straight torejectis how people accidentally block their own receipts.
Letting Your Host Handle the Heavy Lifting
If WordPress not sending emails has already cost you a lead or an order, the DIY route above works — but it's a lot of moving parts to maintain: SMTP credentials, DNS records, deliverability monitoring, and the occasional 2 a.m. "why did receipts stop" scramble.
That's the gap managed hosting closes. With Hostaccent's Managed WordPress Hosting, the email and DNS layer is configured and maintained for you on a Cloudflare → Nginx → Apache stack with NVMe SSD storage and UK-based human support — from a UK-registered host that's been running WordPress sites since 2018. Plans start at $22.99/yr for the Basic plan, enough for a single WordPress site with email handled properly out of the box.
One honest caveat: the Basic plan is built around a single site. If you're running several stores or pushing thousands of transactional emails a day, you'll still want a dedicated transactional service layered on top. Managed hosting fixes the foundation — it isn't a replacement for enterprise-scale sending volume.
Frequently Asked Questions
Why is my WordPress contact form not sending emails?
Almost always because the form relies on wp_mail(), which falls back to unauthenticated PHP mail. The form itself is usually fine — the sending layer underneath it is broken. Install an SMTP plugin, connect a real authenticated mailbox or service, and the form starts delivering right away.
How do I fix wp_mail not working?
"wp_mail not working" almost always means it's still routing through PHP mail. Override it by installing an SMTP plugin like FluentSMTP or WP Mail SMTP and pointing it at an authenticated SMTP connection. That swaps the unreliable default for a proper sending path, and most wp_mail failures disappear.
Do I need an SMTP plugin to fix WordPress not sending emails?
In practice, yes. SMTP is the reliable way to authenticate your mail, and a plugin is the simplest way to add it without editing core files. Free options like FluentSMTP carry no send limits, so there's rarely a reason to skip this step.
Why are my WordPress emails going to spam?
This isn't a sending failure — it's a trust failure. Your mail is leaving the server but flunking authentication checks. Add SPF, DKIM, and DMARC records, send from a real address on your domain, and verify with a tool like mail-tester. A score of 9/10 or higher usually clears the spam problem.
Is free SMTP good enough, or should I pay?
For low volume — contact forms, password resets, a few receipts — a free mailbox connection or free service tier is genuinely fine. Once you're sending hundreds or thousands of messages, a paid transactional service pays for itself in deliverability and logging. Match the tool to your volume, not your ego.
Can my hosting provider fix WordPress email for me?
A managed host can, yes. On managed WordPress plans like Hostaccent's, the SMTP, DNS authentication, and deliverability layer are set up and maintained for you, removing the most common failure points before they reach your inbox. On unmanaged or basic shared plans, you'll usually configure it yourself.










Discussion
Have a question or tip about this topic? Share it below — your comment will appear after review.