WordPress Email Not Sending? Here’s How to Fix It

Your contact form submissions are disappearing into thin air. Password reset emails never arrive. WooCommerce order confirmations aren't reaching customers. New user registration emails are missing.

All of these problems share one root cause: WordPress is not sending emails.

This is one of the most common — and most damaging — WordPress problems a site owner can face. Unlike a visual error that you notice immediately, email delivery failures can go undetected for days or weeks, silently costing you leads, sales, and user trust.

The good news is that the fix is well understood. In almost every case, the solution is to configure WordPress to send emails through a proper SMTP server instead of relying on PHP's default mail function. This guide explains exactly why WordPress email fails, and walks you through every fix step by step.

Why WordPress Email Fails: The Root Cause

By default, WordPress sends emails using PHP's built-in wp_mail() function, which in turn uses the server's local mail() function. This works on paper — but in practice, it almost always fails in the real world.

Here's why:

  • Shared hosting servers are not trusted email senders. When your WordPress site sends an email via PHP, it comes from your web server's IP address with no proper authentication. Major email providers — Gmail, Outlook, Yahoo — see this as a red flag. Emails sent this way are either silently dropped or routed directly to spam folder.
  • No SPF, DKIM, or DMARC authentication. Proper email delivery requires authentication records that prove you're authorised to send from your domain. PHP's mail() function sends with none of these, making your emails look like spam to receiving servers.
  • Hosting providers often disable PHP mail entirely. Many shared hosting providers have disabled the PHP mail() function altogether on their servers — both to reduce spam abuse and to push users toward proper SMTP solutions. If your host has done this, WordPress can't send a single email regardless of settings.

The solution: Configure WordPress to send emails through a dedicated SMTP (Simple Mail Transfer Protocol) server — either your hosting provider's SMTP, Gmail SMTP, or a dedicated transactional email service. Emails sent via SMTP are authenticated, trusted, and reliably delivered.

Step 1: Confirm WordPress Email Is Actually Broken

Before diving into fixes, confirm that WordPress email is genuinely not sending — rather than emails being sent but landing in spam.

Check your spam folder first.

Ask yourself or your test recipient to check their spam or junk mail folder. A significant portion of "WordPress email not sending" reports turn out to be emails that were delivered but flagged as spam. If your emails are in spam, the SMTP fix below will resolve this permanently.

Send a test email from WordPress.

The quickest way to test email delivery directly from WordPress is with the WP Mail SMTP plugin's built-in email test tool:

  1. Install and activate WP Mail SMTP (free version)
  2. Go to WP Mail SMTP → Tools → Email Test
  3. Enter your email address and click Send Email
  4. Check your inbox (and spam folder)

If the test email doesn't arrive, WordPress email is broken and you need to configure SMTP. If it arrives in spam, you need SMTP for proper authentication.

The Fix: Configure WordPress to Use SMTP

This is the definitive fix for WordPress email not sending. Every other fix in this guide is either a precursor to this or a supplement to it.

SMTP configuration tells WordPress to hand off email delivery to a trusted, authenticated mail server — instead of trying to send it directly from your web server using PHP mail.

There are several SMTP options. We'll cover the most popular ones.

Option A: Fix With WP Mail SMTP Plugin (Recommended)

WP Mail SMTP is the most widely used WordPress email plugin, with over 3 million active installations. It supports every major email service and handles all the technical configuration for you.

Step 1: Install WP Mail SMTP

  1. Go to Plugins → Add New
  2. Search for WP Mail SMTP
  3. Install and activate the free version

Step 2: Run the Setup Wizard

After activation, WP Mail SMTP will prompt you to run its setup wizard. Click Let's Get Started.

Step 3: Choose your mailer

WP Mail SMTP supports the following mailers:

  • SendLayer — Recommended for reliability and ease of setup
  • SMTP.com — Dedicated transactional email service
  • Brevo (formerly Sendinblue) — Free tier available, excellent deliverability
  • Mailgun — Developer-friendly, very reliable
  • SendGrid — Industry-leading deliverability, free tier available
  • Amazon SES — Extremely cost-effective at scale
  • Gmail / Google Workspace — Great for small sites already using Google
  • Other SMTP — Use any SMTP server including your hosting provider's

For most small to medium WordPress sites, Brevo or SendGrid are excellent free options with high deliverability.

Step 4: Configure your chosen mailer

The exact steps depend on which mailer you choose. WP Mail SMTP's wizard guides you through each one. The general process is:

  1. Create a free account with your chosen email service
  2. Verify your sending domain (add DNS records they provide)
  3. Get your API key or SMTP credentials from their dashboard
  4. Enter them in WP Mail SMTP's settings

Step 5: Send a test email

Go to WP Mail SMTP → Tools → Email Test, send a test, and confirm delivery. Check both your inbox and spam folder.

Option B: Configure Gmail SMTP Manually

If your site already uses Google Workspace (formerly G Suite) or you want to send WordPress emails from a Gmail address, you can configure Gmail as your SMTP server.

Using WP Mail SMTP with Gmail (easiest):

WP Mail SMTP's Gmail mailer handles the OAuth authentication automatically. Follow their setup wizard and select Gmail — it will walk you through connecting your Google account securely.

Manual Gmail SMTP settings (if configuring without the full plugin):

Setting Value
SMTP Hostsmtp.gmail.com
SMTP Port587 (TLS) or 465 (SSL)
EncryptionTLS or SSL
AuthenticationYes
Username[email protected]
PasswordApp Password (not your regular Gmail password)

Important: Gmail requires you to use an App Password rather than your regular account password. To generate one:

  1. Go to your Google Account → Security
  2. Enable 2-Step Verification (required for App Passwords)
  3. Go to Security → App Passwords
  4. Generate a new app password for "Mail" and "Windows Computer" (or your device)
  5. Use the 16-character password generated as your SMTP password

Option C: Use Your Hosting Provider's SMTP Server

Most hosting providers operate their own SMTP servers that are pre-authenticated for domains hosted on their platform. This is often the simplest option if you don't want to set up a third-party email service.

Find your host's SMTP settings:

Check your hosting provider's documentation or support pages for SMTP credentials. Common formats:

Setting Typical Value
SMTP Hostmail.yourdomain.com or smtp.yourhostname.com
SMTP Port587 (TLS) or 465 (SSL)
EncryptionTLS
Username[email protected]
PasswordYour email account password

Enter these into WP Mail SMTP under WP Mail SMTP → Settings → Mailer → Other SMTP.

Note: Using your hosting SMTP is reliable but doesn't give you the delivery analytics, bounce handling, and inbox rate optimisation that dedicated transactional email services provide. For WooCommerce stores or high-volume sites, a dedicated service is worth the setup.

Option D: Use a Transactional Email Service Directly (No Plugin)

For developers who prefer a code-based approach or want to minimise plugin usage, you can configure SMTP directly in wp-config.php using the phpmailer_init action hook.

Add this to your theme's functions.php or a custom plugin:

PHP
add_action( 'phpmailer_init', 'acemindtech_configure_smtp' );
function acemindtech_configure_smtp( $phpmailer ) {
    $phpmailer->isSMTP();
    $phpmailer->Host       = 'smtp.sendgrid.net'; // Your SMTP host
    $phpmailer->SMTPAuth   = true;
    $phpmailer->Port       = 587;
    $phpmailer->Username   = 'apikey'; // SendGrid uses 'apikey' as username
    $phpmailer->Password   = 'YOUR_SENDGRID_API_KEY';
    $phpmailer->SMTPSecure = 'tls';
    $phpmailer->From       = '[email protected]';
    $phpmailer->FromName   = 'Your Site Name';
}

Replace the host, port, username, password, and from address with your actual SMTP provider's details.

Security note: Never hardcode credentials directly in functions.php if your code is in a public Git repository. Store credentials in wp-config.php as constants and reference them here:
PHP
$phpmailer->Password = defined( 'SMTP_PASSWORD' ) ? SMTP_PASSWORD : '';

Then define the constant in wp-config.php:

PHP
define( 'SMTP_PASSWORD', 'your-actual-password' );

Fix Specific WordPress Email Problems

WordPress Password Reset Email Not Arriving

Password reset emails are sent by WordPress core and go through wp_mail() — so they're affected by all the same delivery issues. Once you configure SMTP as above, password reset emails will be sent through your authenticated mail server and should arrive reliably.

Additional checks specific to password reset emails:

  • Make sure the admin email address in Settings → General is correct and reachable — WordPress sends password reset emails from this address, and some servers reject mail with an unverifiable sender
  • Check that your site's domain has proper MX records configured — even outgoing email benefits from a properly configured domain
  • If users report the email goes to spam, set up proper SPF and DKIM records for your domain (your transactional email service will provide these)

Contact Form Email Not Sending

If your contact form (Contact Form 7, WPForms, Gravity Forms, Ninja Forms, etc.) isn't sending notification emails, the fix is the same — configure SMTP. But there are a few form-specific things to check as well:

Check the form's email settings:

  1. Go to your contact form plugin's settings
  2. Open the notification/email settings for your form
  3. Verify the "To" email address is correct
  4. Check the "From" email address — this is critical

The most common contact form email mistake:

Many contact forms are configured to send from the visitor's email address (e.g., {visitor-email}) as the From field. When WordPress tries to send from a Gmail or Yahoo address that it doesn't own, those providers' DMARC policies reject the email outright — and it vanishes.

Fix: Always set the From address to an email address at your own domain (e.g., [email protected] or [email protected]). Use the visitor's email address as the Reply-To field instead — this way, when you reply to the notification, your reply goes to the visitor.

In Contact Form 7:

  • Go to the Mail tab of your form
  • Set From to: WordPress Site <[email protected]>
  • Set Reply-To to: [your-email] (the form field that captures the visitor's email)

WooCommerce Emails Not Sending

WooCommerce relies heavily on email — order confirmations, shipping notifications, refund emails, and more. If these aren't reaching customers, it directly impacts your business.

Step 1: Check WooCommerce email settings

Go to WooCommerce → Settings → Emails and verify:

  • Each email type is enabled (green checkbox)
  • The recipient email addresses are correct
  • The "From" name and "From" address are set to your domain email

Step 2: Send a test WooCommerce email

On the WooCommerce → Settings → Emails page, click any email type (e.g., New Order) and then click Send test email in the top right. Check your inbox.

Step 3: Configure SMTP

If the test email doesn't arrive, configure SMTP as described above. WooCommerce emails go through wp_mail() just like all WordPress emails — fixing SMTP fixes WooCommerce email delivery too.

Step 4: Check for plugin conflicts

Some third-party WooCommerce plugins override email functionality. If emails were working and suddenly stopped after installing a new plugin, deactivate recently installed plugins and test again.

New User Registration Emails Not Sending

If WordPress isn't sending registration confirmation emails to new users:

  1. Go to Settings → General and confirm "Anyone can register" is enabled if you want registration emails
  2. Check Settings → General → Administration Email Address — this is the sender address
  3. Verify the new user's email address doesn't have a typo
  4. Configure SMTP — registration emails go through wp_mail() and have the same delivery issues

Check Your Email Logs

Once SMTP is configured, it's useful to log all outgoing emails so you can see exactly what's being sent, to whom, and whether it was delivered.

WP Mail SMTP Pro includes email logging. For a free option:

  1. Install WP Mail Log plugin
  2. Go to WP Mail Log in your dashboard
  3. All outgoing emails are logged with recipient, subject, status, and timestamp

Email logs are invaluable for debugging specific email delivery problems — especially for WooCommerce orders where you need to prove an email was sent.

Set Up SPF, DKIM, and DMARC Records

Even with SMTP configured, you should set up proper email authentication DNS records for your domain. These tell receiving mail servers that your emails are legitimate and authorised.

SPF (Sender Policy Framework): Lists which servers are authorised to send email from your domain.

DKIM (DomainKeys Identified Mail): Adds a cryptographic signature to outgoing emails that receivers can verify.

DMARC (Domain-based Message Authentication): Tells receiving servers what to do with emails that fail SPF or DKIM checks.

Your transactional email service (SendGrid, Brevo, Mailgun, etc.) will provide the exact DNS records to add. These are added as TXT records in your domain's DNS settings — usually via your domain registrar or hosting control panel.

Getting these three records in place is the single most effective thing you can do to ensure your WordPress emails land in the inbox rather than spam.

Quick Reference: WordPress Email Fix Summary

Problem Fix
All WordPress emails not sendingConfigure SMTP via WP Mail SMTP plugin
Emails going to spamSet up SPF, DKIM, DMARC records + use SMTP
Contact form emails not arrivingFix From address to use your own domain, configure SMTP
WooCommerce emails not sendingCheck WooCommerce email settings, configure SMTP
Password reset emails not arrivingConfigure SMTP, verify admin email address
Host has disabled PHP mail()Configure SMTP — this completely bypasses PHP mail
Want to log all outgoing emailsInstall WP Mail Log or use WP Mail SMTP Pro

Recommended SMTP Services Compared

Service Free Tier Best For
Brevo300 emails/day freeSmall to medium sites, easy setup
SendGrid100 emails/day freeDeveloper-friendly, excellent deliverability
Mailgun1,000 emails/month freeDevelopers, high volume
Amazon SES~62,000 emails/month free on EC2High volume, very low cost
Gmail / Google WorkspaceFree with Google accountSmall sites already using Google
Postmark100 emails/month freeTransactional-only, superb reputation

Frequently Asked Questions

Q: Why did WordPress email stop working suddenly after it was fine before?
A: The most common sudden causes are: your hosting provider disabled PHP mail on the server, your server's IP address was blacklisted by email providers, or a plugin update changed email settings. Configure SMTP — this permanently bypasses the unreliable PHP mail function.
Q: Do I need a paid plugin to fix WordPress email?
A: No. The free version of WP Mail SMTP combined with a free tier from Brevo, SendGrid, or Gmail is completely sufficient for most WordPress sites. The paid version adds email logging, detailed delivery reports, and white-label setup — useful but not essential.
Q: Can I use Gmail to send all my WordPress emails?
A: Yes, but with caveats. Gmail has a daily sending limit of around 500 emails per day for free accounts and 2,000 for Google Workspace. For low-volume sites this is fine. For WooCommerce stores or high-traffic sites, use a dedicated transactional email service instead.
Q: My SMTP credentials are correct but email still isn't sending. What now?
A: Check whether your hosting provider's firewall blocks outgoing SMTP connections on port 587 or 465. Some shared hosts block these ports. Try switching to port 2525 if available, or contact your host to confirm SMTP connections are permitted. Alternatively, use an API-based mailer (SendGrid, Brevo API) instead of SMTP — these use HTTPS and aren't affected by port blocking.
Q: Is it safe to store SMTP passwords in wp-config.php?
A: Yes — wp-config.php is outside the web root on most properly configured servers and can't be accessed via a browser. It's the standard WordPress location for sensitive credentials. Just make sure your wp-config.php is never committed to a public Git repository.

Final Thoughts

WordPress email not sending is one of those problems that looks mysterious on the surface but has a straightforward solution: stop relying on PHP mail and configure a proper SMTP connection instead.

Install WP Mail SMTP, connect it to a transactional email service, add your SPF and DKIM DNS records, and your WordPress emails — contact forms, password resets, WooCommerce notifications, and everything else — will reach inboxes reliably from that point forward.

Don't let another lead slip through the cracks or a customer go without their order confirmation. Fix your WordPress email today.

Need help configuring WordPress email delivery or setting up SMTP for your WooCommerce store? Our team handles email configuration as part of every WordPress project we work on.

Contact us today and we'll get your WordPress email working properly.
Views: 165