WordPress not sending email: why contact form leads and order emails go missing

WordPress not sending email? Why contact form leads and order emails vanish, the checks you can do in ten minutes, and the SMTP and DNS fix that ends it.

Our content is written and reviewed by the Four Cents team. We may recommend our own services. Read our editorial standards.

On this page

WordPress not sending email usually means the site is sending, but the messages are being rejected or filtered before they reach an inbox. For a business, that is not a technical nuisance. It means contact form leads, quote requests, booking notices and WooCommerce order alerts are quietly disappearing, sometimes for months before anyone notices. It is one of the most frequently reported problems on the WordPress.org support forums, in threads about contact forms that "stopped working" and stores that stopped getting new-order emails. This guide explains why it happens, how to check whether you are losing leads today, and the fix your developer or host should put in place.

Why WordPress email goes missing

WordPress email goes missing because, out of the box, it is sent in a way that modern mailbox providers do not trust. WordPress's wp_mail() function hands each message to the web server's own mail system. Unless a plugin or setting changes it, the From address is wordpress@yourdomain.com, a mailbox that usually does not exist, sent from a server that your domain's email records do not list as an approved sender.

That used to get through. It increasingly does not. The large mailbox providers have tightened their rules:

ProviderRule for all sendersExtra rule for bulk sendersSince
Google (Gmail)SPF or DKIM must be set upOver 5,000 messages a day to Gmail: SPF and DKIM, plus DMARC1 February 2024
YahooSPF or DKIM at a minimumSPF and DKIM, a DMARC policy of at least p=none, and an aligned From domainFebruary 2024
Microsoft (Outlook.com, Hotmail)Not stated in the same terms5,000 or more messages: SPF and DKIM must pass, DMARC published and passingEnforced from 5 May 2025, per Microsoft's announcement

A small business website is nowhere near 5,000 emails a day, but the "all senders" rule still applies, and unauthenticated mail from a shared web server is exactly what the filters are built to catch. The result is mail that lands in spam, or is dropped without any bounce at all.

Symptom, likely cause, fix

What you noticeLikely causeFix
Form says "message sent", but nothing arrives anywhereUnauthenticated mail rejected or filtered by the receiving providerAuthenticated sending plus SPF and DKIM
Emails arrive, but in spam or junkMissing or failing SPF, DKIM or DMARC; From address not on your domainCorrect the DNS records and the From address
Emails to Gmail arrive, emails to your own company address do notThe web server thinks it handles your domain's mail locally, so it never sends it outHost setting: mark mail for the domain as handled by a remote server
Stopped after moving host or changing email providerSPF record still lists the old server, or MX records changedUpdate SPF and DKIM for the new setup
WooCommerce customer emails arrive, the shop's New Order email does notNew Order email disabled, wrong recipient, or filtered by your own mail providerCheck WooCommerce email settings, then authentication
Password reset and recovery emails never arriveSame sending problem, or the account email is oldFix sending; see our lockout guide
Form submissions stopped completely, not even savedSpam protection, a caching plugin or a JavaScript error is blocking the formTest the form; check the anti-spam plugin and browser console

Ten-minute checks you can do yourself

These do not change anything on the site. Do them in order, and note what you find.

  1. Submit your own form with a personal Gmail or Outlook address as the visitor's email, and a message like "test, please ignore". Note the time.
  2. Look for the entry inside WordPress. Many form plugins (WPForms, Gravity Forms, Fluent Forms and others) keep a copy of every submission under an "Entries" menu. If your test is there, the form works and only the email is failing, which means no lead is lost yet. Contact Form 7 does not store entries by default.
  3. Check spam and junk folders of the address that should receive form emails, and any shared or filtered mailbox.
  4. Check the recipient in the form's settings. Look for an old employee's address, a typo, or a developer's test address. This is the cause more often than people expect.
  5. For stores: go to WooCommerce, Settings, Emails, open "New order", and confirm it is enabled and the recipient is right. Forum threads like this one show this is the first thing support teams ask.
  6. Ask: did anything change? A new host, a move to Google Workspace or Microsoft 365, a new domain, or DNS edited by someone. Email often breaks weeks after a change, when cached records expire.

If entries are being saved but not emailed, export them now and contact those people. The "form creating entry but not sending email" pattern is common, and those entries are leads you still have.

Not sure how many leads you have already missed?We find where your form and order emails are going, set up authenticated sending, and test every form on the site. Send us the address to start.
Fix my website email

The fix: authenticated sending and three DNS records

The fix that lasts has two parts: send through a real, authenticated mail account, and publish DNS records that prove the site is allowed to send for your domain.

Part 1: send through SMTP or an email service

An SMTP plugin makes WordPress log in to a proper mail server to send, instead of using the web server's own mail. That server can be your business mail provider (Google Workspace, Microsoft 365), your host's authenticated mail, or a transactional email service built for website mail. Set it up so that:

  • The From address is on your own domain, for example website@yourcompany.com. Never use the visitor's address as the From address; that is what spoofing looks like to a filter.
  • The visitor's address goes in Reply-To, so you can still click Reply.
  • The SMTP password or API key is stored in wp-config.php or the plugin's encrypted setting, not shared in an email.

Part 2: SPF, DKIM and DMARC

RecordWhat it doesCommon mistake
SPF (a TXT record on the domain)Lists the servers allowed to send mail for your domainTwo SPF records instead of one, or more than ten DNS lookups, which the SPF standard (RFC 7208) treats as an error
DKIM (a TXT or CNAME record your mail provider gives you)Adds a signature that proves the message was not altered and came from an approved senderTurned on for staff email but not for the service the website uses
DMARC (a TXT record at _dmarc)Tells receivers what to do when SPF and DKIM fail, and sends you reportsJumping straight to a strict policy and blocking your own mail. Start with p=none

Whoever manages your DNS adds these records. If you do not know who that is, our guide to taking back your site from a former developer shows how to find out.

For your developer or host: diagnose it properly

Work from the outside in: what the DNS says, whether WordPress hands the message over, and what the receiving server decided.

1. Read the DNS

# who receives mail for the domain
dig +short MX example.com

# SPF: there must be exactly one record starting v=spf1
dig +short TXT example.com | grep -i spf

# DMARC policy
dig +short TXT _dmarc.example.com

# DKIM: the selector depends on the provider (google, selector1, s1, k1...)
dig +short TXT google._domainkey.example.com

2. Does WordPress hand the message over?

wp eval 'var_dump( wp_mail( "you@example.com", "Test from WordPress", "If this arrives, sending works." ) );'

bool(true) only means PHPMailer accepted the message for sending. It says nothing about delivery. bool(false) means it failed inside WordPress, and the reason is passed to the wp_mail_failed action. To capture it, drop a small must-use plugin into wp-content/mu-plugins/log-mail-failures.php:

<?php
// Log the reason whenever wp_mail() fails. Remove when finished.
add_action( 'wp_mail_failed', function ( $error ) {
    error_log( 'wp_mail_failed: ' . $error->get_error_message() );
} );

3. What did the receiving server decide?

When a test does arrive, even in spam, open the full headers ("Show original" in Gmail) and find the Authentication-Results line. It shows spf=, dkim= and dmarc= as pass or fail, and that tells you which record to fix. If nothing arrives at all, ask the host for the outgoing mail log for your test's timestamp; it will show a rejection message such as Microsoft's 550 5.7.515.

4. The "same domain" trap

If the website and your mailboxes share a domain but the mailboxes are hosted elsewhere (Google Workspace, Microsoft 365), a cPanel-style server can wrongly deliver mail for that domain to itself. In cPanel this is the Email Routing setting; set it to "Remote Mail Exchanger". Other control panels have an equivalent "disable local mail for this domain" option.

5. WooCommerce specifics

# is the New Order email enabled, and to whom does it go?
wp option get woocommerce_new_order_settings --format=json

If the store is busy, also look at WooCommerce, Status, Scheduled Actions and filter by Pending: a large backlog of stuck background jobs can delay some emails. WooCommerce also writes logs under WooCommerce, Status, Logs, and a mail logging plugin shows whether each order email was generated. If the log says the email was sent and it never arrived, the problem is delivery, not WooCommerce.

What missing emails do NOT mean

It does not meanWhy
Nobody is contacting youCheck the form's entries. The leads may be sitting in WordPress.
The form plugin is brokenThe form usually works. The email it sends is what fails.
Your domain is blacklistedPossible, but missing authentication is far more common. Check SPF, DKIM and DMARC first.
You need a new email providerYour current provider almost certainly supports authenticated sending. It needs setting up.
A "sent" message was delivered"Sent" only means handed over. Delivery is decided by the receiving server.
Want your forms watched so this never goes unnoticed again?Our care plans include checks on the things that quietly break, alongside staged updates, tested backups and monitoring.
See care plans

Make sure you never lose a lead to email again

  1. Store every submission in WordPress, not only in email. Use a form plugin that saves entries, or add an entries add-on.
  2. Send notifications to two addresses, for example the owner and a shared sales inbox.
  3. Send yourself a test every month, and after any change to hosting, DNS or email provider.
  4. Keep the From address fixed on your own domain, and the visitor in Reply-To.
  5. Watch DMARC reports for a few weeks after setup. They show every service sending as your domain, including ones nobody remembered.

Our guide to adding a contact form to WordPress covers choosing a form plugin that stores entries.

When to hand it over, and what to gather first

Hand it over when you do not know who manages your DNS, when the site takes orders or bookings, or when the basic checks above did not find it. Gather this first:

  • The address of every form that matters, and where its emails should go.
  • Your email provider (Google Workspace, Microsoft 365, the host, other) and an admin who can add DKIM.
  • Who manages DNS: the registrar, the host, or a service such as Cloudflare, and a login.
  • Hosting and WordPress administrator logins.
  • The time of a test submission that did not arrive.
  • Whether anything changed recently: host, domain, email provider.
Want it fixed and tested end to end?Tell us what is not arriving. We reply within 24 hours with the likely cause and a fixed-scope quote, then test every form and order email before we sign off.
Request a fixed-scope quote

Frequently asked questions

Why is my WordPress contact form not sending emails?

Usually the form works, but the email it sends is unauthenticated, so the receiving provider junks or drops it. By default WordPress sends from the web server with a From address of wordpress@ your domain. Sending through SMTP with SPF and DKIM set up fixes most cases.

The form says my message was sent, so why did nobody get it?

"Sent" only means WordPress handed the message to the mail system. Whether it reaches an inbox is decided by the receiving server, which may reject or filter it without telling anyone.

Why do my WordPress emails go to spam?

The most common reasons are a missing or wrong SPF record, no DKIM signature for the service the website uses, and a From address that is not on your domain. The Authentication-Results line in the email headers shows which check failed.

Why does WooCommerce send customer emails but not the New Order email to me?

Check WooCommerce, Settings, Emails, New order: it must be enabled with the right recipient. If it is, your own mail provider may be filtering it, which is a sending authentication problem rather than a WooCommerce one.

Do I need an SMTP plugin?

For most business sites, yes, or an equivalent email service integration. It makes WordPress send through an authenticated mail account, which is what Gmail, Yahoo and Outlook now expect.

What are SPF, DKIM and DMARC?

Three DNS records. SPF lists the servers allowed to send for your domain, DKIM signs each message to prove it is genuine, and DMARC tells receivers what to do when those checks fail and sends you reports. Google and Yahoo have required SPF or DKIM from all senders since February 2024.

Have I lost the leads that did not arrive?

Not if your form plugin stores entries. Look for an Entries menu in WordPress. If they are there, export them and reply. Contact Form 7 does not store entries by default, so those messages may be gone.

Sources

Each figure and date above comes from one of these. The retrieved date is when we last confirmed the source still says what we say it says.

  1. wp_mail() WordPress Developer Resources. Retrieved 2026-10-23.
  2. wp_mail_failed hook WordPress Developer Resources. Retrieved 2026-10-23.
  3. wp_mail_from hook WordPress Developer Resources. Retrieved 2026-10-23.
  4. Email sender guidelines Google. Retrieved 2026-10-23.
  5. Sender best practices Yahoo. Retrieved 2026-10-23.
  6. Fix NDR error 550 5.7.515 in Outlook.com Microsoft. Retrieved 2026-10-23.
  7. Strengthening Email Ecosystem: Outlook's New Requirements for High-Volume Senders Microsoft Tech Community. Retrieved 2026-10-23.
  8. RFC 7208: Sender Policy Framework (SPF) IETF / RFC Editor. Retrieved 2026-10-23.
  9. Contact form creating entry, but not sending email (support thread) WordPress.org Support Forums. Retrieved 2026-10-23.
  10. WooCommerce new order email not sent to admin while customer emails work (support thread) WordPress.org Support Forums. Retrieved 2026-10-23.
  11. Not receiving emails anymore in Contact Form 7 (support thread) WordPress.org Support Forums. Retrieved 2026-10-23.

About the author

Hamza Hai

Founder, Accountant & Project Manager, Four Cents

Hamza Hai is a founder of Four Cents and its accountant and project manager. She keeps projects on track and the numbers clear.

She manages timelines, scope and client communication, so there are no surprises for clients along the way.

She writes the guides on WPDeveloper.ca, including its WordPress planning guides. They draw on the quoting and scoping work she does for Four Cents clients every week.

Areas of expertise

  • Software and app project management
  • Development costing and estimates
  • Project scoping
  • Budgeting for software projects

All articles by Hamza Hai (137 on WPDeveloper.ca)

Reviewed by Zee, Founder & Lead Developer, Four Cents

Zee leads every Four Cents build as the senior full-stack engineer, from the first call to launch and beyond, and technically reviews the articles on this site.

Our editorial standards: who writes and reviews our articles, where our prices come from and how to report a correction.

Start a project

Tell us about your WordPress project

A free consultation and a written, fixed-scope quote. No obligation, no pressure.

  • A reply within 24 hours
  • Fixed-scope quote before any work starts
  • You own the code, content and accounts

Prefer to talk? Call +1 (365) 440-1786 or email info@fourcents.ca.

Request your free quote

Fields marked with an asterisk are required.

Please enter your name.

Please enter a valid email address.

Please enter a phone number so we can reach you.

Please tell us a little more about your project (10 characters or more).