If your contact form submissions never arrive, your customers never get order confirmations, or your password reset emails vanish into thin air, you are dealing with one of the most common WordPress problems: WordPress not sending emails. The good news is that the cause is almost always the same, and the fix takes about 20 minutes once you understand it.
In this guide, you will learn why WordPress emails fail, how to diagnose the exact problem on your site, and how to fix it permanently with authenticated SMTP and proper email authentication.
Why WordPress Emails Fail
Every email WordPress sends — contact form notifications, new user registrations, password resets, comment notifications, and WooCommerce order emails — goes through a single function called wp_mail(). By default, wp_mail() hands the message to PHP’s built-in mail() function, which sends it from your web server with no authentication at all.
That worked fine years ago. It does not work well anymore, for three reasons:
- No authentication. Messages sent through PHP
mail()carry no SPF, DKIM, or DMARC verification, so receiving servers cannot tell your legitimate email apart from a forged one. - Shared server reputation. Most WordPress sites run on shared hosting, where hundreds of sites share one IP address. If one of those sites sends spam, your password reset email gets blocked for someone else’s behaviour.
- No error reporting. When PHP
mail()fails, WordPress usually does not tell you. You only find out when a customer complains that they never received their order confirmation.
On top of that, since February 2024, Gmail and Yahoo have enforced stricter sender requirements: mail that fails SPF or DKIM checks is far more likely to be rejected or sent to spam. Some hosts also restrict or disable PHP mail() entirely to protect their IP reputation.
Quick Checks Before You Change Anything
Before installing anything, rule out the simple causes. Work through these in order:
- Check the spam and junk folders. Ask the recipient to search their spam folder for your site name. If the emails are landing there, the problem is authentication, not delivery — skip ahead to the SMTP fix.
- Verify the admin email address. Go to Settings > General in your WordPress dashboard and confirm the Administration Email Address is correct. A typo here silently breaks every admin notification.
- Check the form’s “Send To” address. Open your contact form’s settings and confirm the notification email goes to an address you actually monitor. Many “missing email” reports turn out to be notifications going to an old inbox.
- Send a test email. Install the free Check Email plugin, or use the email test tool inside WP Mail SMTP once installed, to find out whether WordPress can send mail at all. If the test fails, the problem is on your server. If it succeeds but real emails still vanish, the problem is authentication or spam filtering.
Step 1: Install WP Mail SMTP
The permanent fix is to stop using PHP mail() and route every WordPress email through an authenticated SMTP service instead. The easiest way to do that is with the WP Mail SMTP plugin, one of the most widely used SMTP plugins for WordPress.
- Go to Plugins > Add New and search for “WP Mail SMTP”.
- Install and activate the plugin by WPForms.
- Go to WP Mail SMTP > Settings.
- In the From Email field, enter an address on your own domain, for example
wordpress@yourdomain.com. Never use a free Gmail or Yahoo address as your From address — it will fail authentication checks. - Tick Force From Email and Force From Name. This stops individual plugins from overriding your sender address with an unauthenticated one, which is a common cause of emails landing in spam.
Step 2: Choose and Connect a Mailer
WP Mail SMTP offers several mailers. Which one you pick depends on your volume and budget:
- Your host’s SMTP server. If your hosting plan includes email, you can use its SMTP details (host, port 465 with SSL or 587 with TLS, your full email address, and password). This is fine for low-volume sites, but you are still tied to your host’s sending reputation.
- A transactional email service. Services like Brevo, SendLayer, Mailgun, or SendGrid are built for exactly this job and usually offer a free tier that covers small sites comfortably.
- Gmail or Google Workspace. You can send through Gmail using OAuth or an app password, but Gmail’s sending limits make it a poor fit for a busy store or membership site.
Whichever mailer you choose, enter its credentials in the WP Mail SMTP settings and save. If you are running a WooCommerce store, pick a transactional service rather than your host’s mail server — order emails are revenue-critical, and they deserve a dedicated sending service. If you would like help setting this up properly, you can get in touch with me and I will take care of it for you.
Step 3: Set Up SPF, DKIM, and DMARC
Switching to SMTP is only half the fix. Receiving servers still need proof that your mailer is allowed to send on behalf of your domain. That proof comes from three DNS records:
- SPF (Sender Policy Framework). A TXT record that lists which servers may send mail for your domain. Your mailer will give you the exact value to publish — it usually looks like
v=spf1 include:spf.example.com ~all. Publish exactly one SPF record per domain; multiple SPF records break validation. - DKIM (DomainKeys Identified Mail). A cryptographic signature added to every outgoing message. Your mailer provides a DKIM public key to publish as a TXT or CNAME record in your DNS.
- DMARC (Domain-based Message Authentication, Reporting, and Conformance). A policy record that tells receiving servers what to do with mail that fails SPF or DKIM. Start with monitoring mode (
p=none) so you can review reports before tightening the policy to quarantine or reject.
Add these records in your domain’s DNS panel (your registrar or DNS provider), then allow up to 24–48 hours for DNS propagation. Do this in the right order: fix the sending route first, then the records. SPF and DKIM records mean nothing while messages still go out through PHP mail() with your host’s envelope address on them.
Step 4: Test and Monitor
- In WP Mail SMTP, go to Tools > Email Test and send a test message to your own inbox. It should arrive within a minute or two.
- Check the full headers of the test email to confirm SPF and DKIM both pass for your own domain.
- Send a real test through your contact form and, if you run a store, place a test order to confirm order emails arrive.
- Run your domain through a tool like Mail-Tester to get a deliverability score and catch any remaining issues.
- Keep an eye on things after plugin or hosting updates — a changed setting or a new plugin overriding the From address can quietly break email again.
If Emails Still Do Not Arrive
If WordPress not sending emails is still a problem after the SMTP test passes, work through these culprits:
- Plugin conflicts. Deactivate other email-related plugins one at a time and retest. Contact form plugins with their own SMTP settings are a frequent offender.
- Wrong From address in a form. Even with Force From Email enabled, check each form’s notification settings — some plugins use their own sender fields.
- Hosting firewall rules. Some hosts block outbound connections on SMTP ports. If your mailer connection times out, ask your host to open port 465 or 587.
- Blocklisted IP or domain. Check your sending IP and domain against public blocklists. If you are on shared hosting with a bad neighbour, a transactional mailer solves this immediately.
- Aggressive spam filters. If mail still lands in spam after SPF, DKIM, and DMARC pass, check your message content for spam-trigger words and link shorteners.
For a deeper look at how WordPress handles email under the hood, the WPForms guide to configuring WordPress email settings the right way walks through the same SMTP setup in detail. And if you want your whole site hardened while you are at it, my WordPress security hardening checklist covers the other configuration jobs most site owners skip — including setting up reliable backups so a broken update never costs you data.
Final Thoughts
WordPress not sending emails is almost never a mystery once you know where to look. The default PHP mail() route is unauthenticated, unlogged, and increasingly rejected by major mailbox providers. Route your mail through an authenticated SMTP service with WP Mail SMTP, publish SPF, DKIM, and DMARC records for your domain, and test after every change. That combination fixes the problem for the vast majority of sites — and keeps your contact forms, order confirmations, and password resets landing in the inbox where they belong.
If email deliverability is costing you enquiries or orders, or you would rather have a developer handle the SMTP setup and DNS records for you, contact me and I will get your WordPress emails delivering reliably.