Contact Form 7 Not Sending Emails: Your Leads Are Disappearing and You Don't Know

Someone filled out your contact form today. They were ready to buy. The form said "Thank you, your message has been sent." But you never received it. And neither of you knows.

The silent lead killer on your WordPress site

Here is a scenario that plays out on thousands of WordPress sites every single day. A potential customer lands on your contact page. They fill out the form carefully — their name, email, phone number, a message explaining exactly what they need. They hit submit.

The form shows a nice green confirmation message: "Thank you for your message. It has been sent."

They close the tab, confident that you will get back to them soon. But you never received that message. It vanished. And you have absolutely no idea it ever existed.

The prospect waits a day, maybe two. Then they go to your competitor. They never contact you again. They do not send you a follow-up saying "hey, your form is broken." They just leave.

Contact Form 7 is the most popular WordPress form plugin, with over 5 million active installations. It is simple, reliable, and free. But it has a dirty secret: it can silently stop sending emails, and it will still tell your visitors that their message was sent successfully.

The form is not broken from your visitor's perspective. It submits. It shows a success message. Everything looks fine. But the email never arrives in your inbox. And unless you are testing your own form regularly — which nobody does — you will not find out until someone complains. Or worse, until you notice that leads have mysteriously dried up.

Why Contact Form 7 stops sending emails

There are five common reasons this happens, and at least one of them probably applies to your site right now.

1. Your hosting provider blocks PHP mail()

Contact Form 7 uses PHP's built-in mail() function by default. This is the simplest way to send email from a server, but it is also the least reliable. Many shared hosting providers either completely block mail() or severely throttle it to prevent spam abuse.

When mail() is blocked, Contact Form 7 tries to send the email, fails silently, and still shows the success message to your visitor. There is no error. No warning. Just a missing email.

How to fix it: Install WP Mail SMTP and configure it to send emails through a proper SMTP service. Gmail, SendGrid, Mailgun, Amazon SES, or your hosting provider's SMTP server all work. This bypasses mail() entirely and sends authenticated, deliverable emails.

2. SMTP is misconfigured

Even if you have installed an SMTP plugin, a single wrong setting will break email delivery. Common mistakes include: wrong SMTP port (use 587 for TLS or 465 for SSL), wrong encryption type, expired app passwords, or incorrect "From" email address.

How to fix it:In WP Mail SMTP, use the "Email Test" feature to send a test email. If it fails, the plugin will show you exactly what went wrong. Double-check your SMTP credentials against your email provider's documentation. If you are using Gmail, make sure you are using an App Password — Gmail no longer accepts regular passwords for SMTP.

3. reCAPTCHA is blocking real users

Contact Form 7 supports reCAPTCHA to prevent spam. But reCAPTCHA v3 assigns a score to every visitor, and sometimes it scores legitimate users as bots. When this happens, the form submission is silently rejected. No email is sent, and depending on your configuration, the user might not even see an error message.

How to fix it: In Contact Form 7 settings, check your reCAPTCHA threshold. The default threshold of 0.5 is often too aggressive. Lower it to 0.3 and see if deliverability improves. You can also check your reCAPTCHA admin console to see how many submissions are being blocked.

4. Plugin or theme conflict

WordPress plugins can interfere with each other in unpredictable ways. A security plugin might block outgoing email connections. A caching plugin might serve a cached version of your form that no longer has a valid nonce token. A theme update might break the page layout in a way that hides the form or breaks its JavaScript.

How to fix it: Deactivate all plugins except Contact Form 7 and your SMTP plugin. Switch to a default WordPress theme (like Twenty Twenty-Four). Send a test submission. If it works, reactivate plugins one by one until you find the conflict.

5. The "From" address fails authentication checks

Modern email systems check SPF, DKIM, and DMARC records to verify that the sending server is authorised to send email from the claimed domain. If Contact Form 7 sends email "from" an address like wordpress@yoursite.com, but your DNS records do not authorise your hosting server to send email for yoursite.com, the email gets rejected or sent to spam.

How to fix it:In your SMTP settings, set the "From" address to an email address on a domain you control and have properly configured SPF and DKIM records for. If you are using a service like SendGrid or Mailgun, follow their domain verification steps to add the required DNS records.

The deeper problem: you have no visibility

All five of these problems share one thing in common: they are invisible. Your form looks fine. Your site is up. Your hosting dashboard shows no errors. The only signal is an absence — the leads that should have arrived but did not.

How long has it been since you tested your own contact form? Be honest. If the answer is "I cannot remember," you are not alone. Most site owners set up their form once, confirm it works, and never test it again. Then a plugin update, hosting change, or server configuration change breaks it silently, and leads disappear for weeks or months.

How to monitor your contact form with Uptrue

You cannot test your form manually every day. But you can automate the monitoring so you know the moment something breaks.

Step 1: Monitor the contact form page itself

First, make sure your contact page is actually loading correctly. A broken page means a broken form.

  1. Sign up at uptrue.io/signup (free plan available)
  2. Click Add Monitor
  3. Select Keyword as the monitor type
  4. Enter your contact page URL (e.g., yoursite.com/contact)
  5. Set the keyword to a phrase that always appears on your contact form page — your form title, a field label like "Your Message", or a submit button text like "Send"
  6. Set the check type to "Page must contain"
  7. Set the interval to 1 minute

This catches situations where the form page crashes, a plugin conflict breaks the layout, or the form shortcode stops rendering. If the expected form text disappears from the page, you get an alert immediately.

Step 2: Monitor for error states

Add a second keyword monitor to detect WordPress errors on the contact page.

  1. Click Add Monitor again
  2. Select Keyword
  3. Same URL — your contact page
  4. Set the keyword to "Fatal error" or "Error establishing a database connection"
  5. Set the check type to "Page must NOT contain"

If a PHP fatal error or database error replaces your contact form, this monitor fires instantly.

Step 3: Set up an HTTP monitor as a safety net

  1. Add an HTTP/HTTPS monitor for your contact page URL
  2. Set expected status to 200
  3. Set check interval to 1 minute
  4. Configure alerts to go to Slack, email, or Teams

This catches complete page failures where the server returns a 500 error or times out.

Step 4: Monitor your SSL certificate

An expired SSL certificate will show a browser warning on your contact page that stops most visitors from even reaching your form. Add an SSL certificate monitor to get alerted weeks before expiry.

Step 5: Check your site health right now

Run a free health check to see the current state of your site — uptime, SSL, DNS, and security headers. If there are underlying issues, fixing them now prevents future form failures.

Is your contact form page healthy?

Get an instant health score for your site. Checks uptime, SSL, DNS, security headers, and performance. No account required.

Check Your Website Score

What monitoring cannot do (and what you still need to fix)

Monitoring tells you when your form page breaks. It will not tell you if emails are silently failing to deliver. For that, you need to fix the root cause:

  • Install an SMTP plugin WP Mail SMTP is the most popular choice
  • Enable email logging — so you have a record of every email WordPress tries to send
  • Set up a backup notification — use Contact Form 7's Flamingo add-on to save all submissions to your WordPress database, even if email delivery fails
  • Test monthly — even with monitoring, submit a test message through your own form once a month to verify the full pipeline works

Monitoring and SMTP together give you the best protection. SMTP makes your emails actually deliverable. Monitoring makes sure the form itself is always accessible.

The cost of a broken contact form

Let us do some quick maths. If your contact form generates just 2 leads per week, and your average deal is worth $500, a broken form costs you $1,000 per week. Four weeks of a silently broken form — which is not unusual — is $4,000 in lost revenue.

How much does monitoring cost? Free to start. A few pounds per month for the full setup. The maths is not even close.

Stop finding out from your customers

Your WordPress site could be down right now and you would not know.

Uptrue monitors your site every 60 seconds and alerts you on Slack, email, or Teams the moment something goes wrong — from full outages to subtle content changes that only a keyword monitor catches.

Set up a keyword monitor on your contact form. Catch broken forms before you lose leads.

Protect your contact form and your leads

Free plan available. Keyword monitoring, HTTP checks, SSL monitoring. No credit card required.

Frequently asked questions

Why is Contact Form 7 not sending emails?

The most common reason is that your hosting provider blocks the PHP mail() function. Contact Form 7 uses mail() by default, and many shared hosts disable it to prevent spam. Other causes include incorrect SMTP configuration, reCAPTCHA blocking legitimate submissions, plugin conflicts, and incorrect "From" email addresses that fail SPF/DKIM checks.

How do I test if my Contact Form 7 is actually sending emails?

Submit a test message and wait. If you do not receive it within a few minutes, check your spam folder. If it is not there either, install WP Mail Logging to see if WordPress is even attempting to send. You can also set up a keyword monitor on your thank-you page with Uptrue — if the confirmation text stops appearing after form submission, you will know immediately.

Do I need an SMTP plugin for Contact Form 7?

In most cases, yes. The PHP mail() function that Contact Form 7 uses by default is unreliable on many hosts and often lands in spam even when it works. An SMTP plugin like WP Mail SMTP routes your emails through a proper email service (Gmail, SendGrid, Mailgun, etc.) with authentication, which dramatically improves deliverability.

Can I monitor whether my contact form is working without submitting test messages manually?

Yes. With Uptrue keyword monitoring, you can monitor your contact form page and thank-you page automatically every 60 seconds. If the form page stops loading correctly, or if the confirmation message disappears, you get an alert on Slack, email, or Teams. This catches broken forms, plugin conflicts, and page errors without any manual testing.