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:

  1. Request a WordPress password reset.
  2. Submit your contact form.
  3. Place a test WooCommerce order, if applicable.
  4. Send a test message from your SMTP or email plugin.
  5. Try recipients on two different services, such as Gmail and Outlook.
  6. 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-To header
  • 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 587 with TLS
  • Port 465 with 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 From address 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:

  1. Update WordPress, the active theme, and plugins.
  2. Keep only one primary SMTP or mail-routing plugin active.
  3. Temporarily disable email-customization plugins.
  4. Test the affected email.
  5. Disable suspected plugins individually.
  6. Temporarily test with a default WordPress theme.
  7. 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:

  1. Confirm the correct recipient address.
  2. Check spam, promotions, quarantine, and mailbox rules.
  3. Test more than one recipient provider.
  4. Determine whether all emails or only one feature is affected.
  5. Verify the form or WooCommerce notification settings.
  6. Use a real domain-based From address.
  7. Use the visitor’s address only as Reply-To.
  8. Send a WordPress mail test.
  9. Check the hosting server’s outgoing email restrictions.
  10. Review the WordPress, PHP, and mail logs.
  11. Configure one trusted SMTP or transactional email solution.
  12. Verify the sender or sending domain.
  13. Add the provider’s correct SPF and DKIM records.
  14. Configure DMARC carefully.
  15. Review WP-Cron and pending scheduled actions.
  16. Test password resets, forms, orders, and admin notifications.
  17. 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 From address uses your domain
  • The sender address exists or is verified
  • The visitor’s email is used as Reply-To, not From
  • 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
Request a Free WordPress Email Consultation

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.