How to Fix WordPress Not Sending Emails

WordPress doesn’t send emails the same way a proper mail server does. By default, it uses the server’s PHP mail() function — which most shared hosting providers either disable entirely or run without any sender authentication. The result: contact form submissions vanish, password reset emails never arrive, and WooCommerce order confirmations go missing.

The fix is an SMTP plugin that routes WordPress emails through an authenticated mail server. This guide walks through the setup using WP Mail SMTP — the most widely installed option — and covers Gmail, your hosting provider’s SMTP, and what to do if delivery still fails after setup.

Quick Answer

Install WP Mail SMTP from the WordPress plugin directory. In the plugin settings, select a mailer — Gmail with OAuth is the simplest for most sites — authorise the connection, and run a test email. All WordPress emails (contact forms, password resets, plugin notifications) will then route through the authenticated SMTP connection instead of PHP mail().

Why WordPress Emails Fail

Shared hosting environments frequently disable PHP’s mail() function because it is trivially abused for spam. Even when it is enabled, emails sent this way carry no SPF record, no DKIM signature, and no reverse DNS match — three things spam filters check immediately. Emails pass from WordPress’s perspective but are dropped silently before reaching an inbox.

SMTP authentication changes this. An authenticated connection sends mail from a verified sender, which hosting providers, Gmail, and dedicated email services all recognise as legitimate. If you are also setting up a professional email address for your website, routing SMTP through that address keeps all site communication under your domain.

How to Fix WordPress Email Delivery

Step 1 — Install WP Mail SMTP

Go to Plugins → Add New, search for WP Mail SMTP, and install the free version. Activate it. The plugin replaces WordPress’s default PHP mail() with proper SMTP authentication — no code changes required.

Step 2 — Choose your mailer

After activation, go to WP Mail SMTP → Settings → Mailer. Your options:

  • Gmail / Google Workspace — uses OAuth so no password is stored in WordPress; quickest setup for most sites
  • Your hosting provider’s SMTP — check your host’s control panel for the hostname, port, and credentials; usually under Email Settings
  • Brevo, Mailgun, or SendGrid — purpose-built for transactional email; better for WooCommerce stores sending high volumes
  • Other SMTP — generic option for any provider not listed; requires host, port, username, and password

Step 3 — Connect Gmail using OAuth

Select Google / Gmail as the mailer. Click Allow plugin to send emails using your Google account and complete the authorisation flow. WP Mail SMTP handles the OAuth connection — you will not need to enter a password or generate an app password for this method.

If you need to connect via credentials instead, choose Other SMTP. For Gmail: host smtp.gmail.com, port 587, encryption TLS, and an App Password generated under Google Account → Security → App passwords (requires 2FA to be enabled on your account).

Step 4 — Test email delivery

Go to WP Mail SMTP → Tools → Email Test. Enter an address you can check and click Send Email. If it arrives, all WordPress emails are now routing through your authenticated SMTP connection — contact forms, order confirmations, and password resets included.

If the test fails, WP Mail SMTP shows a specific error message. Common causes are a wrong SMTP port, a missing app password, or a host firewall blocking outbound port 587. For a deeper look at the configuration options, see how to set up SMTP in WordPress.

Practical Tips

In most sites I build, the Gmail OAuth setup takes under five minutes and works immediately. If you have a Google Workspace account on your own domain, use that address as the From Email — emails arrive from your business address rather than a personal Gmail, and your sending reputation is tied to your domain.

After fixing email delivery, check your From Name and From Email in WP Mail SMTP settings. WordPress defaults to “WordPress” as the sender name and a noreply@yourdomain address — both worth updating to your site name and a real address so recipients recognise where the email is from.

If your site uses a contact form, send a test submission after configuring SMTP to confirm notifications reach you. Contact form plugins do not warn you if notifications fail — the form appears to submit successfully, but emails are lost silently.

Common Mistakes

  • Using port 25: Most hosts block outbound port 25 — use 587 (TLS) or 465 (SSL) instead
  • Entering your Google account password instead of an App Password: If 2FA is enabled, your regular password will not work for SMTP — generate an App Password specifically for this connection
  • Skipping the test email: Always run the test after configuration; contact forms do not confirm delivery on their own
  • Mismatched From Email: Some SMTP providers require the From address to match the authenticated account — a mismatch causes silent rejections

When to Use a Dedicated Email Service

Gmail personal accounts send up to 500 emails per day; Google Workspace accounts up to 2,000. For WooCommerce stores or membership sites sending high volumes, a transactional service like Brevo, Mailgun, or Amazon SES is a better fit. These services also provide delivery logs and bounce tracking, which makes diagnosing missing emails far easier than troubleshooting through WordPress alone.

For most informational sites or small business sites, Gmail or your host’s SMTP is more than sufficient. Getting email working reliably is part of setting up WordPress properly — alongside the other steps covered in the step-by-step guide to setting up a WordPress website.

Conclusion

WordPress email problems almost always trace back to PHP mail() running without authentication. Install WP Mail SMTP, connect it to Gmail or your host’s SMTP server, and run the test — that single change fixes contact forms, password resets, and plugin notifications in one go.