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.
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:
mail() function sends with none of these, making your emails look like spam to receiving servers.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.
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:
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.
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.
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
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:
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:
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.
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 Host | smtp.gmail.com |
| SMTP Port | 587 (TLS) or 465 (SSL) |
| Encryption | TLS or SSL |
| Authentication | Yes |
| Username | [email protected] |
| Password | App Password (not your regular Gmail password) |
Important: Gmail requires you to use an App Password rather than your regular account password. To generate one:
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 Host | mail.yourdomain.com or smtp.yourhostname.com |
| SMTP Port | 587 (TLS) or 465 (SSL) |
| Encryption | TLS |
| Username | [email protected] |
| Password | Your 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.
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:
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.
functions.php if your code is in a public Git repository. Store credentials in wp-config.php as constants and reference them here:$phpmailer->Password = defined( 'SMTP_PASSWORD' ) ? SMTP_PASSWORD : '';
Then define the constant in wp-config.php:
define( 'SMTP_PASSWORD', 'your-actual-password' );
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:
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:
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:
WordPress Site <[email protected]>[your-email] (the form field that captures the visitor's email)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:
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.
If WordPress isn't sending registration confirmation emails to new users:
wp_mail() and have the same delivery issuesOnce 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:
Email logs are invaluable for debugging specific email delivery problems — especially for WooCommerce orders where you need to prove an email was sent.
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.
| Problem | Fix |
|---|---|
| All WordPress emails not sending | Configure SMTP via WP Mail SMTP plugin |
| Emails going to spam | Set up SPF, DKIM, DMARC records + use SMTP |
| Contact form emails not arriving | Fix From address to use your own domain, configure SMTP |
| WooCommerce emails not sending | Check WooCommerce email settings, configure SMTP |
| Password reset emails not arriving | Configure SMTP, verify admin email address |
| Host has disabled PHP mail() | Configure SMTP — this completely bypasses PHP mail |
| Want to log all outgoing emails | Install WP Mail Log or use WP Mail SMTP Pro |
| Service | Free Tier | Best For |
|---|---|---|
| Brevo | 300 emails/day free | Small to medium sites, easy setup |
| SendGrid | 100 emails/day free | Developer-friendly, excellent deliverability |
| Mailgun | 1,000 emails/month free | Developers, high volume |
| Amazon SES | ~62,000 emails/month free on EC2 | High volume, very low cost |
| Gmail / Google Workspace | Free with Google account | Small sites already using Google |
| Postmark | 100 emails/month free | Transactional-only, superb reputation |
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.
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.