Skip to content 99% OFF 🎉 Anniversary Sale 99% OFF Shared Hosting Use Code HURRYUP Claim Offer 99% OFF Hosting
99% OFF Hosting — Code HURRYUP
Products
AI Website Builder New VPS Hosting Cloud Servers Web Hosting cPanel Hosting Dedicated Servers Domains
Company
About Documentation Support Center Contact Get Started Call +91 75795 45488
Login
Hosting Panel — cPanel & Billing Console Panel — VPS Management
ALL SYSTEMS OPERATIONAL
WordPress

Contact Form 7 Not Sending Email? Here's the Real Fix

Getwebup 7 min read

A customer fills out your Contact Form 7 form, sees the green "Thank you, your message has been sent" bar, and closes the tab feeling good about it. Three days later they email you asking why nobody replied. You check your inbox. There's nothing there. CF7 thinks it worked — and that's exactly the problem.

Symptom: CF7 says "sent," but nothing arrives

This ticket looks the same almost every time:

  • The form submits, the success message shows, no red error text anywhere
  • Your inbox (and spam folder) has nothing from that submission
  • It worked fine a few weeks ago, or works for some fields and not others
  • You changed a field name, added a new field, or installed a security plugin recently
  • Test submissions from your own email work, but real customer submissions don't — or vice versa

Contact Form 7 has no idea whether the email actually reached anyone. Its "sent" message just means PHP accepted the mail for delivery, not that it arrived. That gap is where almost every one of these tickets lives.

Cause: five places this quietly breaks

1. Mail tags don't match your form fields

CF7 splits form building and mail configuration into two separate tabs, and it's easy for them to drift apart. If you rename a field from [text* your-name] to [text* full-name] in the Form tab but forget to update [your-name] to [full-name] in the Mail tab, that tag doesn't get replaced — it just gets sent as literal text, or in older CF7 versions can quietly block the send. Check the Mail tab's "Message body" and header fields against the exact tag names in the Form tab, character for character.

2. "Additional Headers" set a bad Reply-To or From

A common customization is adding Reply-To: [your-email] in Additional Headers so replies go straight to the customer. If the visitor's typed email is malformed, or the field isn't actually required, that header can end up empty or invalid — and some mail transfer agents reject the whole message rather than send it with a broken header.

3. The From address doesn't match your domain

By default, CF7 sends From: WordPress <wordpress@yourdomain.com>. If a theme or another plugin changes that to something like noreply@gmail.com or an address that doesn't belong to your domain, your mail server (or receiving servers checking SPF) can silently drop or spam-bin the message because it fails alignment. This is the same underlying mechanism covered in our SPF/DKIM/DMARC guide — if your CF7 mail is landing in spam rather than vanishing entirely, that's the post to check next.

4. PHP mail() is failing without telling anyone

Same root cause as most WordPress mail issues: CF7 hands the message to PHP's mail() function, which hands it to Exim or Sendmail, which may reject it locally for a dozen reasons (sender domain mismatch, hourly send limit hit, spam signature) — and none of that comes back to CF7 as an error. Our WordPress SMTP setup guide covers replacing this with authenticated SMTP; if you haven't done that yet, it's the highest-leverage fix for CF7 specifically.

5. Anti-spam or caching plugins interfere before the mail even fires

Aggressive security plugins (Wordfence, All In One WP Security) sometimes block outbound connections or quarantine forms flagged as suspicious. Full-page caching plugins can occasionally serve a stale cached form that posts to an outdated nonce, which CF7 rejects as invalid before it ever tries to mail anything — that shows up as "There was an error trying to send your message" instead of a silent failure.

Fix: work through it in this order

Step 1 — install Flamingo and confirm CF7 actually tried to send

Flamingo is a free companion plugin by the same author as Contact Form 7. It logs every submission CF7 processes, whether or not the mail delivered. Install it, submit a test message, and check Contact → Flamingo → Inbound Messages.

  • Message is logged in Flamingo: CF7 processed the submission correctly — the problem is downstream, in mail delivery. Skip to Step 3.
  • Nothing logged at all: the form isn't even reaching CF7's mail step — check for a JavaScript/nonce error in your browser console, or a caching plugin serving a stale form.

Step 2 — line up every mail tag against the Form tab

Open the form's Form tab and copy each field's tag name exactly. Open the Mail tab and confirm every tag used in the "To," "From," "Subject," and "Message body" fields matches one of those names precisely — including hyphens and case. A single mismatched tag anywhere in the mail template is the single most common cause of this ticket.

Step 3 — sanity-check Additional Headers

In the Mail tab, expand Additional Headers. If you have a line like Reply-To: [your-email], make sure your-email is a required field of type email* in the Form tab, not plain text. An invalid or empty Reply-To value is a common reason a message that "looks fine" never leaves the server.

Step 4 — fix the From address

Under Mail tab → From, use an address on your own domain — ideally the same domain WordPress is installed on, e.g. wordpress@yourdomain.com. Avoid using the visitor's own email address as the From (use it as Reply-To instead); many receiving mail servers reject messages where the From domain doesn't match the sending server, since it looks like spoofing.

Step 5 — install WP Mail Logging and get the actual server response

Flamingo tells you CF7 tried to send. WP Mail Logging tells you what wp_mail() did with it and, once SMTP is configured, the real error text (auth failure, rejected recipient, connection timeout) instead of a generic "sent" message. This is the fastest way to stop guessing.

Step 6 — move off PHP mail() if you haven't already

If Steps 1–5 all check out and mail still isn't arriving, the underlying transport is the problem. Install WP Mail SMTP (or similar) and connect it to a real SMTP account — a cPanel email account, Google Workspace, or a transactional service like SendGrid or Amazon SES. Full walkthrough, including which port and auth method to pick, is in the SMTP setup guide.

What you seeLikely causeWhere to look
"Sent" but nothing in FlamingoForm never reached CF7's mail stepBrowser console, caching plugin, nonce errors
Logged in Flamingo, nothing in inboxMail tag mismatch or bad headerMail tab tags vs. Form tab field names
"There was an error trying to send your message"Server-side mail() rejectionWP Mail Logging error text, SMTP setup
Arrives, but always in spamSPF/DKIM alignment failureFrom address matches your domain; check SPF/DKIM/DMARC
Worked before, stopped after a plugin updateSecurity/caching plugin blocking outbound mail or formsDeactivate plugins one at a time to isolate

Prevention: stop this from coming back

  • Set up authenticated SMTP once, properly, instead of relying on PHP mail() — it turns silent failures into visible error messages
  • Keep Flamingo active permanently as a submission log, even after mail is working — it's the fastest way to prove "the form worked, the email didn't" to a customer
  • Whenever you rename or add a form field, immediately re-check the Mail tab tags in the same sitting
  • Use a dedicated From address on your domain and the visitor's email only as Reply-To
  • Test the live form after every CF7 or security-plugin update, not just after form edits

Most CF7 delivery problems come down to one of two things: a mail tag that got out of sync with the form, or a mail server that rejected the message and never told anyone. Flamingo and WP Mail Logging turn both of those from a guessing game into a two-minute check.

Frequently asked questions

Why does Contact Form 7 say "message sent" if the email never arrives?

CF7 only confirms that PHP accepted the message for delivery, not that it reached an inbox. Delivery happens after CF7 hands off, so failures there never make it back to the plugin's success message.

Do I need Flamingo to fix this?

You don't strictly need it, but it's the fastest way to tell whether CF7 processed the submission at all. If a message is missing from Flamingo, the problem is on the form side; if it's logged there but never arrives, the problem is in mail delivery.

Is this the same fix as the general "WordPress not sending emails" issue?

It overlaps at the SMTP layer, but CF7 has its own failure points — mismatched mail tags and Additional Headers — that a generic SMTP fix won't catch. Check the CF7-specific causes first, then apply SMTP if mail still isn't going out.

Why do only some of my CF7 forms fail to send?

This usually points to a per-form configuration issue rather than a server-wide one — most often a mail tag typo or an Additional Headers line on that specific form's Mail tab, not the site's mail transport.

Could a security plugin be blocking Contact Form 7 emails?

Yes. Some security and firewall plugins block outbound connections or quarantine submissions flagged as suspicious. If mail stopped right after installing or updating one, deactivate it temporarily to confirm before changing anything else.

#contact-form-7 #wordpress #email-delivery #flamingo #wp-mail-smtp #troubleshooting

Keep reading

Chat with Support