Why Your WordPress Form Isn't Sending Emails
You fill out your own contact form. The success message appears. You wait for the email. Nothing arrives.
This is one of the most common WordPress problems that doesn't look like a problem. The form appears to work — no error message, no broken page, success message displays normally. But the email never arrives, and you have no idea how many leads you've already lost while assuming everything was fine.
Why WordPress email fails
WordPress forms rely on PHP's mail() function by default. This worked in 2005. Today, it's unreliable.
The problem isn't your form plugin. Contact Form 7, WPForms, Gravity Forms — they all work correctly. They hand the email to WordPress, WordPress hands it to PHP mail, and PHP mail either fails silently or sends email that gets rejected by the recipient's server.
| Failure point | What happens |
|---|---|
| Host disabled PHP mail | Email never sends |
| No SPF/DKIM records | Recipient rejects as spam |
| Shared IP blacklisted | Email blocked before delivery |
| Wrong "from" address | Fails SPF alignment |
How to diagnose and fix
The diagnostic process is straightforward:
Step 1: Check if your form plugin stores submissions. Most do — look in the plugin's entries or submissions area. If submissions appear there but emails don't arrive, the form works. Email delivery is the problem.
Step 2: Install WP Mail SMTP and use its email test feature. This tells you whether email is leaving your server at all.
Step 3: Check spam folders. Search for "wordpress@" in all mail folders. Many hosts use this as the default sender address, and it often gets filtered.
The actual fix: Use SMTP
Stop relying on PHP mail. Route email through a dedicated service instead. This solves 95% of WordPress form email problems.
Install WP Mail SMTP — free plugin that works with all form plugins.
Connect an email service:
| Service | Free tier | Difficulty |
|---|---|---|
| Resend | 3,000/month | Easy |
| Brevo | 300/day | Easy |
| SendGrid | 100/day | Medium |
Configure DNS — Add SPF and DKIM records for your domain. The email service provides these.
Test — Send a test email through WP Mail SMTP. If it arrives, you're done.
Verification checklist
Before considering the problem solved, verify each step:
- Check if submissions are stored (not just emailed) — confirms form works
- Check spam folders in receiving inbox — search "wordpress@" and your domain
- Verify the "to" address character by character — typos happen
- Install WP Mail SMTP and run email test — confirms email leaves server
- Connect a transactional email service — Resend, Brevo, or SendGrid
- Configure DNS records (SPF, DKIM) — the service provides these
- Test from a real device, not logged into WordPress — catches caching issues
- Send a test to a different email domain — Gmail, Outlook, etc.
Most form email problems are fixed in under an hour once you stop relying on PHP mail. The typical path: install WP Mail SMTP, connect Resend or Brevo (both have generous free tiers), add the DNS records they provide, and test.
Related pages
Parent: WordPress Fixes — Step-by-step solutions for common WordPress problems
Pillar: Fixes & Troubleshooting — Platform-specific solutions that actually work
Related:
- Error Monitoring — Catch problems before users report them
- Conversion Tracking — Know when forms actually complete