Skip to content
Contact Form Email Guide

Contact form not sending email? How to find the cause.

The form says thank you, and nothing reaches your inbox. Or the visitor gets an error you cannot explain. The fault is rarely in the form itself. It sits in who the email is sent from, how it leaves the server, whether it was sent at all, and whether the receiving side believes it. Here is the order we check things in for Contact Form 7, WPForms and Gravity Forms. Most of it you can do yourself.

First: "sent" only means handed over

When a form says your message was sent, WordPress has only passed the email on. Its own documentation says a successful send does not mean anyone received it, only that the request was processed without errors. Whether it arrives is decided later, by your host and by the spam filter at the other end. So separate two questions: did the site send the email, and did it arrive? Install a free plugin that sends a test message and logs every email the site sends, such as Check & Log Email, or use the Email Test tab in WP Mail SMTP. Keep a copy of every submission while you work (see below).

What the symptom tells you.

How the email goes missing says a lot about where it stops. Find your case, then go to that step in the checklist.

Contact Form 7 shows an error

By default the visitor sees "There was an error trying to send your message" both when the email failed and when the submission was blocked as spam. Contact Form 7 tells them apart by colour: a red border round the message means the email failed, an orange one means spam. See steps 2 and 5.

No email arrives, not even the test

The site cannot send, or the host drops mail from WordPress. Typical when WordPress sends through the server's own mail function with no SMTP set up. See steps 3 and 4.

The test arrives, the form email does not

Sending works, so the fault is in the form's own settings: the wrong recipient, a sender address that is not on your domain, or a spam check that stops the submission. See steps 1, 2 and 5.

It lands in spam

The email was delivered and then judged. Almost always a sender address that does not belong to your domain, or SPF and DKIM that do not pass. See steps 1 and 6.

Gmail gets it, your work address does not

Your mailboxes are on Google Workspace or Microsoft 365, the site is on a cPanel host, and the server still thinks it handles mail for your domain. See step 7.

It worked, then stopped

Something changed: a plugin update, new spam protection, a new host or mail provider, a new DNS record. Start with whatever changed last. Expired or swapped reCAPTCHA keys are a common one. See step 5.

The checklist: seven steps, in the order to take them.

Start at the top: the first steps take minutes and solve most cases. The last ones need access to your domain's DNS, usually at your registrar or host. Test the form after each change, not after all of them, so you know which one fixed it.

The From address should be on your own domain, such as [email protected]. Many forms send "from" the visitor's address. Your site is not allowed to send as gmail.com or outlook.com, so the receiving server treats the message as forged. Put the visitor's address in Reply-To instead, so pressing reply still goes to them. Contact Form 7, WPForms and Gravity Forms each say the From address should match the site's domain. While you are there, check the To address is one somebody actually reads.

Look at the email log from your logging plugin. If the form's email is not in the log, it never got that far, and the problem is in the form or in a spam check. If it is there, the site sent it and the fault is further down the line. Gravity Forms records this on the entry itself: since version 2.4.15 each entry gets a note saying either that WordPress successfully passed the notification email to the sending server, or that WordPress was unable to send it, often with the error.

With no SMTP set up, WordPress hands every email to the web server's own mail function, from wordpress@ plus your domain. Some hosts limit or drop that mail, and nothing on the site will tell you. The reliable fix is to send through a proper mail account or sending service, over SMTP or an API, using an SMTP plugin. In WP Mail SMTP, the free version's Debug Events tab shows the error when a send fails. Its email log is a Pro feature, so a free logger helps alongside it.

An SMTP error is good news, because it names the problem. "Could not authenticate" means the username, password or app password is wrong, or the account does not allow SMTP. A connection timeout usually means the host blocks the outgoing port. A rejection that mentions the sender means the account is not allowed to send as the From address you chose. Fix the one the log names before you change anything else.

Contact Form 7 does not send email for a submission it has marked as spam. reCAPTCHA, Cloudflare Turnstile and Akismet all plug into that check, so a reCAPTCHA v3 score set too strict, or keys that were swapped or belong to another domain, can block every message while the visitor sees the same error as a failed send. Look for the orange border. To test, remove the spam protection for a few minutes and submit again. If that works, the problem is the spam check, not email. Put the protection back once it is fixed.

Since February 2024, Gmail has required every sender to pass SPF or DKIM, and mail that fails can be put in spam or rejected. SPF is a DNS record listing who may send for your domain. A domain can have only one, and it may need no more than ten DNS lookups; two records, or too many lookups, make the check fail for all your mail. DKIM is a signature your mail provider or sending service adds, with a public key in DNS. To see what happened, send the form to a Gmail address, open the message, choose More and then Show original. The summary shows whether SPF and DKIM passed.

If your mailboxes are on Google Workspace or Microsoft 365 but the site runs on a cPanel host, the server may still believe it handles your domain's mail. Then form emails to your own address land in a mailbox on the web server that nobody reads, while emails to Gmail arrive fine. In cPanel, open Email and then Email Routing. Local Mail Exchanger means the server always accepts mail for the domain. Remote Mail Exchanger sends it on to the mail servers in your DNS. cPanel recommends Automatically Detect Configuration, but if the routing still says local while your mail is elsewhere, choose Remote. On other control panels, ask your host the same question.

Contact Form 7: where to look.

The most common form plugin we see, with the most confusing error. Menu names are as the plugin shows them in English.

Open the form and go to the Mail tab. The fields are To, From, Subject, Additional headers and Message body. From should be on your domain. The visitor's address goes in Additional headers as Reply-To: [your-email], which is how the default form is set up. If someone has replaced the From line with [your-email], that is very often the whole problem.

Contact Form 7 checks its own settings. If the sender is wrong, it shows "Sender email address does not belong to the site domain." Fix every warning the configuration check shows before you look anywhere else.

Mail (2) is an optional second email, usually used as an automatic reply to the visitor. If visitors get their copy but you do not, or the other way round, compare the two templates field by field. The one that works shows you what the other should look like.

Contact Form 7 uses the same default text for a failed email and a spam block, but not the same colour. Red means it tried to send and the email failed: look at steps 3 and 4. Orange means the submission was marked as spam and no email was attempted: look at step 5.

Contact Form 7 does not store submissions anywhere. Flamingo, from the same developer, saves each one in WordPress, so a lead is not lost even if the email is. Install it now, before you start changing settings.

WPForms and Gravity Forms: where to look.

Both send through WordPress, so steps 3, 4, 6 and 7 apply in the same way. The form settings and the records they keep are different.

Open the form in the builder and go to Settings, then Notifications. Check Send To Email Address, From Name, From Email and Reply-To Email Address. WPForms warns when the From Email does not match your website's domain. Its troubleshooting guide also says to use a From address on your domain, and to leave the Optimize Email Sending setting off while you test.

The free version does not save entries in your WordPress database, so if the email never arrived, there is no copy to look up on the site. An optional feature called Lite Connect backs entries up to WPForms' servers, but you can only restore them after upgrading to a paid licence. Check whether it is on, and decide now whether you want it.

Open the form, then Form Settings and Notifications. Check Send To, From Name, From Email and Reply To, and look at Conditional Logic: a rule set on a field can quietly mean the notification is never sent for most entries. Gravity Forms' documentation says to always use your site's domain in the From Email.

Gravity Forms saves entries by default, so the lead is usually on the site. Open an entry and read the notes at the bottom: they say whether WordPress passed the email on or could not send it. For more detail, switch on logging under Forms, Settings and read the log for the form. One catch: a data retention policy in the form settings can delete entries automatically, so check it before you rely on them.

Fluent Forms, Elementor forms and most others also send through WordPress. Check the sender, recipient and reply-to in their email or notification settings in the same way, then work through steps 2 to 7.

Would you rather we found it?

We trace where the email stops, set the form's sender and reply-to, move sending to an authenticated route and correct SPF, DKIM and DMARC for your domain. Then we send test messages and check each one passes. Free diagnosis, a reply within 30 minutes during business hours, a fixed price in writing before we start, and no fix, no fee. From €199, excl. VAT.
See WordPress email fixes

How not to lose more enquiries while you look.

Every day the form is broken can be a customer who thinks you never replied. Do these first, then find the cause properly.

1

Save every submission in WordPress

Flamingo for Contact Form 7, entries in Gravity Forms, or a form plugin that stores submissions. Then a lead is on the site even if the email never comes.

2

Show another way to reach you

Put your email address and phone number next to the form, so someone who hears nothing has another route.

3

Find the enquiries that went missing

Check spam folders, the email log, Flamingo or your form entries, and reply to the people who have been waiting. It is fine to say the form had a fault.

4

Test it every day until it is fixed

Send yourself one enquiry a day from the live form, from a phone, to the address that should get it. You will know the moment it works again, and the moment it breaks.

A real one: the form that said "sent" for months.

A maintenance client's enquiry form kept saving leads and stopped emailing anyone. Read the full case study.

Every lead was still in the database, and the site stored a delivery status for each one. The send log showed PHP mail() returning true for about 1,800 submissions going back months, including the client's own test that morning. The status field held that same return value, so it could only ever report success.

The site was on shared hosting and the mailboxes on Google Workspace. Every alert went out as the company's domain, to the company's domain, from a server that was not Google, and the domain's sender authentication was permissive and incomplete. That is step 3 and step 6 of the checklist at once.

Authenticated SMTP straight into Google Workspace, with an automatic fallback so the live form could not break during the change, and real SMTP errors written to the log and the lead record. Reported before 09:00, fixed and verified by 11:30 the same morning. Every enquiry from the outage was still in the database and went back to the team that day, which is why the first "meanwhile" step matters.

Questions about contact forms that do not send email.

Sent only means WordPress passed the email on. Whether it arrives depends on your host, your DNS records and the receiving spam filter. Start with a test email and a logging plugin, as described at the top of this page.
It fixes many cases, not all. The plugin changes how WordPress sends. If the From address is still the visitor's, or SPF and DKIM do not cover the account it sends through, the email can still fail. And it does nothing for a submission a spam check has already stopped.
Put it in Reply-To instead. You press reply as normal and the answer goes to the visitor. As a sender address it looks forged, and gets stopped.
Usually because the web server thinks it handles mail for your domain and delivers the message to a mailbox on the server. See step 7.
Only if they were saved. Contact Form 7 saves nothing without Flamingo. WPForms Lite does not save entries on your site, though Lite Connect may have a backup. Gravity Forms keeps entries unless a retention policy removed them. If nothing was saved, they are gone, which is why saving submissions should be switched on today.
Rarely. They all send through WordPress, so a new plugin with the same sender settings on the same server fails the same way. Fix the sending first, and switch only if you need something the current plugin cannot do.
They go through the same WordPress mail function, so steps 3, 4, 6 and 7 apply. Order emails also depend on order statuses, which is a different set of checks. For the sending side, see WordPress email fixes.
Yes. Free diagnosis, a reply within 30 minutes during business hours, and a fixed price in writing before we start, from €199. No fix, no fee. See WordPress email fixes.

Sources

Last checked 10 November 2026. Contact Form 7 details were checked in the plugin's source code, version 6.2.5. Plugin settings and labels change, so check the current documentation before you rely on a detail.

Contact Form 7: After submitting the form I get an error message: red border for mail failure, orange for spam.
Contact Form 7: Save submitted messages with Flamingo: Contact Form 7 stores nothing itself.
Contact Form 7: Turnstile integration and Akismet: spam checks that stop sending.
WPForms: Setting up form notifications and Troubleshooting email notifications: fields, the domain warning, Optimize Email Sending.
WPForms: Lite Connect: where WPForms Lite entries are kept.
Gravity Forms: Notification settings, Troubleshooting notifications and Logging: fields, entry notes, logs.
WordPress developer docs: wp_mail(): default sender, and what a successful send means.
WordPress.org: WP Mail SMTP and Check & Log Email: free test and log tools.
cPanel docs: Email Routing: Local and Remote Mail Exchanger.
Google: Email sender guidelines: SPF or DKIM for every sender since February 2024.
RFC 7208: SPF: one record per domain, ten DNS lookups.

Still no email?

If you cannot find it, we will.

Free diagnosis and a reply within 30 minutes during business hours. A fixed price in writing before we start, from €199, and no fix, no fee.

Chat on WhatsApp