Someone fills in your contact form and clicks Submit. They see the success message. You never get the email.
Or a new user registers on your site and their welcome email never arrives. Or a customer places a WooCommerce order and the confirmation email disappears into nothing.
WordPress email failures are uniquely frustrating because they’re silent. No error message. No notification that something went wrong. The form appears to work, the user thinks their message was sent, and you’re just not receiving anything — often for days or weeks before you notice.
Quick Fix:
In most cases, WordPress emails fail because PHP mail() is unreliable or blocked by your host. Install WP Mail SMTP, connect it to a domain email account (not Gmail), then send a test email. This fixes most WordPress email problems in under 10 minutes.
The good news is that this problem is almost always fixable, and the most common fix takes about 10 minutes. But before jumping straight to solutions, it’s worth spending two minutes diagnosing exactly what’s happening on your site — because “WordPress not sending emails” can mean several different things, each with a slightly different fix.
This post is part of the Common WordPress Errors and How to Fix Them troubleshooting series.
Why WordPress Struggles With Email Delivery
To understand the fix, you need to understand why this happens in the first place.
By default, WordPress sends emails using PHP’s built-in mail() function. This function asks your hosting server to send the email on WordPress’s behalf. The problem is that this method has no authentication — it doesn’t prove to receiving email servers (Gmail, Outlook, Yahoo) that the email is legitimate and actually comes from your domain.
Modern email providers are aggressive about filtering unauthenticated email. Gmail in particular now blocks or silently discards emails that don’t meet its authentication requirements. An email sent via PHP mail() from a shared hosting server looks, to Gmail’s spam filters, exactly like spam — because it has no way to prove otherwise.
There’s also a second problem: many hosting providers either don’t support PHP mail() at all, rate-limit it heavily, or block it entirely to prevent their servers from being used for spam campaigns. If your host has disabled PHP mail(), WordPress emails won’t even leave your server.
The result: your WordPress site sends what it thinks is an email, the server either blocks it or passes it along, the receiving email server either discards it silently or drops it into spam, and you never see it.
If emails suddenly stopped after installing or updating a plugin, temporarily deactivate recently added plugins and test again.
Step 1: Diagnose What’s Actually Happening
Before installing any plugin or changing any settings, spend a few minutes confirming exactly what the problem is. The fix depends on the diagnosis.
Check 1: Is It in Your Spam Folder?
This sounds obvious but it’s the most commonly skipped step. Check your spam, junk, and promotions folders (Gmail’s Promotions tab catches a lot of legitimate WordPress emails). If you find your WordPress emails in spam, the emails are being sent — they’re just not being delivered to your inbox. The fix is different from a situation where emails aren’t being sent at all.
Check 2: Test Whether WordPress Can Send Email At All
Install the free Check & Log Email plugin (search for it in Plugins → Add New). Once activated, go to Tools → Check & Log Email and send a test email to your address.
If the test email arrives in your inbox — WordPress can send email. The problem is either with a specific plugin’s settings or with email authentication causing deliverability issues.
If the test email doesn’t arrive anywhere (inbox or spam) — WordPress can’t send email at all. The problem is at the server or configuration level.
If you get an error message when sending the test — note the exact error. It usually tells you exactly what’s wrong.
Check 3: Verify Your WordPress Admin Email
Go to Settings → General in your WordPress dashboard. Check the Administration Email Address field. This is the address WordPress uses for notifications. Make sure it’s correct and that it’s an email address you actively check.
A wrong or outdated email address here causes many “WordPress not sending emails” reports that are actually just emails going to an address nobody checks.
Check 4: Check Your From Email Address
This is one of the most overlooked causes of email delivery failures. If your WordPress site or contact form is sending emails from a Gmail, Yahoo, Hotmail, or other free email provider address — that’s a problem.
Gmail and Yahoo now enforce strict policies called DMARC that prevent their addresses from being used to send email from third-party servers. When WordPress tries to send an email “from” yourname@gmail.com through your hosting server, Gmail’s DMARC policy blocks it because it didn’t come from Gmail’s own servers.
The fix: always use an email address at your own domain (like hello@yourdomain.com or contact@yourdomain.com) as the “from” address in WordPress and your contact form settings. Never use a free email provider address.
Check 5: Check Your Contact Form Plugin’s Notification Settings
If WordPress can send email (the test in Check 2 worked) but your contact form isn’t sending notifications, the problem may be in your form plugin’s settings rather than WordPress email itself.
Forminator (common with Divi sites):
Go to Forminator → Forms → Edit your form → Email Notifications. Check that the To address is correct, the From Email is your domain email (not Gmail or Yahoo), and notifications are enabled.
Contact Form 7:
Open the form in the WordPress editor → Mail tab. Check the To, From, and Subject fields. Make sure the From field uses your domain email address.
WPForms:
Open the form → Settings → Notifications. Verify the Send To Email Address, From Email, and that notifications are toggled on.
How to Fix WordPress Not Sending Emails Using SMTP
Whether emails aren’t sending at all or are landing in spam, the permanent fix is the same: configure WordPress to send emails through a proper SMTP (Simple Mail Transfer Protocol) service instead of relying on PHP mail().
SMTP sends emails through an authenticated email server — one that can prove to receiving servers that your emails are legitimate. This dramatically improves deliverability and resolves the vast majority of WordPress email problems.
Option 1: Use Your Hostinger Email as SMTP (Free — Recommended for Hostinger Users)
If you’re on Hostinger, you have a free business email account available through Titan Email — included with your hosting plan. This is the simplest and most cost-effective SMTP option for most small WordPress sites. You’re using your own domain email, through your own hosting provider, with no third-party service required.
Step 1 — Set up your Hostinger email account:
Log into Hostinger hPanel → go to Emails → Email Accounts. Create an email account at your domain (for example, hello@yourdomain.com). Note the SMTP settings shown — you’ll need:
- SMTP host: smtp.titan.email (or as shown in your hPanel)
- SMTP port: 465 (SSL) or 587 (TLS)
- Username: your full email address
- Password: the password you set for this email account
Step 2 — Install WP Mail SMTP:
Go to Plugins → Add New, search for WP Mail SMTP, install and activate the free version.
Step 3 — Configure WP Mail SMTP:
Go to WP Mail SMTP → Settings. Under the Mailer section, select Other SMTP.
Fill in:
- From Email: your Hostinger email address (hello@yourdomain.com)
- From Name: your name or business name
- SMTP Host: smtp.titan.email
- Encryption: SSL
- SMTP Port: 465
- Authentication: ON
- SMTP Username: your full email address
- SMTP Password: your email account password
Click Save Settings.
Step 4 — Send a test email:
Go to WP Mail SMTP → Tools → Email Test. Enter your personal email address and click Send Email. Check that it arrives in your inbox (not spam). If it does, your SMTP setup is working correctly.
Option 2: Use Gmail (Google Workspace) as SMTP
If you use Google Workspace (paid Gmail with your domain), you can send WordPress emails through your Google account. This gives excellent deliverability because emails come from Google’s servers.
In WP Mail SMTP settings, select Gmail as your mailer. WP Mail SMTP will guide you through connecting your Google account via OAuth — no password needed, just authorisation. This is more secure than using a password and highly reliable.
Note: this requires Google Workspace (a paid Google account with your domain), not a regular free Gmail account. Free Gmail accounts are not recommended for WordPress SMTP because Gmail’s DMARC policies often cause delivery failures.
Option 3: Use a Transactional Email Service
For sites with higher email volume — WooCommerce stores, membership sites, or any site sending significant numbers of emails — a dedicated transactional email service is more appropriate than routing through hosting SMTP.
Brevo (formerly Sendinblue) — free tier allows 300 emails/day. Good for most small to medium WordPress sites. Has a direct integration in WP Mail SMTP.
Mailgun — reliable and developer-friendly. Free tier allows 100 emails/day. Requires DNS record setup for authentication.
SendLayer — purpose-built for WordPress transactional email. Integrates directly with WP Mail SMTP. Paid plans start at low monthly rates.
Amazon SES — extremely low cost at high volume ($0.10 per 1,000 emails). Requires more technical setup and DNS configuration. Good for WooCommerce stores with high order volumes.
In WP Mail SMTP, select your chosen provider from the Mailer dropdown and follow the plugin’s configuration wizard for that specific service.
Step 3: How to Set Up SPF, DKIM, and DMARC for WordPress Email
Even after configuring SMTP, emails can still land in spam if your domain doesn’t have proper email authentication records. These are DNS records that tell receiving email servers that your domain is allowed to send email through your chosen SMTP service.
There are three records to set up:
SPF (Sender Policy Framework)
An SPF record specifies which mail servers are authorised to send email on behalf of your domain. Without it, receiving servers can’t verify your emails are legitimate.
Add a TXT record to your domain’s DNS settings:
v=spf1 include:spf.titan.email ~all
(If you’re using a different SMTP service, they’ll provide their specific SPF record value.)
In Hostinger, go to hPanel → Domains → DNS Zone and add a new TXT record with the value above. Your Titan email account may already have this configured automatically — check your existing DNS records first.
DKIM (DomainKeys Identified Mail)
DKIM adds a digital signature to your outgoing emails, proving they came from an authorised source and weren’t altered in transit. This is one of the most important authentication signals for Gmail and other major providers.
Your email provider (Titan, Google Workspace, Brevo, etc.) will provide you with a DKIM record to add to your DNS. In Hostinger’s hPanel, go to Emails → Email Accounts → your account → DNS Records — Titan Email usually sets these up automatically.
DMARC (Domain-based Message Authentication)
DMARC tells receiving email servers what to do with emails that fail SPF or DKIM checks — quarantine them, reject them, or let them through. Without a DMARC record, your domain is more vulnerable to spoofing.
Add a TXT record to your DNS:
_dmarc.yourdomain.com → v=DMARC1; p=quarantine; rua=mailto:youremail@yourdomain.com
Start with p=quarantine rather than p=reject — quarantine sends failing emails to spam rather than blocking them entirely, which gives you time to ensure your legitimate emails are passing before applying the stricter reject policy.
After adding these records, use a free tool like mail-tester.com to send a test email and get a deliverability score with specific feedback on your authentication setup.
Common Scenarios and Specific Fixes
Contact Form 7 Not Sending Emails
Contact Form 7 uses WordPress’s mail system directly, which makes it dependent on your server’s PHP mail configuration. The fix is the same as above — configure WP Mail SMTP — but there are a few CF7-specific settings to check:
In your CF7 form settings → Mail tab:
- Make sure the From field uses your domain email address, not a variable that pulls the submitter’s email (like [your-email]). The From address should always be your domain email. Use the Reply-To field to capture the visitor’s email address instead.
- Check that the To field has the correct recipient email
- Add Reply-To: [your-email] in the Additional Headers field — this way when you reply to a form notification, it goes to the person who filled in the form rather than back to your own address
Forminator Not Sending Emails
Forminator (WPMU DEV’s form plugin, popular with Divi users) has its own email notification system. Go to Forminator → Forms → Edit your form → Email Notifications.
Common Forminator-specific issues:
- The notification email is enabled but the recipient address is wrong or missing
- The From Email is set to a free email provider (Gmail/Yahoo) — change this to your domain email
- Caching is interfering with form submissions — if your caching plugin is caching the page with the form, the security nonce (a token that verifies form submissions) expires, causing silent submission failures. Add your form page URL to your caching plugin’s exclusion list.
WooCommerce Order Emails Not Sending
WooCommerce has its own email system built on top of WordPress mail. If order confirmation, shipping notification, or admin order emails aren’t sending:
First check: go to WooCommerce → Settings → Emails and verify that each email type is enabled and has the correct recipient address.
Second check: go to an individual email type (like New Order) and click Send test email. If the test arrives, the issue is with the order process rather than the email system itself.
If WooCommerce emails were working and suddenly stopped: check whether a plugin update broke something, and whether your SMTP configuration is still intact by sending a test from WP Mail SMTP → Tools → Email Test.
Password Reset Emails Not Arriving
WordPress password reset emails are sent by WordPress core directly, not through any plugin. If these aren’t arriving, PHP mail() is the culprit — the fix is installing WP Mail SMTP as described above.
Also check that your WordPress admin email address in Settings → General is correct — password reset emails go to the address associated with the user account, but if the admin email is wrong, admin notifications about password resets won’t arrive.
Emails Working But Going to Spam
If emails are arriving but in spam, you have a deliverability issue rather than a sending failure. The fixes are:
- Set up SPF, DKIM, and DMARC records as described above
- Make sure your From email uses your domain, not a free provider
- Check whether your hosting server’s IP address has a poor spam reputation — if you’re on shared hosting and another site on the same server is sending spam, your emails may be affected. A dedicated IP or a transactional email service bypasses this.
- Review your email content — emails with certain trigger words, all-caps subject lines, or excessive links can trigger spam filters regardless of authentication
How to Enable Email Logging
Once your SMTP is configured, enable email logging so you can monitor what’s being sent and quickly diagnose any future issues.
In WP Mail SMTP (free version), go to WP Mail SMTP → Settings → Email Log and enable logging. Every email WordPress sends will be recorded with its status (sent, failed), recipient, subject, and timestamp.
This single setting transforms email troubleshooting from guesswork into a 30-second check. Instead of “I’m not getting form emails” being a mystery, you can open the log and immediately see whether the email was sent, whether it failed, and if it failed, why.
The Check & Log Email plugin mentioned in the diagnosis section also provides logging functionality if you prefer a standalone tool.
If SMTP Is Configured But Emails Are Still Not Arriving
This scenario — SMTP is set up, the test email works, but real emails from forms or WooCommerce still don’t arrive — is more common than you’d think. Here’s what to check:
The caching problem. Contact forms with security nonces (anti-spam tokens) fail silently when the page is cached. The form appears to submit but the nonce has expired because the cached version of the page is serving an old token. Fix: add your contact page and any pages with forms to your caching plugin’s exclusion list. In LiteSpeed Cache, go to Cache → Excludes and add the form page URL. In WP Rocket, go to Advanced Rules → Never Cache These Pages.
Rate limiting. If you’re using a transactional email service with a free tier, you may have hit the daily sending limit. Check your email service dashboard for sending stats and any quota warnings.
Wrong SMTP credentials after a password change. If you changed your email account password, WP Mail SMTP is still using the old one. Go to WP Mail SMTP → Settings and update the SMTP password.
Port blocked by hosting. Some hosting providers block certain SMTP ports (particularly port 25). If port 465 isn’t working, try port 587 with TLS encryption instead. Contact your host to confirm which ports are available.
Plugin conflict. Another plugin may be intercepting WordPress’s wp_mail() function and breaking it. Temporarily disable all plugins except WP Mail SMTP and test. If email works with other plugins disabled, reactivate them one by one until you find the conflict.
Quick Reference: WordPress Email Fixes by Symptom
| What You’re Seeing | Most Likely Cause | Fix |
|---|---|---|
| No emails arriving anywhere | PHP mail() blocked by host | Set up SMTP via WP Mail SMTP |
| Emails arriving in spam | No email authentication | Set up SPF, DKIM, DMARC records |
| Form submits but no notification | Wrong From email or form settings | Check form notification settings, use domain email as From |
| SMTP set up but forms still failing | Caching nonce expiry | Exclude form pages from cache |
| Password reset emails not arriving | PHP mail() / wrong admin email | Set up SMTP, verify admin email in Settings → General |
| WooCommerce order emails missing | Email type disabled or wrong recipient | Check WooCommerce → Settings → Emails |
| Emails working then suddenly stopped | SMTP password changed or rate limit hit | Update SMTP credentials or check sending quota |
| Emails from Gmail address blocked | DMARC policy on Gmail domain | Change From email to your domain email address |
Frequently Asked Questions
Why is WordPress not sending emails by default?
WordPress uses PHP’s mail() function by default, which doesn’t include email authentication. Modern email providers like Gmail and Outlook require authentication to accept emails — without it, they treat unverified messages as potential spam and either discard them silently or route them to spam folders. This isn’t a WordPress bug — it’s the email industry responding to decades of spam sent via unauthenticated PHP mail. The solution is configuring WordPress to send email through a proper SMTP service that includes authentication.
Which SMTP plugin should I use for WordPress?
WP Mail SMTP is the most widely used and well-supported option, and its free version is sufficient for most WordPress sites. Post SMTP is a good free alternative with slightly more detailed logging. FluentSMTP is another free option that integrates well with popular email services. All three work on the same principle — replacing WordPress’s PHP mail() function with a proper SMTP connection. The plugin itself matters less than the SMTP service it connects to.
Can I use my regular Gmail address as the WordPress from email?
No — and this is a very common mistake. Gmail’s DMARC policy prevents any server other than Google’s own from sending email with a @gmail.com from address. If WordPress tries to send an email from yourname@gmail.com through your hosting server, Gmail’s DMARC policy will cause it to be rejected or discarded. Always use a domain-specific email address (like hello@yourdomain.com) as your WordPress from address.
Is WP Mail SMTP free?
Yes — the free version of WP Mail SMTP handles SMTP configuration for most use cases including connecting to Hostinger/Titan Email, Gmail (Google Workspace), and other SMTP services. The paid Pro version adds email logging with open rate tracking, email reports, and pre-built integrations with specific transactional email services. The free version is sufficient for most small WordPress sites.
How do I know if my emails are actually being sent?
Enable email logging in WP Mail SMTP or install the Check & Log Email plugin. Both maintain a record of every email WordPress attempts to send, including whether it succeeded or failed and any error messages. This removes the guesswork from email troubleshooting — instead of wondering whether an email was sent, you can check the log and know for certain.
My contact form shows a success message but I’m not getting the email — why?
Two common causes. First: the email is being sent but going to spam — check your spam folder. Second: your caching plugin is caching the contact form page, causing the form’s security nonce to expire before submission is processed. The form appears to submit successfully (because the UI confirms it) but the backend validation fails silently. Fix by excluding your contact form page from your caching plugin’s cache.
Do I need a paid email service to fix WordPress email?
Not necessarily. For most small WordPress sites, using your Hostinger Titan email account as SMTP (free with your hosting) is entirely sufficient. Free tiers of transactional email services like Brevo (300 emails/day free) also work well for sites with low email volume. Paid transactional email services become worthwhile for WooCommerce stores or membership sites sending hundreds or thousands of emails per month.
Your Emails Should Work — Fix It Once and Monitor It
WordPress not sending emails is one of those problems that’s easy to overlook until it causes a real business impact — a lead who never heard back because their form message disappeared, a customer confused about their order because the confirmation email never arrived, a new user who couldn’t log in because the password reset never came.
The fix is straightforward: install WP Mail SMTP, connect it to a proper SMTP service (your Hostinger email, Google Workspace, or a transactional email provider), and set up your SPF, DKIM, and DMARC records. These three steps resolve the vast majority of WordPress email problems permanently.
Enable email logging after the fix so you can monitor delivery going forward. And once everything is working, send yourself a test submission through every form on your site — monthly, as part of your regular site maintenance. Email issues have a way of quietly reappearing after plugin updates or hosting changes, and catching them early is much less stressful than discovering them weeks later.
Part of the Common WordPress Errors and How to Fix Them troubleshooting series.
Related reading: WordPress Login Redirect Loop: How to Fix It | WordPress Site Is Hacked — What to Do First

