Contact forms

Contact Form 7 not sending email? 8 checks that fix it

Contact Form 7 hands the email to WordPress, and most failures happen after that. Eight checks in order, from the Mail tab to SMTP and SPF/DKIM.

October 20, 2026 · 8 min read

Want it fixed today? Free for 5,000 emails a month. No card.

Someone fills in your Contact Form 7 form, and the email never reaches you. Sometimes the form shows an error. More often it shows the green thank-you message and nothing arrives. The checks below go in the order that finds the cause fastest. Do them one at a time and test after each change.

This guide is for Contact Form 7 only. If you use WPForms, Gravity Forms, Elementor, Ninja Forms or another plugin, read the general guide: Contact form not sending email? Why it happens and how to fix it.

How Contact Form 7 sends email

When a visitor submits the form, Contact Form 7 fills in the email template from the Mail tab and passes the result to WordPress’s wp_mail() function. WordPress then hands it to a mail server, which delivers it to your mailbox. A problem in any of these three places stops the email. The form can only tell you about the first two.

1. Confirm the form actually submits

Submit the form yourself and look at the message box under the button. Its border colour tells you what happened:

  • Green, “Thank you for your message. It has been sent.” Contact Form 7 passed the email to WordPress and WordPress accepted it. The problem is further along. Carry on with check 2.
  • Red, “There was an error trying to send your message. Please try again later.” WordPress could not send it. Read the guide to this error, then come back for checks 5 and 6.
  • Yellow, “One or more fields have an error. Please check and try again.” The form did not pass validation, so no email was sent at all.
  • Orange. Contact Form 7 treated the submission as spam and did not send it. By default the text is the same as the red error, so the colour is the only clue.

If the button spins forever or nothing appears, the problem is on the page itself, often a script conflict with a caching or optimisation plugin. That has nothing to do with email.

2. Check spam, junk and the To address

Search the receiving mailbox, including Spam or Junk, for the subject line. Then open Contact → Contact Forms, edit the form, go to the Mail tab and read the To field. The default is [_site_admin_email], which means the address in Settings → General → Administration Email Address. That is often an old address, or one that belongs to the developer who built the site.

If the emails are in spam, the rest of this guide still applies, and the spam guide covers that case in detail.

3. Fix Mail tab warnings and mail-tag mismatches

Contact Form 7 checks the Mail tab and shows a warning next to any field it does not like. The ones that matter most:

  • “Sender email address does not belong to the site domain.” See check 4.
  • “Invalid mailbox syntax is used.” The To or From field is not a valid address.
  • “There are invalid mail header fields.” Something in Additional headers is malformed.
  • “Unsafe email config is used without sufficient protection.” An address typed by the visitor is used as a recipient, and the form has no reCAPTCHA or Turnstile.

Then look for mail-tags that do not match a field. At the top of the Mail tab, under “In the following fields, you can use these mail-tags:”, Contact Form 7 lists the tags your form actually has. If you renamed a field from your-email to email, every [your-email] in the Mail tab is now left in the email as plain text. A Reply-To header of [your-email] is not an address, and some servers reject the whole message because of it.

4. Send from your own domain, reply to the visitor

The From field must be an address on your site’s domain. If it is [your-name] <[your-email]>, your server is claiming to be Gmail or Yahoo, and receiving servers treat that as forgery. Put the visitor in Reply-To instead. Recent versions of Contact Form 7 already set it up this way in a new form:

From:  [_site_title] <[email protected]>
To:    [email protected]
Additional headers:
Reply-To: [your-email]

Contact Form 7’s own documentation recommends creating a real [email protected] mailbox, because some hosts block mail from an address that does not exist. Any real address on your domain works. The full reasoning is in why your form must not send from the visitor’s email.

5. Check whether WordPress can send any email

Log out, click Lost your password? on the login page and request a reset for a user whose mailbox you can check. If that email does not arrive either, the problem is not Contact Form 7. WordPress on this server cannot send mail, and changing form settings will not help. The general guide to wp_mail not sending goes through this in more depth.

6. Hosting limits, disabled PHP mail and port 25

By default WordPress sends through the web server’s own mail program. That fails in a few common ways:

  • The host has disabled PHP mail(), or caps how many emails a site can send per hour.
  • The server is a cloud VPS where outgoing port 25 is blocked, so mail never leaves.
  • Mail does leave, but from a shared IP address that receiving servers do not trust.

The fix for all three is the same: send through an authenticated SMTP service on port 587 or 465, with a login, instead of the web server. You can do this with any WordPress SMTP plugin. With SecureSMTP, for example, the host is smtp.securessmtp.com, the port is 587 (STARTTLS) or 465 (SSL), the username is securessmtp and the password is your site’s API key. Setup steps are on the Contact Form 7 SMTP page.

7. Set up SPF, DKIM and DMARC for your domain

Once the email is sent from your domain through a proper server, receiving providers check that your domain allowed it. SPF lists the servers allowed to send for your domain. DKIM signs each message. DMARC tells receivers what to do when those checks fail. Contact Form 7’s documentation recommends SPF and DKIM, and Gmail now requires at least one of them from every sender. Without them, the email often lands in spam or is rejected. See SPF vs DKIM vs DMARC for what each record does.

8. Store submissions with Flamingo

Contact Form 7 does not save submitted messages anywhere. If sending fails, the message is gone. Install Flamingo from the WordPress plugin directory. It is free and made by the same author. Every submission is then saved under Flamingo → Inbound Messages, whether or not the email went out.

Flamingo also makes testing easier. If a submission is in Flamingo but not in your inbox, the form worked and the sending step failed. See form submissions saved but no email.

If one form should not be stored, for example a form that collects sensitive details, add do_not_store: true to that form’s Additional Settings tab.

How to confirm it is fixed

  1. Submit the form with a real address you can check, and a message of a few sentences.
  2. Check that you see the green thank-you message.
  3. Check that the email arrives in the inbox, not in spam.
  4. Press Reply and check that the reply is addressed to the visitor’s address, not your own.
  5. In Gmail, open the message, click the three-dot menu and choose Show original. SPF, DKIM and DMARC should all say PASS.
  6. If you use Mail (2) as an auto-reply, check that it arrived too. Mail (2) is only sent when the main email was sent successfully.

If you send through SecureSMTP, each Contact Form 7 email also appears in the delivery log with its result, so you can see delivered or bounced without waiting for someone to complain.

Specific Contact Form 7 problems

If you already know the symptom, go straight to the guide for it:

Frequently asked questions

Does Contact Form 7 send email by itself?

No. Contact Form 7 builds the email from the Mail tab and passes it to WordPress’s wp_mail() function. WordPress then hands it to a mail server. Most delivery problems happen in that second step, not in the form.

Where does Contact Form 7 send the email by default?

The default To field is [_site_admin_email], which is the Administration Email Address under Settings → General. If that address is old or unread, the emails are arriving somewhere nobody looks.

Does Contact Form 7 save submissions?

No. Contact Form 7 does not store submitted messages. Install Flamingo, a free plugin by the same author, and every submission is saved under Flamingo → Inbound Messages.

The form shows the green thank-you message. Does that mean the email was delivered?

No. It means WordPress accepted the email for sending. The mail server can still reject it, or the receiving mailbox can put it in spam. Only the inbox, or a delivery log, tells you it arrived.

Do I need an SMTP plugin for Contact Form 7?

Not for the form. Contact Form 7 works with whatever WordPress uses to send mail. An SMTP plugin, or a sending service with its own plugin, changes that so WordPress sends through an authenticated mail server instead of the web server.

Related reading

Get your contact form emails delivered

SecureSMTP sends your form notifications through an authenticated mail service with SPF, DKIM and DMARC in place, and shows the result of every email in a delivery log.

or sign up with email

Free plan: 5,000 emails a month. No card needed. Set up takes about five minutes.