WordPress Contact Form Emails Not Arriving? Here's How to Fix It — WP Mail Tester

WordPress Email Guides

WordPress Contact Form Emails Not Arriving? Here's How to Fix It

7 Oct 2026 · 5 min read

Someone fills in the contact form on your WordPress site, sees "Thank you, your message has been sent", and you never receive it. You don't know it happened, so you never reply, and the enquiry goes to a competitor.

This is one of the most common WordPress problems, and it's rarely the form plugin's fault. It's almost always one of a few settings in how the notification email is sent. This guide shows you how to find which one, and fix it.

Why contact form emails go missing

Contact Form 7, WPForms, Gravity Forms, Fluent Forms and the rest don't deliver email themselves. When someone submits the form, the plugin builds a notification email and hands it to WordPress, which sends it through your site's mail setup. Things usually go wrong in one of these places.

1. The "From" address is set to the visitor's email

This is the classic mistake. It feels natural to make the notification come "from" the person who filled in the form, so you can just hit Reply. But your website isn't allowed to send email as someone@gmail.com.

Gmail, Yahoo, Outlook and most business domains publish DMARC policies that tell other mail servers to reject or spam-folder messages that claim to be from them but come from somewhere else. So when your form sends "from" the visitor's Gmail address, the email fails those checks and often disappears.

The fix: the From address must always be an address on your own domain. Use the visitor's email as the Reply-To instead. You still hit Reply and answer the visitor directly.

2. Your site is sending with PHP mail()

By default, WordPress sends through PHP's mail() function, which means your web hosting server sends the email directly. Mail providers have little reason to trust a web server, especially shared hosting servers that send for many other sites. These emails are often filtered or silently dropped.

3. The notification goes to the wrong address

Check that the "To" address is one you actually read. Form plugins often default to the WordPress admin email from when the site was set up, which might be an old address or a developer's.

4. Your domain's SPF, DKIM or DMARC records are missing or wrong

Even with the right From address, receiving servers check your domain's DNS records to decide whether to trust the email. Missing or broken records lead straight to the spam folder. Our guide to SPF, DKIM and DMARC for WordPress explains each one.

Step 1: Test what your form actually sends

Before changing settings, see what's really happening. Get a free test address from WP Mail Tester, then use it in your form so the email goes to the tester instead of you:

  • Temporarily set the form's "To" address to the test address, submit the form once, then change it back.
  • Or, if your form sends a confirmation to the person who filled it in, simply use the test address as your own email when you submit.

Within about a minute you'll see whether SPF, DKIM and DMARC pass, your spam score, and whether your site is sending through PHP mail().

Step 2: Fix the From and Reply-To settings in your form plugin

Each plugin puts these settings in a slightly different place.

Contact Form 7

Open Contact → Contact Forms, edit your form and go to the Mail tab.

  • From: use an address on your domain, for example Your Site <wordpress@yourdomain.com>. Don't put [your-email] here.
  • Additional headers: add Reply-To: [your-email] so replies go to the visitor.
  • To: check it's an inbox you read.

Contact Form 7 shows a warning at the top of the Mail tab when the From address doesn't belong to your site's domain. If you see it, fix it.

WPForms

Edit your form, then go to Settings → Notifications.

  • From Email: an address on your domain.
  • Reply-To: insert the form's Email field using the smart tag button.
  • Send To Email Address: check it's correct.

Gravity Forms

Open the form, go to Settings → Notifications and edit the admin notification.

  • From Email: an address on your domain.
  • Reply To: choose the form's Email field.
  • Send to: check the address.

Step 3: Send through a real email service

Fixing the From address helps, but if your site still sends through PHP mail(), many emails will still be filtered. Install an SMTP plugin such as WP Mail SMTP, FluentSMTP or Post SMTP, and connect it to a transactional email service like Brevo, Mailgun, Postmark or SendGrid. Our guide to PHP mail vs SMTP explains why this matters and how to switch.

Every form plugin sends through WordPress, so once WordPress sends through a proper service, all your forms benefit.

Step 4: Check your DNS records

Your email service will ask you to add DNS records to verify your domain. Add them exactly as given. Then make sure your domain has:

  • One SPF record that includes your email service.
  • A DKIM record from your email service.
  • A DMARC record, starting with p=none.

Step 5: Test again

Submit the form to a fresh test address and confirm SPF, DKIM and DMARC pass and the site is no longer using PHP mail(). Then submit it once more to your real address and check the email lands in your inbox, not spam.

Common questions

The form says "message sent" but nothing arrives. Is the form broken?

Almost never. "Message sent" only means WordPress accepted the email for sending. Whether it's delivered depends on the mail setup described above. If nothing arrives anywhere, not even in spam, PHP mail() being blocked by your host is a common cause.

Should I install a plugin that saves form entries?

It's a good safety net. WPForms, Gravity Forms and Fluent Forms can store entries in your WordPress dashboard, and Contact Form 7 has add-ons like Flamingo that do the same. Even if an email goes missing, the enquiry isn't lost. It doesn't fix delivery, though, so still follow the steps above.

Some emails arrive and others don't. Why?

That usually points to filtering rather than a total failure: some recipients' mail servers trust your emails and others don't. Authentication problems (SPF, DKIM, DMARC) and PHP mail() are the usual causes. A deliverability test shows exactly which checks are failing.

Check your WordPress email in 60 seconds Send one test email from your site and see exactly what's passing and what to fix. Free, no account needed.
Run a Free Test →
Rather have us fix it?

A WordPress email specialist does it for you, with a 14-day money-back guarantee.

← All guides