Contact Form 7 not Sending Emails

Update: I’ve created the “Storage for Contact Form 7” plugin which saves all form submissions securely in your WordPress database so they never get lost when the email delivery fails. Learn more →

Storage for Contact Form 7
Save contact form entries in WordPress database.

It is the most common complaint that I see on the support forum for the Contact Form 7 plugin. This issue is very hard to debug because the plugin relies exclusively on email for form submission delivery. In the following article I am going to explain the main reasons for failed contact form deliveries and offer solutions to avoid losing those business leads and form entries.

Why it Happens?

Spam filters are smart. By default, Contact Form 7 is configured to send form submissions as if they originated from the email account of the person submitting the form. I consider this the main reason why they are being rejected and not being delivered to your inbox. Would you trust an email that only “appears” to be sent by PayPal or Amazon? Here is why it happens.

The IP address of your website (which is sending the email) does not belong to the sender’s email domain. The receiving mail server does a reverse DNS lookup to verify if the sending IP address resolves to the domain of the sender. This check will always fail if the From header is set to use the senders email address (which is [your-email] by default) without additional information about the origin of the email.

Add Required Email Headers

One possible solution is to add two additional email headers — Sender and Reply-To to all emails, like so:

Reply-To: [your-name] <[your-email]>

where Sender is a valid or fake email address that includes the domain name of your website, and Reply-To is the senders email address (same as From). Here is an example from an application form on WordPress Blogroll:

Contact Form 7 mail header configuration

These headers will inform the receiving mail server that the email was sent by your website on behalf of the sender. Please note that this is not a guaranteed fix and solution as there are many other factors that go into filtering unwanted and spam messages. With this change we are just telling the mail servers about our true intentions and why the message appears like it does.

Store Form Submissions in WordPress

If contact forms are critical to your business and you can’t afford to miss a single inquiry or lead due to email failure, you should use a form entry capture and storage plugin for Contact Form 7.

Storage for Contact Form 7 plugin

I have created the Storage for Contact Form 7 plugin which keeps copies of all Contact Form 7 submissions (including attachments) safely in your WordPress database. It is available on CodeCanyon for only $19. This plugin will ensure that you never miss a single form inquiry and submission even if you email stops working.

Please leave a comment below if you have any questions about the plugin.


  1. With the plugin above, will clients still get the error message or will it override the message and simply say that it sent (even if it did not reach my email)?

    • Kaspars says:

      Hey Amanda! It will store the entry in WordPress database before it is sent via e-mail. However, it won’t store it if there are any validation errors.

      Extras for Contact Form 7 is another of my plugins which will enable simple controls for the advanced functionality of the Contact Form 7 plugin including the ability to disable Javascript form submissions. That could solve the issue.

  2. sandy says:

    I just gave up and disabled contact form 7 after a customer called and said he’d sent an email via the form, and it never arrived. I wonder how many contacts we’ve lost over the past months or years from people who are not contacts, who tried reaching us, got a successful send message, but the message never arrived! I applaud your efforts to figure this out and devise a fix, but I’m kind of in shock that something we installed years ago has in all likelihood been a HUGE negative businesswise.

  3. We’re having the same problem. Suddenly the form is throwing a “sending failed” error message, even though the submissions are being captured in the Entries database.

    I’ve looked at all the FAQs but none of them has helped me solve it.

  4. Dan says:

    Same here. I have been researching and testing for several hours now and I still cannot get the form to send. Tried your solution above, and still get the dreaded Red Failed message. My ISP has confirmed all setups are correct and regular emails via email clients all deliver perfectly. I have Contact Form DB installed, so capturing emails but I still need the email sent so that various users on the site get informed that an email has been sent.

    Aaarghh! Any other ideas?

    • Kaspars says:

      Tried your solution above, and still get the dreaded Red Failed message.

      Seeing the red Failed message might indicate another kind of problem with your server setup. Could you try opening the browser console when submitting the form to see if there are any Javascript errors?

  5. Dan says:

    Hi Kaspars

    Thanks for your quick response.

    I have found a workaround by installing the “Configure SMTP” plugin and sending the mail via a gmail account. This did the trick.

  6. Jonathan says:

    I’m having this problem, but only with Contact Form 7 Multi-Step. It was working fine until a week ago when it stopped sending emails. I get a confirmation at the last step of the process after hitting send, but the email never comes through. The strange part is that the regular contact forms (not multi step) are working just fine. Anyone had this problem? Very frustrating, client is getting angry with me sending them a data dumb every day!!

    • Kaspars says:

      I noticed that Contact Form 7 has introduced significant changes in one of the recent versions of the plugin which might be causing the issue. Unfortunately, I don’t have the time to investigate it further.

  7. darren says:

    The SMTP Mail plugin has solved it for me. It is a workaround for the spoofing issue often associated with shared hosts.

  8. Michael says:

    They above fix did not work for me.. I still do not receive the emails. Can you please help me asap. we have missed two months of leads due to this.

  9. Greg says:

    Was scratching my head wondering why emails didn’t come through. Your header entries did the trick. Thanks so much!

    • Marcy says:

      This header solution worked for me as well!
      But just in case, I do want to get the Contact 7 For Plug -In … will this plug-in update with future versions of WP Contact Form?

      • Kaspars says:

        Marcy, are you referring to the “Storage for Contact Form 7” plugin? Yes, I’m constantly making sure that it works with every release of Contact Form 7.

  10. James Burke says:

    Excellent! – worked for my client who was worried sick!

    thanks for that simple fix ;-0

  11. Elisabet says:

    My contact mail on my website are supported by an exchangemail server. This server blocks all mail coming in from contact form 7. They have tried to unblock it without success. With your plug-in above, will the incoming mail from the contact form be kept in my WordPress Dashboard? Even if my server usually blocks it?
    Thank you in advance.

  12. Michael says:

    Does Storage for Contact Form 7 store the submissions even when the end user gets a red error saying failed to send?

  13. Katie Kirk says:

    Worked great for me! Thank you very much.

Leave a Reply