WordPress Not Sending Emails? How to Diagnose and Fix It
by
7-layers of Security for Your WordPress Site
Your website needs the most comprehensive security to protect it from the constant attacks it faces everyday.

You expected a password reset, contact form lead, WooCommerce order email, or admin alert. WordPress said the action worked. Then the inbox stayed empty.
When WordPress not sending emails is the issue, the first job is to find where the message stopped. WordPress may not be sending at all. The form may be using the wrong recipient. Your host may be blocking mail. Or the email may be landing in spam because inbox providers do not trust the sender.
TLDR: If WordPress is not sending emails, first check spam, verify the admin/form recipient address, and send a test email from WordPress so you know whether the server or the plugin is failing.
In most cases, the durable fix is an SMTP or API mailer, meaning a service WordPress signs in to so it can send email reliably, with a From address on your own domain and correct SPF, DKIM, and DMARC records. If missing email appears with unknown users, redirects, spam pages, or strange outgoing mail, treat it as a possible WordPress security problem too.
Do not install three mail plugins and hope one works. That is how a small email problem turns into a settings drawer full of half-configured mailers. Find the failing layer, fix that layer, then test the real workflow again.
Start With The Symptom
A form success message only means the form accepted the submission. It does not prove the email reached your inbox. The visible problem is “nothing arrived.” The hidden problem is the handoff chain behind it: WordPress triggers an email, a plugin builds it, the server or SMTP provider sends it, DNS authentication proves the sender, and the receiving inbox decides whether to accept, reject, route, or bury it.
For context, SMTP is the standard way apps send email through a mail server, and DNS is the public settings area for your domain. When those two are wrong, WordPress may do its part, and the email can still disappear. Use this quick table before changing settings:
| What you see | Likely layer | First check | Durable fix |
|---|---|---|---|
| No WordPress emails arrive at all | Server mail, SMTP, host, or DNS | Send a WordPress test email | Authenticated SMTP/API delivery with a verified sender |
| Test email works, but a form email fails | Form notification settings | Check recipient, From, Reply-To, entries, and logs | Correct the form notification and test a real submission |
| Emails arrive in spam | Sender trust | Check From address, SPF, DKIM, and DMARC | Use a domain sender and authenticate the domain |
| WooCommerce emails fail | WooCommerce notification or order trigger | Check the exact email and order status | Fix the notification trigger, recipient, and mail logs |
| The problem started after a move or update | Migration, DNS, routing, or plugin change | List what changed | Compare settings before/after and test one change at a time |
The pattern matters. If every WordPress email is broken, do not start inside one form. If only one form is broken, do not rebuild your DNS first. DNS means the domain records that tell the internet which services are allowed to send and receive email for you. This is the main troubleshooting rule: prove which layer failed before changing that layer.
Check The Simple Things First
These checks are boring because they work. Do them before touching SMTP settings.
Write down the result. Here’s something to take as an example:
That small list stops you from guessing. It also gives your host or mail provider something useful if you need support.
If you manage client sites, this habit matters even more. “Emails are broken” is not a ticket anyone can fix quickly. “Password reset fails, WP Mail SMTP test fails to Gmail, form entries are saved, company-domain inbox receives nothing” is a diagnosis path.
Send A WordPress Test Email
The fastest useful test is simple: can WordPress send any email from the site? Use a mail testing plugin or an SMTP plugin with an email test screen. An SMTP plugin is a WordPress plugin that connects your site to a real mail server instead of relying on the web server to send email by itself. In our WordPress test site, WP Mail SMTP added a Tools > Email Test screen that fits this job well. Other mail logging or test email plugins can do the same thing.
Send the test to an inbox you can check right away. If possible, test one consumer inbox and one business-domain inbox. A message that reaches Gmail but not your company mailbox points to a different problem than a message that reaches nowhere.
If The Test Email Fails
The problem is probably below the form plugin. Check:
Do not rebuild every form yet. The site cannot send a basic test email, so the form is probably not the first problem.
If The Test Email Works
WordPress can send through at least one path. Now check the exact workflow that failed. That may be:
This is a common trap: an SMTP test can pass while a form notification still fails. The form may be sending to the wrong address, using the visitor’s email as the From address, or being blocked by spam or caching settings. In practice, this is where people lose the most time. They keep changing SMTP ports even though the mailer is fine. The broken part is the form rule that says who gets notified and what sender address the message uses.
If The Test Lands In Spam
The site is sending, but inbox providers do not trust the message enough.
Check the From address, SPF, DKIM, DMARC, and sender reputation. SPF, DKIM, and DMARC are domain records that help inboxes decide whether your email is really allowed to come from your domain. A spam-folder email is not fixed. It is a delivery warning.
Why WordPress Email Fails By Default
WordPress has a built-in mail function called wp_mail. Think of it as WordPress’ “send this email” button for plugins and core features. On many sites, it depends on the web server’s PHP mail setup. PHP mail means the website server tries to send the email itself instead of handing the message to a dedicated email service.
That path is convenient, but it is not always trusted. Web servers serve pages. Mail providers judge senders. Those are different jobs. Where this goes wrong:
The visible problem is “WordPress did not email me.” The hidden problem is often trust: is this server allowed to send mail for this domain? That is why a site can work perfectly in the browser and still be a terrible email sender. Web hosting and email delivery are different jobs.
Set Up SMTP Or API Email Delivery
For most sites, the durable fix is to stop relying on basic server mail and send through an authenticated mailer. Authenticated means the sender proves it is allowed to send for your domain. You have two common options:
SMTP is fine for many small sites. API mailers are often better for stores, membership sites, agencies, and sites where missed email costs money.
Choose the right-size setup: a tiny brochure site may be fine with host mailbox SMTP. A WooCommerce or lead-generation site should use a provider with logs, bounce reports, and sender verification; for stores, email reliability belongs in the same risk conversation as WooCommerce security.
You do not need the most expensive mail platform to fix a small site. You do need a sending path that can prove who it is.
Choose A Mailer And Configure It Carefully
Use one mail plugin, not several.
Do not use a visitor’s email address as the From address. It may look helpful, but your site is not allowed to send mail as that person’s domain.
For contact forms, use your domain address as From and put the visitor’s email in Reply-To. Then replies still go to the visitor, while the original message comes from a sender your domain can prove. That one setting fixes a surprising number of “contact form not sending email WordPress” cases. The form was sending; it was just sending in a way inbox providers had every reason to distrust.
Add SPF, DKIM, And DMARC
SMTP or API delivery fixes the sending path. DNS authentication helps inbox providers trust that path.
DNS is where your domain stores public instructions. Your mail provider will give you the exact records to add. You usually add these records where your domain’s DNS is managed, which may be your domain registrar, hosting company, or a DNS service like Cloudflare.
| Record | What it means |
|---|---|
| SPF | Lists which servers can send email for your domain. If your mail provider is not on the list, inboxes may distrust the message. |
| DKIM | Adds a digital signature that helps prove the email was not forged or changed on the way. |
| DMARC | Tells inbox providers what to do when SPF or DKIM fails, such as accept, quarantine, or reject the message. |
Do not invent these values. Copy them from your mail provider.
Also, do not panic if DNS changes are not instant. Some verify quickly. Others take longer because DNS changes have to spread across the internet. After adding records, use the provider’s verification screen and send a fresh test email.
SPF, DKIM, and DMARC do not make bad email good. They make legitimate email easier to trust. If the recipient address is wrong or the form notification is disabled, DNS cannot save it.
Fix Contact Form Emails
Contact forms are the most common place for false confidence. The page says “sent,” but the notification may never reach the inbox. Check these fields first:
If the WordPress test email works but the form email fails, treat it as a form settings problem until the logs prove otherwise. Use this quick map before opening every plugin screen:
| Plugin or workflow | Check first | Watch out for |
|---|---|---|
| WPForms | Settings > Notifications | Conditional logic, meaning send/skip rules, forced From address, wrong Send To field |
| Contact Form 7 | Mail tab | Visitor email used as From, broken mail tags, meaning field placeholders that no longer match the form, header warnings |
| HappyForms | Email settings | Saved changes not published, wrong To/From pairing |
| Formidable Forms | Actions & Notifications | Disabled email action or conditional notification |
| Gravity Forms, Ninja Forms, Jetpack Forms | Notification settings and entries | Spam controls, add-ons, or SMTP mismatch |
| WooCommerce | Settings > Emails and order status | Disabled email, wrong trigger, admin/customer mismatch |
The screen names vary, but the pattern does not: recipient, sender, reply-to, trigger, logs.
Check WPForms Notifications
If your SMTP plugin forces a From address, make sure WPForms is not trying to use a different unauthenticated address.
Check Contact Form 7 Mail Settings
Contact Form 7 is flexible, which is useful until one small mail tag breaks the notification.
Check HappyForms Email Settings
Open the form’s email settings and confirm the To and From fields. Use this pattern:
Save the form, submit a real test, then check spam, entries, and mail logs.
Check Other Form Plugins Briefly
For Formidable Forms, check Actions & Notifications. For Gravity Forms, Ninja Forms, Jetpack Forms, and similar plugins, check notifications, recipients, From and Reply-To fields, spam rules, conditional logic, and logs.
The screen names change. The principle does not.
Fix WooCommerce Emails
WooCommerce email failures feel scarier because money may be involved.
Run a test order with a safe test payment method if possible. Check the customer inbox and store admin inbox. If all WordPress emails fail too, fix SMTP or API delivery first. If normal WordPress email works and one WooCommerce email fails, inspect that notification and its trigger.
For stores, I would not rely on “I got one test email” as proof. Place a test order, move it through the relevant status, and check both the customer inbox and the admin inbox. WooCommerce email is a workflow, not one message.
Check Host And Routing Problems
Sometimes WordPress is fine and the hosting or domain setup is the problem. This is common when the website, domain, and mailboxes live with different companies.
| Setup | Check | Why it matters |
|---|---|---|
| SiteGround | Current host SMTP guidance, PHP mail policy, sender domain, logs | Host policies and mail limits can change by plan and setup. |
| GoDaddy or cPanel | MX records, Email Routing, SMTP restrictions, external mailbox setup | MX records tell the internet where your mailbox lives. cPanel may try to handle mail locally when the real mailbox is elsewhere. |
| Google Workspace or Microsoft 365 | MX records and remote mail routing | Remote mail routing means the website host should pass mail to Google or Microsoft instead of trying to deliver it locally. |
| Plesk or managed server | PHP mail, queues, logs, blocked ports, reputation | Queues are waiting lines for outgoing email. Server-level failures can affect every site on the box. |
| Local or staging site | MailHog, MailCatcher, staging restrictions | MailHog and MailCatcher are testing tools that catch email instead of sending it to a real inbox. |
If you use cPanel hosting with Google Workspace or Microsoft 365, pay close attention to mail routing. The server may think it handles email locally even though the real mailbox is elsewhere.
Also check outbound ports. An outbound port is the numbered route the server uses to connect to another mail server. Port 25 is often blocked. Use your provider’s recommended authenticated port, often 587 with TLS, which is encryption for the connection, or use an API mailer if port blocking keeps getting in the way.
This is not a WordPress failure. It is WordPress discovering the limits of the server it lives on.
Ask Your Host Better Questions
If a WordPress test email fails and your SMTP settings look right, send your host a specific ticket. Ask:
If support says the site is generating mail you did not trigger, investigate WordPress sending spam email separately from SMTP delivery. Include the timestamp, recipient, From address, plugin name, exact error text, recent changes, and whether the WordPress test email passed or failed.
Vague tickets get vague answers. A clear failure pattern gives support a real starting point. The best host ticket sounds like this:
“At 14:05 UTC, WordPress sent a test email from [email protected] to my Gmail address. WP Mail SMTP returned this error. No matching message appears in the mail log. The site uses Google Workspace MX records.”
That is much easier to act on than “email broken, please fix.”
Review Recent Updates Or Migrations
Sudden email failure usually has a trigger. Check for:
Compare staging and production if you have both. Check whether staging credentials overwrote production credentials. Check whether a migration copied an old sender address or site URL. If you keep a WordPress activity log, use it to verify who changed mail, plugin, DNS, or sender settings, especially after a WordPress plugin vulnerability or emergency plugin update.
Do not test risky changes on a live store during business hours. Take a backup, change one thing at a time, and keep notes. Rollback can prove the trigger, but it should not be your long-term email plan.
The boring discipline matters here: one change, one test, one note. If you change the SMTP plugin, DNS records, form notification, and caching rules in the same hour, you may fix the site and still have no idea why.
Prevent The Problem From Coming Back
Once email works, make failure visible.
Use:
For a personal blog, manual checks may be enough. For a store, booking site, membership site, or lead-generation site, waiting for a customer to report missing email is too late.
If email is part of how the site makes money, treat it like uptime. You do not need to stare at it every day, but you do need a way to know when it fails.
Also watch for security warning signs. Email failure is usually a mail setup problem. But if it appears with unknown admin users, spam pages, redirects, suspicious plugins, sudden setting changes, or strange outgoing email, stop treating it as only an email issue.
That is where a security scan makes sense. MalCare will not fix SMTP, SPF, or DNS records, but it can help check whether suspicious site behavior points to malware or compromise while you repair the mail setup.
When To Escalate
Escalate based on the layer that fails.
Bring evidence. The best escalation note includes the timestamp, recipient, From address, plugin version, exact test result, error text, recent changes, and whether the message appears in any log.
Escalation works best when you send the problem to the owner of the broken layer. Your host cannot fix a disabled WPForms notification. WPForms support cannot unblock an SMTP port. Your mail provider cannot correct a WooCommerce order status trigger.
FAQs
Why is WordPress not sending emails?
WordPress usually stops sending emails because server mail is blocked or unreliable, the sender address is not authenticated, DNS records are missing, or a form/plugin notification is misconfigured. Start with a WordPress test email so you know which layer failed.
Why does my WordPress contact form say sent but no email arrives?
The success message means the form submission worked. It does not prove the email reached your inbox. Check the recipient, From address, Reply-To field, spam settings, form entries, and mail logs.
What should I do if the SMTP test works but form emails do not?
Fix the form notification. Check the Send To address, From address, Reply-To field, conditional logic, spam rules, caching settings, and whether the plugin recorded the entry.
Why are WordPress emails going to spam?
Spam placement usually means inbox providers do not trust the sender. Use a From address on your own domain, set up SPF and DKIM, add DMARC carefully, and avoid sending from visitor or free-mailbox addresses.
How do I fix WordPress emails on SiteGround, GoDaddy, or cPanel?
Use the same diagnosis flow first: check spam, verify recipients, and send a WordPress test email. Then check the host’s SMTP guidance, MX records, Email Routing, blocked ports, and whether the mailbox is hosted outside the web server.
Conclusion
Most WordPress email problems are fixable once you stop treating “nothing arrived” as one problem. Check spam and addresses first, send a WordPress test email, then follow the branch: mail transport, form settings, WooCommerce settings, DNS authentication, host routing, or security symptoms.
The practical fix is usually authenticated SMTP or API delivery, a domain-based From address, correct SPF/DKIM/DMARC records, and a real test of the form or order email that failed.
That final test matters. The job is not done when a settings screen turns green. It is done when the password reset, form lead, WooCommerce email, or plugin alert reaches the inbox it is supposed to reach.
Category:
Share it:
You may also like
-
Here’s How to Change WordPress Login URL Without Locking Yourself Out!
The decision to change WordPress login URL sounds simple until the new address is missing and your dashboard is out of reach. Most people are motivated by seeing login attempts in their…
-
Need to Change FTP Password? We’ll Show You Some Easy Methods To Go About It
If you’re looking to change FTP password, you should know that it is usually a five-minute job. The messy part is figuring out which screen controls the password. Your FTP…
-
Want to Change cPanel Password Without Locking Yourself Out? We’ll Show You How
When you Change cPanel Password, remember that nobody does it safely by guessing their way through login screens. First, work out which login still proves the account is yours. That…
How can we help you?
If you’re worried that your website has been hacked, MalCare can help you quickly fix the issue and secure your site to prevent future hacks.
My site is hacked – Help me clean it
Clean your site with MalCare’s AntiVirus solution within minutes. It will remove all malware from your complete site. Guaranteed.
Secure my WordPress Site from hackers
MalCare’s 7-Layer Security Offers Complete Protection for Your Website. 300,000+ Websites Trust MalCare for Total Defence from Attacks.
