←back to Blog

WordPress not sending emails — SMTP fix graphic

WordPress Not Sending Emails? Here’s the Actual Fix

A contact form gets submitted, WooCommerce processes an order, a customer resets their password, and nothing shows up in the inbox. WordPress not sending emails is one of the most common problems on the platform, and it’s almost never a WordPress bug. It’s a plumbing problem: WordPress was never built to send email reliably on its own, and the default setup fails silently more often than site owners realize.

The good news is that the fix is well understood and takes about 15 minutes once you know what’s actually broken. This post covers why WordPress email fails in the first place, how to fix it with SMTP, and how to test that it’s actually working before a real customer email gets lost.

Why Is My WordPress Site Not Sending Emails?

WordPress site emails fail because the platform’s built-in wp_mail() function hands messages off to the server’s PHP mail() function, which sends without any authentication. Receiving mail providers like Gmail and Outlook increasingly reject or spam-folder anything that arrives unauthenticated, and many hosts disable PHP mail entirely because it’s a common spam vector.

According to WP Mail SMTP, which analyzed data from over 3 million WordPress installs, sites relying on the default PHP mail() function achieve only 64% email deliverability. That means more than one in three WordPress emails never reaches an inbox at all, and there’s usually no error message telling the site owner it happened. The form just looks like it worked.

The Real Fix: Switch to SMTP

The fix for WordPress not sending emails is to stop using PHP mail() and route outgoing mail through an authenticated SMTP connection instead. SMTP (Simple Mail Transfer Protocol) proves to the receiving mail server that the message really came from your domain, which is the single biggest factor in whether it lands in the inbox or the spam folder.

The deliverability gap between the two approaches is not small. WP Mail SMTP’s data shows properly configured SMTP reaching 96.4% deliverability, a 32-point jump over default PHP mail. For a business site where a missed quote request or WooCommerce order confirmation costs real money, that’s not a minor optimization, it’s the difference between a working contact form and a broken one nobody noticed.

SMTP Options Worth Using

  • Your hosting provider’s SMTP, if it offers one, since it’s usually already authenticated for your domain.
  • Gmail SMTP or Google Workspace, a solid free option for low-volume sites already using Google for business email.
  • A transactional email service such as SendLayer, Brevo, or Amazon SES, which scales better for stores and membership sites sending higher email volume.

How Do You Set Up SMTP in WordPress?

Setting up SMTP in WordPress means installing an SMTP plugin, connecting it to an authenticated mail provider, and sending a test email to confirm delivery. The process takes about 15 minutes and doesn’t require touching any server files.

  1. Install a free SMTP plugin (WP Mail SMTP and FluentSMTP are both widely used and well maintained).
  2. Pick a mailer in the plugin settings: hosting SMTP, Gmail, or a transactional service.
  3. Enter the SMTP credentials or connect the account through OAuth, depending on the provider.
  4. Set a consistent “From” name and email address that matches your domain, not a generic address like wordpress@yourdomain.com.
  5. Add the SPF and DKIM records your mail provider gives you to your domain’s DNS settings. Most hosting control panels or domain registrars make this a copy-paste job.
  6. Send a test email from the plugin’s built-in test tool and confirm it lands in the inbox, not spam.

It’s worth making this change on a staging site first if the live site is actively taking orders or leads, so a misconfigured mailer doesn’t create a gap in email delivery while it’s being sorted out.

Contact Form Not Sending? Check These First

A contact form that stops sending email is usually caused by a misconfigured “From” or “To” address, not a broken plugin. If those fields don’t match a real, verified address on the sending domain, mail providers treat the message as spoofed and drop it before it ever reaches an inbox.

For plugins like Contact Form 7, WPForms, or Fluent Forms, the fix is to set the “From” address to something on your own domain (like forms@yourdomain.com) and put the visitor’s submitted email in the “Reply-To” field instead. That way replies still go to the visitor, but the message itself comes from a sender your domain can actually authenticate through SMTP.

Why Are WooCommerce Order Emails Not Sending?

WooCommerce order confirmation and shipping emails fail for the same underlying reason as any other WordPress email: they’re routed through wp_mail() by default, with no authentication behind them. On a store, this is more costly than a missed contact form, since a customer who never receives an order confirmation loses confidence in the purchase and is more likely to open a support ticket or file a chargeback.

The fix is the same SMTP setup described above, applied site-wide, since WooCommerce doesn’t have its own separate mail system. If checkout emails are missing along with a slow checkout page, it’s worth checking the store’s overall checkout performance at the same time, since both problems often trace back to the same overloaded hosting environment.

How to Test If WordPress Email Is Actually Working

The only reliable way to confirm WordPress email is working is to send a real test message through the SMTP plugin’s test tool and check that it arrives in the inbox, not just that it left the server. A form that says “message sent” is not proof of delivery, since WordPress reports success the moment wp_mail() hands the message off, whether or not it ever gets accepted by the receiving server.

After confirming a test email lands correctly, submit an actual contact form and place a test WooCommerce order (if applicable) to verify the full chain end to end. If email problems keep resurfacing after SMTP is configured correctly, it’s worth ruling out a plugin conflict, since a second plugin trying to hook into wp_mail() can quietly override the SMTP settings.

Frequently Asked Questions

WordPress emails usually fail because the platform’s default wp_mail() function sends through PHP mail without authentication, which many hosts disable or which inbox providers flag as spam. Installing an SMTP plugin and connecting an authenticated mail provider fixes this in most cases.

wp_mail() is the built-in WordPress function nearly every plugin uses to send email, and it hands messages to the server’s PHP mail system with no authentication attached. Without authentication, receiving mail servers can’t verify the message is legitimate, so they often reject it or send it straight to spam.

A plugin is the practical way to fix it for most site owners, since SMTP plugins like WP Mail SMTP or FluentSMTP handle the connection and authentication without editing server code. It’s technically possible to configure SMTP manually through custom code, but a plugin is faster and easier to maintain.

Use the built-in test email tool included with most SMTP plugins to send a real message and confirm it arrives in the inbox, not just that WordPress reported success. Follow that up with a real contact form submission or test order to verify the entire chain works end to end.

WooCommerce order emails route through the same unauthenticated wp_mail() function as every other WordPress email, so they fail for the same reason: no SMTP authentication behind them. Setting up SMTP site-wide fixes order confirmations, shipping notices, and password resets at the same time, since WooCommerce doesn’t use a separate mail system.

WordPress not sending emails is rarely a mystery once you know where to look: it’s an authentication problem, not a WordPress bug. Set up SMTP with a real mail provider, verify the From address matches your domain, and test the full chain from form submission to inbox before assuming it’s fixed.

Leave a Reply

Your email address will not be published. Required fields are marked *