WordPress Contact Form Not Working? 7 Common Causes and How to Fix Them
Your WordPress contact form looks fine. The page loads, the fields are there, the submit button works. But the emails? They never arrive.
This is one of the most common — and most damaging — WordPress problems. You might not even realize it’s happening until a frustrated client calls you directly, or worse, takes their business elsewhere.
Here are the 7 most common reasons your WordPress contact form isn’t working, and exactly how to fix each one.
1. Your Server’s PHP Mail Function Is Disabled or Unreliable
The problem: WordPress uses PHP’s built-in mail() function by default. Many hosting providers disable it or severely limit it because spammers abuse it. Even when it works, emails sent this way often land in spam or get silently dropped.
How to fix it: Install an SMTP plugin like WP Mail SMTP or FluentSMTP. SMTP (Simple Mail Transfer Protocol) sends emails through a proper mail server instead of your web server — the same way Gmail or Outlook sends email. This dramatically improves deliverability.
Recommended SMTP services:
- Brevo (formerly Sendinblue) — 300 free emails/day
- Mailgun — 1,000 free emails/month for 3 months
- Amazon SES — extremely cheap at scale ($0.10 per 1,000 emails)
- Gmail SMTP — free if you have a Google Workspace account
2. Missing Email Authentication (SPF, DKIM, DMARC)
The problem: In 2024, Gmail and Yahoo started requiring email authentication for all senders. Outlook followed in 2025. If your domain doesn’t have proper SPF, DKIM, and DMARC records, your form emails will be flagged as spam or rejected entirely.
How to fix it:
- SPF record — Add a DNS TXT record that tells email providers which servers are allowed to send email on behalf of your domain.
- DKIM record — A cryptographic signature that proves the email wasn’t tampered with in transit. Your SMTP service will provide the DKIM key.
- DMARC record — A policy that tells receiving servers what to do when SPF or DKIM checks fail.
Most SMTP services (Brevo, Mailgun, Amazon SES) provide step-by-step instructions for setting these up. You can verify your setup at MXToolbox.
3. Form Emails Are Going to Spam
The problem: Your form is sending emails, but they’re being caught by the recipient’s spam filter. This is especially common when the “From” address differs from the actual sending server.
How to fix it:
- Set the “From” email to an address on your own domain (e.g.,
[email protected]), not a generic[email protected] - Make sure SPF, DKIM, and DMARC are configured (see #2)
- Avoid spam trigger words in your form’s email subject line
- Check your spam folder regularly — if form emails are there, mark them as “Not Spam” to train your email provider
4. Plugin Conflicts
The problem: WordPress plugins can interfere with each other. A security plugin, caching plugin, or even another form plugin might be blocking your form’s functionality.
How to fix it:
- Deactivate all plugins except your form plugin
- Test the form — does it work now?
- Reactivate plugins one by one, testing the form after each
- When the form breaks again, you’ve found the conflicting plugin
Common culprits:
- Security plugins that block POST requests (Wordfence, Sucuri)
- Caching plugins serving stale nonces (WP Super Cache, W3 Total Cache)
- JavaScript optimization plugins that break form scripts (Autoptimize, WP Rocket’s JS defer)
5. reCAPTCHA or Anti-Spam Misconfiguration
The problem: reCAPTCHA keys expire, get misconfigured, or the wrong version is selected. When reCAPTCHA fails silently, the form appears to submit but the server rejects it.
How to fix it:
- Verify your reCAPTCHA keys at Google reCAPTCHA admin
- Make sure you’re using the correct key pair (v2 keys won’t work with v3 settings and vice versa)
- Check that your domain is listed in the reCAPTCHA settings
- Consider switching to Cloudflare Turnstile — it’s free, privacy-friendly, and usually invisible to users
6. Theme or JavaScript Errors
The problem: A JavaScript error on the page can prevent the form from submitting. This can happen after a theme update, a jQuery conflict, or when custom code interferes with the form plugin.
How to fix it:
- Open your browser’s Developer Tools (F12 or Cmd+Option+I)
- Go to the Console tab
- Submit the form and look for red error messages
- Common fixes:
- Switch to a default theme (Twenty Twenty-Four) temporarily to rule out theme issues
- Check if jQuery is being loaded (some form plugins depend on it)
- Disable JavaScript minification/deferral temporarily
7. Your Form Plugin Needs Updating (or Replacing)
The problem: Outdated form plugins can break after WordPress core updates or PHP version upgrades. Some older plugins are no longer maintained.
How to fix it:
- Always keep your form plugin updated
- Check the plugin’s “Last updated” date on WordPress.org — if it’s been more than a year, consider switching
- If you’re using Contact Form 7, make sure you’ve also installed and configured Flamingo to save submissions in the database — CF7 doesn’t do this by default
How to Prevent This From Happening Again
Fixing a broken form is one thing. Making sure it stays fixed is another.
The real danger isn’t the broken form itself — it’s the time between when it breaks and when you notice. Days, weeks, even months can pass while you silently lose leads.
A basic prevention checklist:
- Test your forms manually after every WordPress, theme, or plugin update
- Set up email delivery monitoring (WP Mail SMTP has a log feature)
- Check your forms on different browsers and devices
- Monitor your email authentication regularly
Or automate the whole thing. FormsCheck automatically tests your WordPress forms on a schedule — filling them out, submitting them, and verifying that the email actually arrives. If something breaks, you get an alert immediately, not after you’ve lost a month of leads.
FAQ
Why does my WordPress form submit successfully but I never receive the email?
This usually means your server’s PHP mail() function is sending the email, but it’s being rejected or filtered by the recipient’s email provider. The fix is to use an SMTP plugin to send through a proper mail server with authentication (SPF, DKIM, DMARC).
Can a caching plugin break my contact form?
Yes. Caching plugins can serve stale security nonces, which makes WordPress reject the form submission as a potential CSRF attack. The fix is to exclude your contact page from caching, or configure your caching plugin to exclude POST requests.
How often should I test my contact forms?
At minimum, test after every update (WordPress core, theme, or plugins). Ideally, run automated tests daily or weekly to catch issues caused by server changes, SSL renewals, or email provider policy updates that happen outside of your control.
My form works on desktop but not on mobile. What’s wrong?
This is usually a CSS or JavaScript issue. Check if your theme’s responsive styles are hiding form elements, if touch events are being handled correctly, and if any JavaScript errors appear in your mobile browser’s console. Also check if a mobile-specific caching rule is serving a broken version of the page.
Stop losing leads to broken forms
FormsCheck automatically tests your WordPress forms on a schedule — filling them out, submitting them, and verifying the email arrives. Get alerted the moment something breaks.
Start free monitoring