A Broken Contact Form Is a Silent Revenue Killer
Visitors try to reach you, fail, and go to a competitor. Most businesses discover the problem only after a client mentions it — or after weeks of zero inquiries.
Identify the Symptom First
- Form submits without error but no email arrives?
- Form shows an error message on submit?
- Clicking submit does nothing at all?
- Form submits but thank-you page never loads?
8 Common Causes and Fixes
1. Emails Going to Spam
Cause: PHP mail() sends without authentication, triggering spam filters.
Fix: Switch to SMTP + PHPMailer. Send FROM your domain email ([email protected]).
WordPress: Install WP Mail SMTP, configure with Gmail, SendGrid, or Brevo.
2. Missing SPF / DKIM Records
Cause: Domain lacks email authentication DNS records.
Fix: Add SPF: v=spf1 include:yourhostingprovider.com ~all and DKIM from your email provider.
3. JavaScript Error
Fix: Open Chrome DevTools (F12) → Console tab. Fix any red errors. Common culprits: missing jQuery, plugin conflicts.
4. CSRF Token Expired
Fix: Regenerate token on each page load: $_SESSION["csrf"] = bin2hex(random_bytes(32));
5. Over-Strict Validation
Fix: Test with simple input first. If it works, your regex is blocking valid inputs.
6. Hosting Blocking Outbound Email
Fix: Use external SMTP — Brevo (300 free emails/day) or SendGrid (100/day free).
7. Wrong Form Action URL
Fix: Inspect the form HTML: <form action="/send-message.php">. Verify the script exists on the server.
8. File Upload Exceeds Limits
Fix: Add to .htaccess: php_value upload_max_filesize 10M
Verify Your Fix
- Check inbox AND spam folder after submitting
- Use Mail-tester.com to score email deliverability
- Use MXToolbox to verify SPF/DKIM records
Still broken? Contact me — I fix contact forms as part of my maintenance service.
The Complete Contact Form Troubleshooting Checklist for 2026
When a contact form stops working, 90% of causes fall into one of five categories. Check them in this order — it saves hours.
1. SMTP Delivery Issues (Most Common)
PHP's mail() function is unreliable on shared hosting. Messages get silently dropped or marked as spam. Fix: use SMTP with authenticated delivery.
Recommended SMTP services 2026
| Service | Free tier | Delivery rate | Best for |
|---|---|---|---|
| Brevo (Sendinblue) | 300 emails/day | 98% | SMBs, Morocco-friendly |
| Resend | 3 000/month | 99% | Modern stacks (Next.js, etc.) |
| Mailgun | 100/day free tier | 98% | High-volume transactional |
| Amazon SES | 200/day from EC2 | 97% | AWS users |
| Gmail SMTP (with app password) | 500/day per account | 99% | Very small sites |
2. Spam Filter Marking Your Emails
- Configure SPF, DKIM, and DMARC records on your domain
- Do not use "no-reply@" — use a real mailbox you monitor
- Avoid trigger words in subject line ("free", "winner", "urgent")
- Test with mail-tester.com — aim for 9/10+
3. Anti-Spam Protection Blocking Legit Users
Over-aggressive reCAPTCHA v3 thresholds block real users. Honeypot + simple math question often outperforms reCAPTCHA for SMBs.
4. Form Plugin Conflicts (WordPress)
- Disable all other plugins except the form — test
- Switch to default theme — test
- Check browser console for JS errors
- Clear cache (plugin cache + Cloudflare)
5. Server / PHP Configuration
- PHP mail() disabled on host → switch to SMTP plugin
- PHP memory_limit too low (< 128M) → contact host
- Firewall blocking outbound port 587/465 → open it
- Corrupted .htaccess → regenerate from scratch
FAQ
Why do emails arrive sometimes but not always?
Classic sign of reputation issues. Switch to a dedicated SMTP service and set up SPF/DKIM/DMARC properly.
WPForms vs Contact Form 7 vs Fluent Forms?
Fluent Forms is fastest and cheapest. WPForms has best UX. CF7 is free but requires SMTP plugin. All three work — pick based on UX need.
How to test without sending to real emails?
Use Mailtrap or Ethereal for dev/staging. In production, monitor with a logging tool like PostSmtp.
Need a form that actually delivers? Contact me — I'll audit your setup in 30 minutes.