When a contact form stops emailing, the first advice is always to check the spam folder. I went through 150 public threads where a site owner's form stopped sending and the cause was confirmed, and the email was sitting in spam in 8 of them. In 63, more than 4 in 10, the website was sending the email in a way inbox providers don't trust, so it never arrived anywhere.
The threads come from WordPress.org support for form and email plugins, Stack Exchange, and the forums of Netlify, Shopify, Square Online, Wix, Webflow and several hosts, from 2008 to 2026. I only counted a thread when the person confirmed the fix worked, an accepted answer named the cause, or support staff confirmed it.
Below is where form emails get lost, how to find which step yours stops at, and the fix for each cause, with notes for WordPress, Wix, Shopify, Netlify and Webflow.
Why contact form emails don't arrive: 150 confirmed cases
A contact form email passes through three steps: the website has to send it, the sending server has to hand it to your email provider in a way it trusts, and your provider has to deliver it to your inbox. Each cause below breaks one of those steps.

Sending is the weak step: 63 of 150. The spam folder, the usual first suggestion, held the email in 8.
WordPress.org is 64 of the 150 threads, so WordPress causes weigh heavily. But the same causes came up on custom PHP sites, Joomla, Drupal, Magento and ASP.NET, because they all start from the same default: let the web server handle the email itself.
First, find where your form email stops
- Check the submission was saved. WPForms, Forminator, Fluent Forms and Netlify Forms keep entries; for Contact Form 7, the free Flamingo plugin does. No entry means the form never sent anything, and the problem is on the website.
- Send the form's email to a test address. Open the email spam tester, then set the form's notification address to the test address it gives you, or enter it as the visitor's email if your form sends an auto-reply. Submit once. If nothing arrives, the sending step is broken; if it arrives, the report shows whether it passed SPF, DKIM and DMARC.
- If the test arrives but your inbox never does, the problem is in delivery: your web server keeping the email, a filter, or a blocked address.
Fix the sending: a real email login, from your own domain
Three of the top causes have the same fix. In 23 cases the site sent through the web server's built-in mail, usually PHP mail(), with no login to a real email account, so Gmail, Outlook and company mail servers had no reason to trust it. In 14, the form put the visitor's address in the From field, so the email claimed to come from Yahoo or Gmail while being sent by your web host. In 13 more, the host blocked or limited outgoing mail, for reasons from spam and malware to plan limits and hosts with no mail service at all.
- Send through a real account or sending service. In WordPress, an SMTP plugin such as WP Mail SMTP, FluentSMTP or Post SMTP connects the site to Google Workspace, Microsoft 365, Zoho or a service like Brevo, Mailgun or Amazon SES. Custom sites do the same with a mail library and SMTP login, or the service's API.
- Send From your own domain, Reply-To the visitor. Use an address such as website@yourdomain.com as the sender, and put the visitor's address in Reply-To, so clicking Reply still answers them.
- Publish SPF, DKIM and DMARC for the service you send through. Five cases were missing records outright; the guide to why emails go to spam explains each one and what I found across 1,545 small business domains.
The From field matters more than it looks, because many visitors' email providers tell the world to refuse mail that pretends to be from them. Their published DMARC policies, as of October 2026:
| Visitor's email | DMARC policy | A form email "From" them |
|---|---|---|
| yahoo.com, aol.com, comcast.net, verizon.net | reject | Refused |
| btinternet.com, sky.com | reject | Refused |
| icloud.com, me.com, att.net, proton.me | quarantine | Sent to spam |
| gmail.com, outlook.com, hotmail.com | none | Often delivered, but not trusted |
That's why a form can work when you test it with your Gmail address and fail for a customer on Yahoo. And if the email login itself breaks, which happened in 8 cases, half of them were Gmail connections: a normal password Google blocked, or an OAuth connection that expired or was left in testing mode.
When the web server keeps your email (17 cases)
This one surprises people, because the form works and the email is sent, just to the wrong place. When your website and your email are with different providers, for example the site on Bluehost or GoDaddy cPanel hosting and the email on Google Workspace or Microsoft 365, the web server may still think it handles email for your domain. Mail to info@yourdomain.com then goes to a mailbox on the web server that nobody reads, and never reaches your real inbox, while mail to a Gmail address works fine.
In cPanel, open Email Routing for the domain and switch it from Local Mail Exchanger to Remote Mail Exchanger. On Plesk, Virtualmin and similar panels, turn off the mail service for that domain. The giveaway is a form that delivers to an outside address but not to your own domain.
When the form never sends (24 cases)
In 10 of these, the form's own spam protection was rejecting real enquiries: expired or mismatched reCAPTCHA keys, Fluent Forms' token check, cookie consent plugins blocking the spam check, and twice WordPress's Disallowed Comment Keys list, which in one site contained ".com", so every message with an email address was treated as spam. After changing any anti-spam setting, submit the form yourself from a phone and a computer.
The rest were code and setup: JavaScript errors from another plugin, fields without name attributes, a form whose PHP script was hosted where PHP can't run, and four Netlify Forms sites where the submission never reached Netlify's form handler, for example a React form with no plain HTML copy for Netlify to detect at build time. Check the browser console when you submit; an error there means the email was never attempted.
Platform notes: Wix, Shopify, Square Online, Netlify, Webflow
- Wix: notifications come from an automation; one had no recipient set, and a form built from loose input fields instead of a Wix Forms widget never triggered it.
- Shopify: contact form messages go to the store's Sender email in the notification settings, so check it is an inbox you read. Twice Shopify had stopped sending to an address after earlier bounces, which only support could clear.
- Square Online: one form had no recipient set on its Submit button; another worked but went to spam.
- Netlify Forms: five notification addresses were on Netlify's bounce suppression list after failed deliveries, one caused by a brief Gmail outage; Netlify support has to remove them.
- Webflow: one free-plan site hit the cap on form notification emails, so submissions were saved but no more emails went out.
-
Contact Form 7: one site had
skip_mail: onin Additional Settings, which tells it not to send email at all.
How to stop losing enquiries
- Keep a copy of every submission in the form plugin or platform, so a mail problem never loses the lead itself.
- Send through a real email account on your own domain, with SPF, DKIM and DMARC set up for it.
- Test after every change to hosting, DNS, email provider or plugins: one submission to the email spam tester shows whether it still arrives and passes.
More on email, domains and hosting is in Launch and hosting. And if you'd like it handled, I set up form email that reliably arrives as a client project. Email me the website address and what the form is built with.
Common questions
Why is my website contact form not sending emails?
Most often the website sends the email through the web server's built-in mail, with no login to a real email account, so Gmail, Outlook and company mail servers drop it. The next most common causes are the form's own spam protection blocking real messages, and a web server that delivers mail for your domain to itself instead of to your real inbox.
Why am I not receiving emails from my website contact form?
If the form says the message was sent, check whether the submission was saved, then where the email went. In 150 confirmed cases only 8 were in the spam folder; 17 were kept on the web server because it thought it handled the domain's email, and 7 were never sent because the platform had blocked the address after an earlier bounce.
How do I fix a WordPress contact form not sending email?
Install an SMTP plugin such as WP Mail SMTP, FluentSMTP or Post SMTP and connect it to a real email account or sending service on your own domain. Set the From address to that account and put the visitor's address in Reply-To. That was the fix in 32 of the 86 WordPress threads I found, more than any other.
Why is Contact Form 7 not sending email?
Contact Form 7 uses WordPress's default mailer, which on many hosts sends unauthenticated mail that never arrives. Also check that the Mail tab's From field uses your own domain, that Additional Settings does not contain skip_mail: on, and that reCAPTCHA or a cookie plugin is not blocking submissions.
Should the From address on a contact form be the visitor's email?
No. Send From an address on your own domain and put the visitor's address in Reply-To, so you can still reply with one click. Yahoo, AOL, Comcast, Verizon, BT and Sky publish a reject policy for their addresses, so a form email pretending to come from them gets refused.
How do I test my website contact form?
Submit the form once and check that the plugin or platform saved the entry. Then point the form's notification at the address from an email spam tester, or use it as the visitor's email if the form sends an auto-reply, and see whether the email arrives and passes SPF, DKIM and DMARC.
This post first appeared on tusharbhendarkar.com. I write about the engineering behind what I ship. If something here is broken for you, email me at tusharbhendarkar44@gmail.com.
Top comments (0)