WordPress Emails Not Sending? Common Causes and Solutions
You receive an enquiry through your WordPress contact form—but no notification arrives.
A customer places a WooCommerce order—but neither you nor the customer receives an order email.
Someone requests a password reset—but the reset link never reaches their inbox.
WordPress email problems are easy to overlook because the website may continue working normally. Forms display a success message, orders appear in the dashboard, and WordPress may report no visible error. The missing email is often the first sign that something is wrong.
The important thing to understand is that WordPress does not operate as a complete email server. It prepares the message and passes it to your hosting environment or a configured email provider. A problem anywhere in that process can prevent delivery.
This guide explains the most common reasons WordPress emails are not sending and how to fix them safely.
How WordPress Sends Emails
WordPress sends transactional emails through the wp_mail() function.
It is used for messages such as:
- Password-reset links
- New-user notifications
- Contact-form notifications
- WooCommerce order emails
- Comment notifications
- Security alerts
- Membership and booking confirmations
- Plugin-generated reports
By default, many websites rely on the hosting server’s PHP mail configuration. This may work, but it does not necessarily provide the authentication, logging, reputation management, and delivery reporting available from a dedicated email service.
There is also an important distinction between sending and delivery.
According to the official wp_mail() documentation, a successful return value only means WordPress processed the request without encountering an immediate error. It does not prove that the message reached the recipient’s inbox.
An email can therefore pass through WordPress successfully and still be:
- Rejected by the sending server
- Rejected by the recipient’s server
- Quarantined
- Delivered to spam
- Delayed
- Blocked because of missing authentication
- Sent to an incorrect address
That is why troubleshooting must cover the complete delivery path.
First, Identify Which Emails Are Missing
Before changing any settings, determine whether the problem affects every WordPress email or only one feature.
Test the following separately:
- Request a WordPress password reset.
- Submit your contact form.
- Place a test WooCommerce order, if applicable.
- Send a test message from your SMTP or email plugin.
- Try recipients on two different services, such as Gmail and Outlook.
- Check the spam, junk, promotions, quarantine, and all-mail folders.
The result helps narrow down the cause.
For example:
- If the SMTP test works but the contact form notification does not, the problem is probably inside the form configuration.
- If no WordPress email works, investigate the mail transport, authentication, hosting restrictions, or SMTP configuration.
- If Gmail receives the message but a business mailbox does not, the receiving server may be filtering or rejecting it.
- If WooCommerce customer emails work but admin notifications do not, verify the admin recipient settings.
- If messages are logged as sent but never arrive, focus on deliverability, DNS authentication, reputation, or recipient filtering.
Do not install several email plugins before completing these basic tests. Multiple plugins modifying the same mail process can make diagnosis harder.
1. Your Hosting Server Is Not Configured to Send Email
Some hosting environments restrict or disable PHP mail. Others impose hourly limits or require the sender address to belong to the hosted domain.
This is especially common with:
- Local development environments
- Free or low-cost hosting
- New hosting accounts
- Cloud servers without a mail service
- Hosting accounts that have exceeded sending limits
- Servers previously associated with spam
- Websites moved to a different host
The website can still show “Message sent successfully” because the form completed its own processing. That message does not necessarily confirm actual email delivery.
Ask your hosting provider to check:
- Whether outgoing PHP email is enabled
- Whether your account has reached a sending limit
- Whether SMTP ports are restricted
- Whether the message appears in the server mail log
- Whether the sending IP is blocked
- Whether the sender address is permitted
- Whether there are errors from Sendmail, Postfix, or the server’s mail service
For business-critical emails, sending through an authenticated email provider is generally more reliable than depending entirely on the web server.
2. WordPress Is Using an Invalid “From” Address
A common WordPress configuration sends email from an address similar to:
wordpress@server-hostname.example
A plugin might also use:
wordpress@yourdomain.com
even when that mailbox does not exist.
Receiving servers may distrust or reject messages when the sender address is invalid, unauthenticated, or unrelated to the server that transmitted the message.
Use a real address on your website’s domain, such as:
website@yourdomain.com
or:
notifications@yourdomain.com
The address should be authorized by the email account or transactional service used to send the message.
Avoid sending website email from a public address such as:
yourbusiness@gmail.com
unless the website is properly authenticated through the relevant Google account or supported email API. Simply entering a Gmail address in the “From” field does not authorize your web server to send as Gmail.
The contact-form mistake to avoid
Do not use the visitor’s submitted email address as the From address.
For example, this is unreliable:
From: visitor@gmail.com
Your website is not authorized to send email on behalf of gmail.com.
Use your verified domain address as the sender and put the visitor’s address in Reply-To:
From: Website Enquiries <website@yourdomain.com>
Reply-To: visitor@gmail.com
This allows you to reply directly to the visitor while keeping the sender identity properly aligned.
3. The Contact Form Is Configured Incorrectly
If other WordPress emails work but form notifications do not, check the form itself.
Common mistakes include:
- An incorrect recipient address
- A misspelled email address
- An invalid sender address
- A broken mail-tag or field placeholder
- Conditional notification rules that are not met
- Notifications being disabled
- An invalid
Reply-Toheader - Multiple addresses entered in the wrong format
- A plugin update changing notification behaviour
- JavaScript displaying success even though server-side processing failed
Open the form’s notification settings and verify:
- To: The mailbox that should receive the enquiry
- From: A verified email address using your website domain
- Reply-To: The visitor’s email field
- Subject: A simple, valid subject
- Message: Correct field names and placeholders
Submit the form using a real email address and confirm that the entry was stored in WordPress, if the form plugin supports entry storage.
Saving submissions in the database is useful because an email failure will not automatically erase the customer’s enquiry. However, protect stored form data and retain it only as long as necessary.
4. Your Emails Are Going to Spam
Sometimes WordPress is sending emails correctly, but they are not reaching the main inbox.
Check:
- Spam or junk
- Promotions
- Quarantine
- All Mail
- Mailbox rules
- Blocked sender lists
- Business email security filters
Emails are more likely to be filtered when they contain:
- An unauthenticated sender
- A mismatched sender domain
- Too many links
- Link-shortening services
- Large attachments
- Misleading subject lines
- Image-heavy content with little text
- Repeated promotional phrases
- Poor-quality HTML
- Links to a compromised or low-reputation domain
Ask the recipient to inspect the complete email headers if the message arrives in spam. The headers may show whether SPF, DKIM, and DMARC passed or failed.
Moving one message out of spam may help that individual mailbox, but it does not correct the underlying authentication or reputation problem.
5. SPF, DKIM or DMARC Is Missing
Email authentication helps receiving servers verify that a message claiming to come from your domain is legitimate.
The three records you will commonly encounter are:
SPF
SPF identifies which servers or services are permitted to send email for your domain.
If you use several senders—for example, Google Workspace, a newsletter platform, and a WordPress transactional email service—they must be accounted for correctly.
Do not create several separate SPF records for the same domain. Multiple SPF TXT records can cause validation problems. Follow your email provider’s instructions for combining permitted senders into one valid record.
DKIM
DKIM adds a cryptographic signature to outgoing email. The receiving server checks that signature against a public key published in your DNS.
Your email provider normally supplies the required DKIM record and selector.
DMARC
DMARC tells receiving servers how to handle messages that fail authentication and provides reporting capabilities. It also checks alignment between the visible sender domain and the domains authenticated through SPF or DKIM.
Google’s current email sender guidelines require authentication for messages sent to Gmail accounts and recommend configuring SPF, DKIM, and DMARC. Cloudflare also provides an official overview of email authentication and DMARC.
DNS records must match your actual email provider. Do not copy SPF, DKIM, or DMARC values from an unrelated tutorial.
After adding or changing the records:
- Allow time for DNS propagation
- Use your provider’s verification tool
- Send another test email
- Inspect its headers
- Confirm that authentication passes
- Monitor DMARC reports if enabled
Be cautious when changing an existing DMARC policy to quarantine or reject. First identify every legitimate service sending from your domain.
6. SMTP Is Missing or Misconfigured
SMTP allows WordPress to send through an authenticated mail server or transactional email provider instead of relying only on the default hosting mail configuration.
A typical SMTP setup requires:
- SMTP host
- Port
- Encryption method
- Authentication enabled
- Username
- Password or app password
- Verified sender address
- Sender name
Common port and encryption combinations include:
- Port
587with TLS - Port
465with SSL/TLS
Use the exact settings supplied by your provider.
Common SMTP errors
Authentication failed
Possible causes:
- Incorrect username or password
- An ordinary password used where an app password is required
- Two-factor authentication requirements
- A revoked credential
- An unverified sending account
- Incorrect authorization method
Connection timed out
Possible causes:
- The hosting provider blocks the selected SMTP port
- A firewall prevents the connection
- The SMTP hostname is wrong
- The external service is temporarily unavailable
Sender address rejected
Possible causes:
- The
Fromaddress is not verified - The sender does not match the authenticated account
- The sending domain has not been authenticated
- The provider does not permit sending aliases
Too many messages or rate limit exceeded
Possible causes:
- A plugin is repeatedly sending notifications
- A form is being abused by bots
- A mail queue is retrying failed messages
- The account has reached its hourly or daily limit
Do not repeatedly retry hundreds of messages without checking the error. This can increase the queue, consume resources, and affect the sender’s reputation.
7. Your SMTP Password Changed
Email delivery may stop suddenly even when WordPress itself has not been updated.
This can happen after:
- Changing the mailbox password
- Enabling two-factor authentication
- Revoking an app password
- Migrating the email account
- Changing hosting providers
- Rotating an API key
- Removing an authorized application
- Changing the SMTP server hostname
Generate a fresh credential if necessary and update the WordPress mail configuration.
Avoid storing passwords directly in theme files. Use a trusted plugin or secure configuration method, and limit access to WordPress administrators who genuinely need it.
After updating the credential, send a test email and check both the plugin’s result and the recipient’s inbox.
8. A Plugin or Theme Conflict Is Interrupting Email
Themes and plugins can modify WordPress email behaviour using hooks and filters.
A conflict may:
- Replace the sender address
- Modify email headers
- Change the content type
- Send duplicate messages
- Stop a notification
- Trigger a PHP error
- Interfere with an SMTP plugin
- Add an invalid attachment
- Queue emails without processing them
If the problem started after an update, check what changed recently.
Create a backup and use a staging website where possible. Then:
- Update WordPress, the active theme, and plugins.
- Keep only one primary SMTP or mail-routing plugin active.
- Temporarily disable email-customization plugins.
- Test the affected email.
- Disable suspected plugins individually.
- Temporarily test with a default WordPress theme.
- Review PHP and WordPress error logs.
Do not perform broad plugin deactivation on a busy live WooCommerce website without a backup and a rollback plan.
9. WordPress Cron or an Email Queue Is Not Running
Some plugins do not send email immediately. They add messages to a queue and rely on WP-Cron or a background task to process them.
If scheduled processing fails, emails may remain pending.
This can affect:
- WooCommerce notifications
- Membership reminders
- Booking confirmations
- Newsletter batches
- Security reports
- Backup notifications
- Subscription renewals
- Follow-up emails
Check:
- Tools → Site Health
- WooCommerce → Status → Scheduled Actions
- Your email plugin’s queue or log
- Failed and pending scheduled events
- Server cron configuration
- PHP fatal errors
- Loopback-request errors
A low-traffic website may run scheduled events late because normal visits typically trigger WP-Cron. A busy site can experience the opposite problem, where frequent or inefficient scheduled jobs consume server resources.
For websites that depend heavily on scheduled processing, ask your host or developer to configure a real server cron job correctly. Do not disable WP-Cron unless a replacement is already working.
10. WooCommerce Email Settings Are Disabled
If ordinary WordPress emails work but WooCommerce notifications do not, review the WooCommerce email configuration.
Go to:
WooCommerce → Settings → Emails
Open the affected notification and check:
- The email is enabled
- The recipient address is correct
- The subject is valid
- The heading is present
- The email type is appropriate
- The order reached the status that triggers the notification
Different emails are triggered by different events. For example, an order that remains in a pending payment state may not generate the same notifications as a successfully paid processing order.
Also check:
- Payment gateway logs
- Order notes
- WooCommerce logs
- Failed scheduled actions
- Custom email-template overrides
- Plugins that modify order statuses
- Whether the message appears in the email log
If you have overridden WooCommerce email templates in your theme, temporarily test the standard template on staging. An outdated or broken override can cause email-generation problems.
11. Your Website Has a PHP Error
A form, checkout, registration process, or scheduled task may encounter a PHP error before the email is sent.
Check your hosting error log and enable WordPress debugging temporarily on staging when necessary.
A developer can also use the official wp_mail_failed hook to capture errors raised during the WordPress mail process:
function kdp_log_wordpress_mail_error($error)
{
error_log(
'WordPress mail error: ' .
$error->get_error_message()
);
}
add_action('wp_mail_failed', 'kdp_log_wordpress_mail_error');
WordPress documents the wp_mail_failed hook as receiving a WP_Error object after a PHPMailer exception.
Use logging carefully:
- Do not display errors to visitors
- Do not log email bodies containing sensitive data
- Do not expose debug files publicly
- Disable temporary debugging after diagnosis
- Protect customer names, addresses, reset links, and order details
Remember that this hook detects sending exceptions inside WordPress. It cannot confirm final inbox delivery.
12. Your Domain or Sending IP Has a Poor Reputation
Even correctly authenticated email may be filtered if the sending domain or IP address has developed a poor reputation.
This can happen because of:
- A compromised contact form
- Spam sent from the same shared server
- A hacked mailbox
- Sudden increases in email volume
- High bounce rates
- Recipients frequently reporting messages as spam
- Sending to old or purchased mailing lists
- A server IP appearing on blocklists
If you use shared hosting, other customers may share the same outgoing IP. Their behaviour can sometimes affect delivery from that IP.
A reputable transactional email service can provide better visibility into:
- Delivery
- Bounces
- Rejections
- Complaints
- Suppressions
- Authentication
- Rate limits
Do not mix high-volume marketing campaigns with essential website notifications unless your provider and configuration are designed for both. Password resets and order confirmations should not be harmed by the reputation of promotional email.
Should You Use SMTP for WordPress?
For most business websites, authenticated SMTP or an email API is a practical improvement over unauthenticated server mail.
It can provide:
- Verified sending identity
- More reliable transport
- Clearer error messages
- Delivery and bounce information
- Email logs
- Better domain alignment
- Easier troubleshooting
However, installing an SMTP plugin alone does not guarantee inbox placement.
The complete configuration still matters:
- The provider must be connected correctly
- The sender must be verified
- SPF and DKIM must be configured
- DMARC should be introduced appropriately
- The website must not send spam
- Recipient addresses must be valid
- The domain and sending IP need a reasonable reputation
Choose a provider based on the type and volume of email your website sends. A small contact-form website has different needs from a WooCommerce store processing hundreds of daily orders.
A Safe Step-by-Step Fix
Use this order to troubleshoot WordPress email problems:
- Confirm the correct recipient address.
- Check spam, promotions, quarantine, and mailbox rules.
- Test more than one recipient provider.
- Determine whether all emails or only one feature is affected.
- Verify the form or WooCommerce notification settings.
- Use a real domain-based
Fromaddress. - Use the visitor’s address only as
Reply-To. - Send a WordPress mail test.
- Check the hosting server’s outgoing email restrictions.
- Review the WordPress, PHP, and mail logs.
- Configure one trusted SMTP or transactional email solution.
- Verify the sender or sending domain.
- Add the provider’s correct SPF and DKIM records.
- Configure DMARC carefully.
- Review WP-Cron and pending scheduled actions.
- Test password resets, forms, orders, and admin notifications.
- Monitor logs after the fix.
Keep a record of your original settings before making changes.
WordPress Email Troubleshooting Checklist
Before contacting your hosting provider or developer, check that:
- The recipient address is correct
- The email is not in spam or quarantine
- The notification is enabled
- The
Fromaddress uses your domain - The sender address exists or is verified
- The visitor’s email is used as
Reply-To, notFrom - SMTP credentials are current
- The SMTP host, port, and encryption are correct
- Your hosting provider permits the connection
- SPF includes the legitimate sending service
- DKIM has been verified
- DMARC is configured appropriately
- There is only one active mail-routing solution
- WordPress and PHP logs contain no relevant errors
- WP-Cron and scheduled actions are running
- Contact-form entries are being stored
- WooCommerce order statuses trigger the expected emails
- The domain or IP is not experiencing a reputation problem
Need Expert Help?
Need Help Fixing WordPress Email Delivery?
Missing contact-form enquiries, password resets, and order notifications can cost your business leads and sales. KDP Infusion can diagnose the complete WordPress email process and fix the underlying delivery problem.
- WordPress email diagnosis
- Contact-form notification fixes
- WooCommerce email troubleshooting
- SMTP and transactional mail configuration
- SPF, DKIM, and DMARC assistance
- WordPress cron and email-queue fixes
- Plugin and custom-code debugging
Conclusion
When WordPress emails are not arriving, the visible website is only one part of the problem.
The issue may be an incorrect form setting, invalid sender address, hosting restriction, SMTP authentication error, failed scheduled task, missing DNS record, spam filter, or poor sender reputation.
Start by identifying exactly which messages are affected. Then verify the recipient, sender, WordPress settings, server logs, SMTP connection, and domain authentication in a controlled order.
Most importantly, do not treat a “sent successfully” message as proof of delivery. WordPress can hand off an email successfully without knowing whether it eventually reached the inbox.
Once authenticated sending, logging, and DNS records are configured correctly, WordPress emails become much easier to monitor and troubleshoot.
Frequently Asked Questions
Common causes include disabled hosting mail, an invalid sender address, incorrect contact-form settings, SMTP authentication errors, missing SPF or DKIM records, plugin conflicts, and failed scheduled tasks.
The success message may only confirm that the form submission was processed. It does not necessarily prove that the mail server accepted or delivered the notification.
WordPress can send without a separate SMTP plugin when the hosting mail service is configured correctly. However, authenticated SMTP or an email API usually provides better reliability, logging, and troubleshooting for business websites.
The sender may not be authenticated, the From address may not match the sending domain, the sending IP may have a poor reputation, or the message content may trigger filtering. Verify SPF, DKIM, DMARC, sender alignment, and email headers.
Check whether the notification is enabled, the recipient is correct, and the order reached the required status. Also inspect WooCommerce logs, order notes, scheduled actions, SMTP logs, and email-template overrides.
Do not simply type a Gmail address into the sender field while sending through your web server. Use an authorized Google connection or email provider. Otherwise, Gmail or receiving servers may treat the message as spoofed.
From identifies the authenticated sender of the email. Reply-To tells the recipient where replies should go. For a contact form, use your domain address as From and the visitor’s submitted address as Reply-To.
No. It means WordPress processed the sending request without an immediate error. The official documentation states that this does not guarantee the recipient received the message.
Use your SMTP plugin’s error log, review PHP and hosting mail logs, and inspect WordPress failures through the wp_mail_failed hook. Email logging can show generated messages but may still not prove final inbox delivery.
Yes. Plugins can change headers, sender details, content type, notification rules, queues, and SMTP configuration. Test suspected conflicts on staging and keep only one primary mail-routing solution active.