How to Fix WordPress Not Sending Email

WordPress not sending email is nearly always caused by the built-in PHP mail() function, which many hosts block or which mailbox providers reject for lacking authentication. The reliable fix is to install an SMTP plugin, send through an authenticated mailbox, use a From address on your own domain, and add SPF and DKIM records.

Key takeaways

  • By default WordPress sends mail with PHP mail(), which hosts often disable or rate-limit and which fails authentication checks.
  • The dependable fix is an SMTP plugin that routes mail through an authenticated mailbox or a transactional email service.
  • Your From address must use your own domain — a Gmail or Yahoo address in that field gets your mail rejected or flagged.
  • Add SPF and DKIM (and ideally DMARC) DNS records so mailbox providers trust your messages and keep them out of spam.
  • Always send a test email after each change and confirm it lands in the inbox, not the spam folder.

Your WordPress emails just aren't arriving

A visitor fills in your contact form and you never get the message. A customer resets their password and the email never lands. A WooCommerce order goes through but no receipt shows up. From the outside your site looks fine, yet the emails it is supposed to send quietly vanish. This is the problem people describe as WordPress not sending email, and it is frustrating precisely because nothing on screen tells you an email failed.

Take a breath: this is one of the most common WordPress issues and it is almost always fixable in under an hour. This guide is for site owners on shared or managed WordPress hosting who use contact forms, membership logins, or an online store. If you are new to how mail actually works on a domain, our guide to email hosting is the wider picture this page fits inside.

How to tell what's causing it

Before you change anything, narrow the cause with two quick questions. The answers point you straight at the fix and stop you from chasing the wrong plugin.

Are all emails affected, or just one plugin? If nothing arrives — contact forms, password resets, and WooCommerce receipts all fail — the problem is site-wide and sits with how WordPress sends mail (almost always PHP mail()). If only one plugin's emails fail while others arrive, the fault is more likely that single plugin's own email settings or a form misconfiguration.

Is it truly not sending, or is it landing in spam? These look identical from the dashboard but need different fixes. Send a test email to an address you control (ideally at Gmail and Outlook both), then check the inbox and the spam folder. Nothing anywhere means mail is not being delivered at all. A message sitting in spam means delivery works but your mail lacks trust signals like SPF and DKIM. An email-logging plugin makes this crystal clear by recording every send attempt.

Is it your site or your host? Both sides play a part, which is why the reliable fix sidesteps the question entirely. The host side is PHP mail() being disabled, rate-limited, or having outgoing ports blocked. The your side is the From address and plugin configuration. Switching to authenticated SMTP bypasses PHP mail() (the host issue) and lets you set a proper From address (your issue) in one move — so you rarely need to work out which side was truly at fault.

What's actually happening

Out of the box, WordPress sends every email through PHP mail() — a basic function built into the language WordPress runs on. It hands your message to whatever mail program the server happens to run, with no login and no verification of who you are. That simplicity is exactly the problem. Many hosts disable or rate-limit mail() to curb spam, so your messages never leave the server. Even when they do leave, mailbox providers like Gmail and Outlook increasingly reject or spam-filter unauthenticated mail because it looks like it could be forged.

The missing piece is authentication — proof that your domain really sent the message. That proof comes from two DNS records: SPF (Sender Policy Framework), which lists the servers allowed to send mail for your domain, and DKIM (DomainKeys Identified Mail), which cryptographically signs each message. PHP mail() supplies neither, so your mail arrives unsigned and untrusted. Beyond that core cause, a few other things commonly break WordPress email:

CauseWhat goes wrong
PHP mail() disabled or limitedThe host blocks or throttles the function, so messages never send or send only sometimes.
Mismatched From addressWordPress sends "from" a Gmail or Yahoo address on your domain, which fails authentication and gets rejected or spammed.
Missing SPF / DKIMWithout these records your mail has no trust signals, so providers filter it to spam or drop it.
Blocked outgoing portsThe host firewalls the SMTP ports mail needs, so even a correct setup cannot connect.
Plugin misconfigurationA contact form or notification plugin has the wrong recipient or sender set, or conflicts with another plugin.

The through-line is trust. Modern email delivery rewards messages that prove where they came from and punishes those that cannot. That is why the fix below centres on SMTP (Simple Mail Transfer Protocol) — the standard, authenticated way to send mail with a real login.

Your options at a glance

There is really one dependable path and a couple of choices along it. You install an SMTP plugin, then point it at somewhere that will send your mail with a proper login. That "somewhere" is either your own email host's mailbox or a dedicated transactional email service. Here is the order of attack, from confirming the fault to locking in reliable delivery:

  • Confirm the problem with an email-logging or test plugin.
  • Install an SMTP plugin so WordPress stops using PHP mail().
  • Connect it to a mailbox or transactional service with the right host and port.
  • Set a From address on your own domain.
  • Add SPF and DKIM DNS records so your mail is trusted.
  • Send a test and confirm inbox delivery; check host blocks if it still fails.

How to fix it, step by step

  1. Confirm the problem with a test. Install an email-logging or testing plugin — for example WP Mail SMTP's built-in email test or the Check & Log Email plugin — and send a test message to an address you control. This tells you whether WordPress is failing to send at all, or sending mail that lands in spam. It also logs future attempts so you can prove the fix worked.
  2. Install an SMTP plugin (the real fix). Add an SMTP plugin such as WP Mail SMTP, FluentSMTP, or Post SMTP from Plugins → Add New. These reroute every WordPress email through authenticated SMTP instead of PHP mail(), which is the single change that fixes most cases. Activate the plugin and open its setup wizard.
  3. Connect it to a mailbox or sending service. Point the plugin at somewhere that will send with a login: your email host's SMTP mailbox, or a transactional email service such as SendGrid, Brevo, Mailgun, or Amazon SES. Enter the SMTP host, the port — 587 with STARTTLS or 465 with SSL — your username, and your password or API key. Our guide to SMTP and IMAP ports explains exactly which port and encryption to choose.
  4. Set a From address on your own domain. In the plugin's settings, set the "From" email to an address at your domain, such as noreply@yourdomain.com — never a Gmail or Yahoo address. Mail claiming to be "from" a free provider on your domain fails authentication instantly. Enable any "force From" option so plugins cannot override it.
  5. Add SPF and DKIM records. In your DNS settings, add the SPF and DKIM records your mailbox or transactional service gives you, and ideally a DMARC record too. SPF authorises the sending server; DKIM signs each message; DMARC tells providers what to do if a check fails. Together they tell Gmail and Outlook your mail is genuine, which keeps it out of spam.
  6. Send another test and check the inbox. Use the plugin's email test again and confirm the message arrives in the inbox, not the spam folder. If you can, test against both a Gmail and an Outlook address, since they filter differently. Check the plugin's log to confirm the send succeeded.
  7. If it still fails, check host blocks and conflicts. A stubborn failure usually means your host blocks outgoing mail or the SMTP ports, so ask support whether ports 587 and 465 are open, or use the transactional service's API mode instead of raw SMTP. Also deactivate other email-related plugins briefly to rule out a conflict. For wider server-side symptoms, our server errors guide covers what else to check.

Once mail is landing reliably, keep the logging plugin active for a while so you can spot any future failures early rather than discovering them from a missed order.

Common mistakes to avoid

Warning: Do not leave WordPress on PHP mail() and hope for the best, and never set a free-provider address (like a Gmail or Yahoo address) as the From address on your own domain. Both cause silent delivery failures — the emails simply never arrive, with no error to warn you, so you find out only when a customer complains.

The mistakes that keep WordPress email broken are almost always these:

  • Relying on PHP mail(). It is the default, but it is unauthenticated and often blocked. Authenticated SMTP is the fix, full stop.
  • Using a free-provider From address. A Gmail or Yahoo address in the From field on your domain fails authentication and gets rejected or spammed.
  • Skipping SPF and DKIM. SMTP alone may still land in spam. Without these records, mailbox providers have no reason to trust your mail.
  • Not testing after changes. Assuming a change worked without sending a test is how a broken setup goes unnoticed for weeks. Test after every change.

How to prevent it in future

The prevention rule is simple: always send WordPress mail through authenticated SMTP, with SPF and DKIM in place. Set this up when you build a site, not after the first missed email. Keep your SMTP plugin and its connected mailbox or service configured, and leave a From address on your own domain locked in.

Beyond that, add a DMARC record once SPF and DKIM are working, since it strengthens trust and gives you reports on how your mail is being handled. Keep an email-logging plugin active so failures surface immediately, and review your logs occasionally — especially after changing hosts, mailboxes, or DNS. A little monitoring turns email from a recurring surprise into something you can rely on.

Frequently asked questions

Why is WordPress not sending emails?

Because WordPress sends mail by default through the PHP mail() function, which many hosts disable or rate-limit and which mailbox providers reject for lacking authentication. Other causes include a From address that does not match your domain, blocked outgoing ports, or a misconfigured contact-form plugin. The reliable fix is to install an SMTP plugin, send through an authenticated mailbox, and add SPF and DKIM records so your mail is trusted.

What is an SMTP plugin and why do I need one?

An SMTP plugin makes WordPress send email through SMTP (Simple Mail Transfer Protocol) — an authenticated connection with a real username and password — instead of the unauthenticated PHP mail() function. You need one because SMTP proves who is sending the message, which is exactly what hosts and mailbox providers require. Popular choices include WP Mail SMTP, FluentSMTP, and Post SMTP, and installing one fixes the majority of "not sending" problems.

Why do my WordPress emails go to spam?

Usually because your mail lacks authentication records. Without SPF and DKIM in your DNS, mailbox providers cannot confirm your domain really sent the message, so they filter it to spam. A mismatched From address (such as a Gmail address on your own domain) has the same effect. Add SPF and DKIM records from your mailbox or sending service, set a From address on your domain, and delivery to the inbox improves quickly.

Do I need a transactional email service?

Not always, but it helps for volume and reliability. Your own email host's SMTP mailbox is fine for a low-traffic contact form. If you run a store or send many password resets and receipts, a transactional service such as SendGrid, Brevo, Mailgun, or Amazon SES is built for bulk sending, keeps your reputation clean, and provides delivery logs. Either way, you still connect it through an SMTP plugin and set up SPF and DKIM.

Is this my host's fault?

Partly, but the fix is on your side either way. Hosts often disable or rate-limit PHP mail() and may block outgoing SMTP ports, which is a host-side limitation. The From address and plugin configuration are yours to set. Switching to authenticated SMTP bypasses the host's mail() restrictions and lets you fix the sender settings in one move, so you rarely need to decide who was to blame.

How do I test whether WordPress is sending email?

Use an email-logging or testing plugin such as WP Mail SMTP's email test or the Check & Log Email plugin, then send a test message to an address you control. Check both the inbox and the spam folder. Nothing anywhere means mail is not being delivered; a message in spam means delivery works but authentication is missing. The log also records every future send so you can confirm your fix keeps working.

What From address should WordPress use?

Always an address on your own domain, such as noreply@yourdomain.com or hello@yourdomain.com. Never use a free-provider address like a Gmail or Yahoo address in the From field, because mail claiming to come from a free provider on your domain fails authentication and gets rejected or spammed. Set this in your SMTP plugin and enable any "force From" option so other plugins cannot override it.

Summary

WordPress not sending email looks mysterious but has a predictable cause: the default PHP mail() function is unauthenticated, so hosts block it and mailbox providers distrust it. The fix is equally predictable — install an SMTP plugin, send through an authenticated mailbox or transactional service, set a From address on your own domain, and add SPF and DKIM so your mail is trusted, testing after each step. To get the ports and encryption right the first time, read our guide to SMTP and IMAP ports next. If you want to zoom out to how mail works across your whole domain, the email hosting guide is the hub for this category.

References

  • WordPress Developer Documentation — wp_mail() and the default PHP mail() transport.
  • WP Mail SMTP and FluentSMTP documentation — connecting WordPress to authenticated SMTP and transactional services.
  • Google and Microsoft sender guidelines — SPF, DKIM, and DMARC requirements for bulk and transactional mail.
  • IETF standards — SMTP (RFC 5321), SPF (RFC 7208), and DKIM (RFC 6376).
Bitrich777 Hosting Team
About the author

The editorial team behind the Bitrich777 Hosting Help Center — practical, tested guides on web hosting, WordPress, servers, DNS, SSL, email, security and migration. Every walkthrough is reproduced on a live host before it is published.

Spotted an error? Tell us