WordPress Not Sending Emails? How to Diagnose and Fix It

by

WordPress Not Sending Emails feature image

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 seeLikely layerFirst checkDurable fix
No WordPress emails arrive at allServer mail, SMTP, host, or DNSSend a WordPress test emailAuthenticated SMTP/API delivery with a verified sender
Test email works, but a form email failsForm notification settingsCheck recipient, From, Reply-To, entries, and logsCorrect the form notification and test a real submission
Emails arrive in spamSender trustCheck From address, SPF, DKIM, and DMARCUse a domain sender and authenticate the domain
WooCommerce emails failWooCommerce notification or order triggerCheck the exact email and order statusFix the notification trigger, recipient, and mail logs
The problem started after a move or updateMigration, DNS, routing, or plugin changeList what changedCompare 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.

  • Check every inbox folder: Look in spam, junk, promotions, quarantine, and any shared mailbox rules.
  • Confirm the site admin email: Go to Settings > General and check the administration email address.
WordPress administration email setting in Settings General
  • Confirm the notification recipient: Open the form, WooCommerce email, or plugin alert and check the Send To address.
  • Submit a real test: Do not rely only on a preview. Submit the form or trigger the email the way a user would.
  • Test more than one destination: Try Gmail, your business email, and another mailbox if possible.
  • List recent changes: Note any host move, DNS change, email provider change, plugin update, SMTP plugin change, staging push, or new security rule.

Write down the result. Here’s something to take as an example:

  • password reset email: fails
  • contact form notification: fails
  • WooCommerce customer email: works
  • test email to Gmail: works
  • test email to company domain: fails

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.

WP Mail SMTP email test screen in WordPress

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:

  • SMTP or API mailer settings, meaning the connection details WordPress uses to send email to a mail provider
  • host mail restrictions
  • wrong port or encryption
  • sender domain verification
  • DNS records
  • server mail logs
  • cPanel or Plesk mail routing, meaning the hosting control panel may be sending mail to the wrong place

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:

  • password reset emails
  • contact form notifications
  • WPForms notifications
  • Contact Form 7 mail settings
  • HappyForms email settings
  • WooCommerce order emails
  • plugin alerts

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 host blocks or limits website mail to prevent abuse
  • the server is not approved to send email for your domain
  • the From address uses the wrong domain
  • the server has poor mail reputation
  • inbox providers reject messages without sender proof
  • cPanel routes mail locally, meaning the hosting panel tries to deliver email on the web server, when the real mailbox is in Google Workspace or Microsoft 365

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:

  • Use SMTP: WordPress signs in to a mail server with approved host, port, encryption, username, and password or app password. The host is the mail server address, the port is the numbered doorway WordPress connects through, and encryption protects the login and message while they travel.
  • Use an API mailer: WordPress sends through a transactional email provider using an API key. Transactional email means automatic site emails like password resets, order receipts, and form alerts. An API key is a secure token that lets WordPress connect to that provider without using your normal mailbox password.
WP Mail SMTP mailer options in WordPress settings

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.

WordPress plugins list showing an active mail plugin stack
  • Choose a provider that fits the site: Small sites can often use a host mailbox or free tier. Revenue-critical sites should use a transactional provider such as Postmark, SendGrid, Mailgun, Brevo, Amazon SES, SMTP2GO, or a similar service.
  • Use your own domain in From: Use an address like [email protected], [email protected], or [email protected].
  • Avoid personal mailbox passwords: Use OAuth, app passwords, or API keys where the provider supports them. OAuth is the “approve this app” login flow you may have seen with Google or Microsoft, and an app password is a limited password made for one app.
  • Copy the provider settings exactly: Host, port, encryption, username, password, and API keys must match the provider’s instructions. One wrong port number or encryption choice can make the whole connection fail.
  • Send a WordPress test email: Test from the mail plugin before testing forms or orders.
  • Trigger the real workflow: Submit the contact form or place a test order after the mailer test works.
  • Keep logs on important sites: If the site earns leads or orders, logs are not extra. They are how you find failures before customers do.

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.

RecordWhat it means
SPFLists which servers can send email for your domain. If your mail provider is not on the list, inboxes may distrust the message.
DKIMAdds a digital signature that helps prove the email was not forged or changed on the way.
DMARCTells 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:

  • Send To: the mailbox that should receive leads
  • From Email: a domain-authenticated address, meaning an address on your own domain that your mail service is approved to send from, not the visitor’s address
  • Reply-To: the visitor’s email field, so replies go to the visitor even though the original email came from your domain
  • Subject: a clear subject with the site or form name
  • Spam settings: rules that may block the submission
  • Caching or JavaScript optimization: speed settings that may stop forms from submitting cleanly by serving an old page or delaying form scripts
  • Logs or entries: saved records that prove the plugin recorded the submission

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 workflowCheck firstWatch out for
WPFormsSettings > NotificationsConditional logic, meaning send/skip rules, forced From address, wrong Send To field
Contact Form 7Mail tabVisitor email used as From, broken mail tags, meaning field placeholders that no longer match the form, header warnings
HappyFormsEmail settingsSaved changes not published, wrong To/From pairing
Formidable FormsActions & NotificationsDisabled email action or conditional notification
Gravity Forms, Ninja Forms, Jetpack FormsNotification settings and entriesSpam controls, add-ons, or SMTP mismatch
WooCommerceSettings > Emails and order statusDisabled email, wrong trigger, admin/customer mismatch

The screen names vary, but the pattern does not: recipient, sender, reply-to, trigger, logs.

Check WPForms Notifications

  • Open the form and go to Settings > Notifications.
  • Check Send To Email Address, From Email, Reply-To, notification status, and conditional logic. Conditional logic means rules that send or skip an email based on what the visitor selected.

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

  • Open the form and review the Mail tab.
  • Use your domain address as From. Put the visitor’s email in Reply-To. Also check the To field, Additional Headers, message body, and any Mail tab warnings. Additional Headers are extra email instructions, such as where replies should go.

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:

  • To: your receiving mailbox
  • From: your domain-authenticated sender
  • Reply-To: the submitter’s email, if available

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.

  • First, check WooCommerce > Orders. If the order exists, the payment or order data may be safe even though the notification failed. That does not make the issue harmless, but it tells you what to fix first.
  • This is the calm version of the problem: the customer may have paid, the order may exist, and the email notification may be the broken piece. You still need to fix it quickly, but you are not automatically missing the order data.
  • Then go to WooCommerce > Settings > Emails and check:
WooCommerce email notification settings table
  • the exact email that failed
  • whether it is enabled
  • the admin recipient for admin emails
  • the order status that should trigger it
  • whether customer and admin emails both fail
  • email logs, meaning records of what WooCommerce or the mailer tried to send, if available
  • theme or template overrides, meaning custom email files that may change how WooCommerce builds messages
WooCommerce email sender options and template settings

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.

SetupCheckWhy it matters
SiteGroundCurrent host SMTP guidance, PHP mail policy, sender domain, logsHost policies and mail limits can change by plan and setup.
GoDaddy or cPanelMX records, Email Routing, SMTP restrictions, external mailbox setupMX 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 365MX records and remote mail routingRemote mail routing means the website host should pass mail to Google or Microsoft instead of trying to deliver it locally.
Plesk or managed serverPHP mail, queues, logs, blocked ports, reputationQueues are waiting lines for outgoing email. Server-level failures can affect every site on the box.
Local or staging siteMailHog, MailCatcher, staging restrictionsMailHog 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:

  • Is PHP mail enabled for this site?
  • Are outbound SMTP connections blocked?
  • Which SMTP host, port, and encryption should this site use?
  • Do messages from this site appear in the mail logs?
  • Are messages rejected, delayed, or rate-limited? Rate-limited means the server is allowed to send only a certain number of emails in a period.
  • Is Email Routing correct for a domain using external MX records? External MX records mean your mailbox is hosted somewhere other than the web server.
  • Has this server’s mail reputation been limited or blacklisted? Reputation is the trust score inbox providers build from past sending behavior.

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:

  • WordPress core updates
  • plugin or theme updates
  • SMTP plugin changes
  • host migration
  • staging push to production
  • DNS or MX record changes
  • email provider changes
  • new firewall or security rules
  • changed From address

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.

WP Mail SMTP email log settings screen

Use:

  • email logs in your mail plugin or provider
  • bounce and rejection reports
  • failed-email alerts where available
  • periodic test form submissions
  • WooCommerce test orders after major changes
  • DNS checks after switching mail providers
  • per-site sender domains and API keys for client sites

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.

  • Contact your host if basic WordPress email fails, PHP mail may be disabled, SMTP ports may be blocked, cPanel/Plesk routing is unclear, or server logs show rejections.
  • Contact your mail provider if domain verification fails, SPF/DKIM records do not verify, API keys fail, SMTP login fails, or bounce reports point to reputation problems.
  • Contact form or WooCommerce support if WordPress and SMTP tests work but that plugin does not generate the right notification.
  • Contact security support if email failure appears with unknown users, spam content, redirects, unknown plugins, or settings that change without explanation and you need hacked website repair or website malware removal.

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:

You may also like


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.