Contact Form Not Working: Complete Troubleshooting Guide

Your contact form is not sending emails? This complete guide covers every cause and fix for broken contact forms on PHP, WordPress, and custom websites.

Contact Form Not Working: Complete Troubleshooting Guide

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.

ServiceFree tierDelivery rateBest for
Brevo (Sendinblue)300 emails/day98%SMBs, Morocco-friendly
Resend3 000/month99%Modern stacks (Next.js, etc.)
Mailgun100/day free tier98%High-volume transactional
Amazon SES200/day from EC297%AWS users
Gmail SMTP (with app password)500/day per account99%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.

Partager : LinkedIn Twitter WhatsApp