🎉 Free WordPress fix for our first 50 sites — in exchange for an honest review. Claim a spot →

Errors

WordPress Contact Form Not Sending Email: Every Fix

Jun 20, 2026 · 7 min read · By the Mend engineering team

When a WordPress contact form appears to work — the visitor sees a success message — but the email never arrives, the form itself is almost never the problem. The real culprit is almost always how WordPress sends mail, or how your hosting environment handles it. Fix the mail layer and the form starts working immediately.

What You're Actually Seeing

The symptoms vary just enough to be confusing:

  • Form submits successfully, but no email lands in your inbox (or spam).
  • Form submits, email arrives sometimes — intermittent delivery.
  • The form shows an error on submission ("failed to send" or a spinner that never stops).
  • Emails arrive for a while, then suddenly stop after a hosting change or plugin update.
  • Confirmation emails reach the visitor but admin notifications disappear, or vice versa.

All of these usually trace back to the same handful of causes. Work through them in order — each fix takes five minutes or less.

Why WordPress Contact Forms Stop Sending Email

1. WordPress is using PHP mail() and your host blocks it

By default, WordPress sends all email through PHP's built-in mail() function. Most modern shared hosts either disable it outright or let it run — but without a valid "from" address that matches your domain, receiving mail servers reject the message silently. The form thinks it succeeded; the email never arrives.

2. Emails are landing in spam

Before assuming a delivery failure, check the spam/junk folder — and ask the sender to check theirs too. Unauthenticated email from [email protected] looks suspicious to Gmail, Outlook, and most corporate mail filters.

3. The "From" address isn't authorised to send from your domain

If your domain has SPF, DKIM, or DMARC DNS records configured, any email that doesn't originate from an authorised mail server will fail those checks and get dropped. PHP mail() almost never passes them.

4. Your host's outbound mail is rate-limited or broken

Some hosts cap outbound email at a surprisingly low number per hour. Others have had their shared IP addresses blacklisted because another customer on the same server sent spam. Either way, your legitimate mail gets caught in the crossfire.

5. A plugin or theme conflict is interrupting the send

A caching plugin, a security plugin's spam filter, or a theme that loads incompatible scripts can all interfere with form submission — especially Ajax-based forms like Contact Form 7.

6. The form's notification settings are misconfigured

After updates to WPForms, Gravity Forms, or Fluent Forms, notification settings occasionally reset. The form is fine; it's just not sending to the right address — or to any address at all.

Step-by-Step Fixes

Step 1: Check spam first (30 seconds)

Search your inbox and spam folder for anything from [email protected] or whatever "from" address your form uses. Also send a test submission and watch both folders for two full minutes before moving on.

Step 2: Verify the form's notification settings

Open your form plugin's notification settings and confirm:

  • Contact Form 7: Settings → Mail tab — check the "To" field.
  • WPForms: Edit form → Settings → Notifications — check "Send To Email Address."
  • Gravity Forms: Edit form → Notifications — check each active notification.
  • Fluent Forms: Edit form → Email Notifications — check "Admin Notification."

If a field is using a merge tag like {admin_email}, go to Settings → General in WordPress and confirm the admin email is correct and verified. WordPress requires you to confirm admin email changes — if a change was never confirmed, it silently reverts.

Step 3: Install an SMTP plugin and connect a real mail account

This is the single most effective fix and the one you should land on regardless of what else you try. SMTP routes email through an authenticated mail service rather than through PHP, so it passes spam checks and arrives reliably.

WP Mail SMTP (by WPForms) is the most widely used option. FluentSMTP is a solid free alternative with no feature-gating. Install either one, then connect it to one of these:

  • Gmail / Google Workspace: Use the Google API / OAuth option in WP Mail SMTP for the most reliable setup. Never use your Gmail password directly.
  • SendGrid, Mailgun, or Postmark: Free tiers cover thousands of emails per month. These are transactional mail services built exactly for this use case.
  • Your host's SMTP server: cPanel hosts expose SMTP credentials under Email Accounts. Use port 587 with STARTTLS — not port 25, which is almost universally blocked.

After connecting, use the plugin's built-in "Send Test Email" feature and confirm delivery before closing anything.

Step 4: Check your DNS records (SPF and DKIM)

If you're sending through your own domain, make sure your DNS has an SPF record that authorises your mail provider. Your SMTP service's documentation will give you the exact record to add. For example, if you're using SendGrid, you'd add a TXT record to your DNS like:

v=spf1 include:sendgrid.net ~all

Add or update this in your domain registrar's DNS panel. Changes take up to an hour to propagate. Most SMTP plugins show a green check when SPF and DKIM pass — use that to confirm.

Step 5: Rule out a plugin or theme conflict

If SMTP is configured correctly but the form still fails to submit, you may have a JavaScript or Ajax conflict. Test this by:

  1. Temporarily switching to the Twenty Twenty-Four theme and retesting.
  2. Deactivating plugins one at a time (caching and security plugins first) and retesting after each.
  3. Checking your browser console (F12 → Console) for JavaScript errors on the page with the form.

Contact Form 7 in particular depends on Ajax for its submission flow. If a caching plugin serves a cached nonce, the Ajax call will fail with a "Failed to send your message" error. In most caching plugins, you can exclude the page containing the form from caching, or enable the "don't cache pages for logged-in users" option.

Step 6: Check your host's mail logs

If you have cPanel access, the Mail Deliverability tool shows whether your domain's SPF/DKIM records are aligned. The mail logs (under Email → Track Delivery) show whether PHP mail() attempted to send anything — and why it bounced or deferred. This is the fastest way to confirm whether the problem is in WordPress or downstream at your host.

Step 7: Test with WP Mail SMTP's email log

WP Mail SMTP Pro and FluentSMTP both include an email log that records every send attempt, the SMTP response code, and whether delivery was confirmed. Enable it, submit the form again, and read the response. A 550 response means the receiving server rejected it (usually SPF/DKIM). A 421 or 452 means your host is rate-limiting. Each response code points directly to the right fix.

Form-Specific Quirks Worth Knowing

Contact Form 7

CF7 validates the "From" field strictly. If you set the From address to the visitor's submitted email, many SMTP setups will reject it because that address isn't authorised on your domain. Always set "From" to a [email protected] address you control, and put the visitor's email in the "Reply-To" field instead.

WPForms

WPForms has a built-in connection to WP Mail SMTP — the two products are from the same company. If you're using both, enable the SMTP integration inside WPForms settings for the smoothest path.

Gravity Forms

Gravity Forms has its own notification system with conditional logic. After any Gravity Forms update, open each notification and click Save — there's a known issue where notifications silently become inactive after major version upgrades.

How to Prevent This From Happening Again

Set up SMTP properly once and you rarely touch it again. Beyond that:

  • Enable email logging in your SMTP plugin so you have a record if delivery fails.
  • Set up a free mail-tester.com check every few months to confirm your spam score hasn't degraded.
  • Monitor your DNS records — if you change hosts or move nameservers, SPF and DKIM records are easy to forget to migrate.
  • Include a test form submission in your routine after any WordPress, plugin, or hosting update.

A Care Plan that includes managed updates and uptime monitoring means someone catches these regressions before your leads disappear for a week without you noticing.

When to Call a Professional

If you've installed an SMTP plugin, pointed it at a working mail service, confirmed the credentials are correct, and email is still not arriving — something else is wrong. Common deeper causes include a wp_mail filter added by another plugin overriding your SMTP configuration, a server-level firewall blocking outbound connections on port 587, or a theme that strips the form's JavaScript. These take minutes to diagnose if you know where to look, and hours if you don't.

If you're stuck, get a free Mend diagnosis. A senior engineer will find the exact cause, explain it in plain English, and quote a flat price to fix it before any work starts — no card required. Most contact form issues resolve the same day.


For broader form of broken-site symptoms that appear alongside mail failures, see our guide to WordPress sites broken after an update — a plugin update is often what silently breaks a working SMTP configuration. And if you want to build a maintenance habit that catches these problems before visitors notice, the post on the WordPress maintenance routine that actually prevents emergencies is worth bookmarking.

Frequently asked questions

Why does my contact form say "message sent successfully" but I never get the email?

The form plugin reports success as soon as WordPress accepts the message for sending — it doesn't wait to confirm delivery. The failure happens after that handoff, almost always because PHP mail() is blocked or rejected by spam filters. Installing an SMTP plugin fixes this.

Can I use Gmail to send WordPress contact form emails?

Yes, and it works reliably. Use WP Mail SMTP or FluentSMTP with the Google API (OAuth) connection method — not your Gmail password. The OAuth method doesn't require you to lower your Google account security settings and handles token refresh automatically.

My form worked for months and just stopped — what changed?

The most common triggers are a hosting migration, a WordPress or plugin update that overwrote SMTP settings, or your sending IP ending up on a spam blacklist. Check your SMTP plugin's email log first — the SMTP response code will tell you exactly what happened.

Do I need a paid SMTP plugin, or will a free one work?

Free tiers of WP Mail SMTP and FluentSMTP are both fully functional for sending. The paid versions add email logging, open tracking, and multiple-connection support — useful but not required just to get reliable delivery working.