
Contact Form 7 Not Sending Email? Here's the Fix (and the Safety Net)
The form says thank you — the inbox says nothing. Why wp_mail() fails silently, the SMTP fix that lasts, and the push-notification safety net that means a broken mail server never costs you a lead.
Contact Form 7 Not Sending Email? Here's the Fix (and the Safety Net)
The form says "Thank you for your message." The inbox says nothing. Contact Form 7 is one of the most-installed WordPress plugins in the world, and "CF7 stopped sending email" is one of the most-searched WordPress problems in the world — because the plugin is almost never the thing that's broken.
This guide walks through why the emails vanish, how to diagnose it in ten minutes, the fix that actually lasts, and the safety net that means a broken mail server never costs you a lead again.
Why Contact Form 7 emails don't arrive
Contact Form 7 doesn't send email. It hands your message to WordPress's wp_mail() function and walks away. wp_mail(), out of the box, asks your web server to deliver the mail with no authentication, no signing, and a "from" address the server has no right to use.
To Gmail and Outlook, that looks exactly like spam, because it's also exactly how spam is sent. So one of four things happens:
- The host refuses to send it. Many shared hosts block outgoing mail on port 25 entirely, or cap it. The mail dies on your own server.
- The receiving server rejects it. No SPF or DKIM record authorizes your web server to send for your domain, so the mail bounces before anyone sees it.
- It lands in spam. Delivered, technically. Read, never.
- PHP
mail()silently fails. A misconfigured server returns success and delivers nothing. CF7 shows the green "thank you" either way.
The cruel part: the visitor always sees the thank-you message. The form can be broken for weeks before you notice the silence.
Diagnose it in ten minutes
- Send a test through the form to an address you control — check spam too.
- Install a mail logger (WP Mail Logging is fine) and submit again. If the log shows the mail, WordPress did its part and the problem is delivery. If the log is empty, a plugin conflict or validation issue is stopping CF7 itself — re-test with other plugins disabled.
- Check the obvious config: the form's Mail tab must have a valid To address, and the From address must be on your domain (
noreply@yourdomain.com) — not the visitor's email. Using the visitor's address as the sender is the single most common misconfiguration; it fails SPF for their domain by definition. - Ask your host whether they block outbound mail. Many do and will tell you straight away.
The fix that lasts: send through SMTP
Stop asking your web server to be a mail server. Route the mail through a real sender:
- Pick a transactional mail service (Brevo, Postmark, SendGrid, Amazon SES — free tiers cover a contact form's volume many times over) or your Google Workspace / Microsoft 365 account.
- Install an SMTP plugin — WP Mail SMTP or FluentSMTP — and connect it to that service.
- Add the DNS records your provider gives you:
| Record | What it does |
|---|---|
| SPF | Lists servers allowed to send mail for your domain |
| DKIM | Cryptographically signs each message |
| DMARC | Tells receivers what to do when a mail fails the first two |
- Send the test again. Delivered, inbox, every time.
This fixes today. It does not fix forever — an expired API key, a suspended mail account, or a host migration can break delivery again, silently, any time.
The safety net: stop depending on email at all
Here's the part most guides skip. Your real problem was never the email — it was that a lead tried to reach you and nothing told you.
FlowAlert connects to Contact Form 7 and sends a push notification to your phone on every submission — with the visitor's name and message right on the lock screen. Two details matter:
- It listens to both of CF7's outcomes:
wpcf7_mail_sentandwpcf7_mail_failed. When your mail server breaks, the push still arrives — which means the moment mail dies is the moment you find out, from a notification that says the mail failed, instead of three weeks later from an angry caller. - It doesn't ride the mail stack at all. The plugin calls FlowAlert's API directly, after the page has finished responding, so a slow or dead mail server can't slow your forms down and can't take your alerts with it.
Setup is a five-minute job: install the FlowAlert WordPress plugin, paste your API key, toggle on Contact Form 7, and send yourself a test submission. Every form submission then reaches the right phone — routed, acknowledged, and escalated to a backup if nobody responds, which is the part a mailbox was never going to do for you.
FAQ
Do I still need the SMTP fix if I use push alerts? Yes — you still want the email trail for records and replies. Push is the safety net and the speed layer; SMTP is the archive. Run both.
Does this work for WPForms, Fluent Forms, Gravity Forms…? Same story, same fix, and yes — FlowAlert has one-click integrations for all the major form plugins.
How fast is the push after someone submits? Typically 1–3 seconds. Fast enough to call a hot lead back while they're still on your website.


