Why Your WordPress Contact Form Stopped Sending Email
Your WordPress contact form says sent but nothing arrives? It is almost always unauthenticated PHP mail being rejected. Here is how to test it and fix it.
A business owner told us their enquiries had dried up. Two months of nothing, and they were ready to blame Google, the ads, the market. We submitted their own contact form while on the call. It showed the thank-you message. The email never arrived — and it had not arrived for anyone since their host did routine maintenance in the spring.
They had not lost their traffic. They had been losing every single enquiry, silently, for two months.
In almost every case, a WordPress contact form that submits successfully but delivers nothing is failing for one reason: WordPress is trying to send mail through the server's built-in PHP mail function, and the receiving mail provider is quietly rejecting it as unauthenticated. The fix is to send through authenticated SMTP instead, which takes about fifteen minutes.
How do I know if it is actually broken?
Do not guess from the absence of enquiries — that is how two months disappear. Test it properly:
- Submit your own contact form, from your phone, using an email address you can check.
- Wait five minutes, then check the inbox you expect it to land in.
- Check that inbox's spam folder, and any filters or rules that might be moving it.
- Repeat with a different recipient domain — send one to a Gmail address and one to an Outlook address, because a message can be accepted by one and refused by the other.
If the form shows a success message and nothing arrives at either, the form is working and the email is failing. That is a useful distinction, because it rules out the form plugin entirely and points straight at delivery.
Why does WordPress fail to send email?
WordPress sends through a function that hands the message to the server's own mail program. That was fine years ago. It is no longer, because mail providers now check whether a message genuinely came from the domain it claims.
The message cannot prove it is from your domain
If your site sends as info@yourbusiness.ae but the mail leaves from a shared hosting server that your domain's DNS has never authorised, Gmail and Outlook see a message claiming to be you, sent by someone else. The polite response is the spam folder. The common one is silent rejection.
This is what SPF and DKIM records exist to prevent, and it is why adding them matters as much as the plugin.
The host restricts outbound mail
Shared hosts limit or block outbound mail to stop compromised sites sending spam. The limits change, and they change without warning you — which is why a form that worked for a year stops on an ordinary Tuesday with nothing having been edited.
The form is sending to the wrong place
Worth ruling out before anything technical. Check the form's notification settings for an old staff address, a typo, or a "from" address on a domain the site does not own. Several form plugins default to sending from wordpress@yourdomain, which may not be a real mailbox.
How do I fix it?
Configure WordPress to send through a real, authenticated mailbox. Install an SMTP plugin — WP Mail SMTP and FluentSMTP are both free and widely used — and point it at a mailbox you actually control.
- Create or choose a real mailbox, for example
noreply@yourbusiness.aein your hosting email, or a Google Workspace account. - Get its SMTP host, port and credentials. Port 587 with TLS is the usual choice; 465 with SSL also works.
- If you are using Gmail or Workspace with two-factor authentication on, generate an app password rather than using the account password. The normal password will simply be refused.
- Set the "from" address to that same mailbox. A mismatch between the authenticated account and the from address is its own rejection reason.
- Send the plugin's test email, and confirm it arrives — not just that the plugin reports success.
- Add SPF and DKIM records for whichever service you are sending through, at your DNS provider.
One detail that wastes an afternoon: when you paste an app password, spaces in it are not the problem. Providers accept it either way. If authentication fails, the cause is the username, the port, or two-factor requirements — not the formatting.
Which symptom means what?
| What you see | Most likely cause |
|---|---|
| Success message, nothing arrives anywhere | Unauthenticated PHP mail being rejected |
| Arrives in spam, not inbox | Missing SPF/DKIM for the sending service |
| Reaches one provider but not another | Reputation or authentication, not the form |
| Form shows an error on submit | The form plugin or the site itself, not email |
| Worked for months, stopped suddenly | Host mail limits, or an expired password |
Do you need to pay someone for this?
Usually not, and it is worth saying plainly.
If you have one contact form and a hosting mailbox, installing a free SMTP plugin and entering five settings is a job you can do yourself in an afternoon. The DNS records are two entries at your registrar. Plenty of businesses pay for this and should not.
Where it is genuinely worth handing over: multiple sites, a domain whose DNS is already carrying records you do not want to break, WooCommerce order emails where a failure costs real money, or a case where SMTP is configured correctly and mail still is not delivering — that last one is a reputation problem and takes longer to unpick.
How do I stop it failing silently next time?
This is the part that actually saved the client above, and it is the part most sites skip. Email will fail again at some point. The goal is to find out in a day rather than a quarter.
- Store every submission in the database, as well as emailing it. Most form plugins do this, and many people turn it off. If email breaks, the enquiries are still there.
- Send a test through the live form once a month. Thirty seconds, and it is the only check that tests the whole path end to end.
- Send to a monitored shared inbox, not one person's personal address — an address that stops working when somebody leaves is a common cause.
- Note when the SMTP password expires, if it is on an account with a rotation policy.
If your enquiries dropped and you are not sure whether the cause is technical or demand, it is worth reading what a fall in traffic does and does not tell you about enquiries before changing anything else. And if you are weighing up a rebuild rather than another round of fixes, the choice between WordPress and a custom build turns on fewer things than people expect.
Will an SMTP plugin fix emails going to spam?
Partly. Authenticated SMTP stops outright rejection, but inbox placement also depends on SPF and DKIM records matching the service you send through. Add both at your DNS provider. Without them, mail often still lands in spam even with SMTP working correctly.
Why did it work for a year and then stop?
Almost always something changed on the server rather than on your site: the host tightened outbound mail limits, a mailbox password expired, or a DNS record was edited during an unrelated change. Nothing in WordPress has to be touched for email to break.
Can I just use Gmail to send the forms?
Yes, and for a small business it is often the simplest option. Use an app password rather than your account password, keep the from address the same as the account you authenticate with, and be aware that free Gmail accounts have daily sending limits that a busy store could reach.
