WotWP Blog

Your WordPress contact form stopped sending email: fix it today

A white envelope sealed with a strip of kraft tape marked with a green checkmark, with a brass paperclip beside it, on a blue background

The short answer

When a WordPress contact form stops sending email, the form usually still works: your web server sends the message with no proof it came from your domain, so Gmail or Outlook sends it to spam or drops it. The fix is to send your site's mail through a real email account with an SMTP plugin, and to make sure your domain's SPF, DKIM and DMARC records vouch for it.

Work through it in this order. Each step either finds the problem or rules it out.

  • Check spam and the "send to" address. Rule out the simple causes first.
  • Send a test and see where it stops. The form's own message tells you whether WordPress tried to send.
  • Fix the From address. It has to be an address on your own domain.
  • Send through a real mail account. An SMTP plugin replaces the server's unsigned mail.
  • Check SPF, DKIM and DMARC. Three DNS records that prove the mail is yours.
  • Confirm the fix. A test that arrives in the inbox, with three passes in the message details.

You need three things before you start: an admin login for WordPress, a login for wherever your domain's DNS is managed (often your domain registrar or your host), and access to the inbox the messages should reach.

1. Check spam and the "send to" address

Look in the spam or junk folder of the inbox that should receive the messages, then open your form's settings and read the "send to" or "To" address letter by letter. Both causes are common and take a minute to rule out. If you find form messages in spam, keep going: steps 3 to 5 are what stops them landing there.

While you are in the settings, check two more things:

  • The address still exists. A mailbox that was renamed, deleted or moved to a new email provider is a common reason messages stop when nothing on the site changed.
  • Mail rules and filters. A rule in your inbox can file or delete messages before you see them. Search the whole mailbox, including archive and trash, for the subject line your form uses.

2. Send a test and see where it stops

Fill in your own form as a visitor would, from a logged-out browser, using a personal address that is not on your domain. What happens on screen tells you where the problem is.

What you see after you press send

What it means

Go to

A success message, but no email arrives

WordPress handed the message on, and it was lost or filtered after that

Step 3

An error, such as Contact Form 7's "There was an error trying to send your message"

WordPress tried to send and the server refused

Step 4

The page reloads or spins and nothing happens

A broken plugin, a caching setting or a spam-protection setting is stopping the form itself

Turn off page caching for the form page and test again; if that fails, ask whoever looks after the site

A success message is not proof of delivery. WordPress's own documentation for its mail function says "A true return value does not automatically mean that the user received the email successfully" (WordPress developer docs). It only means the server accepted the job.

Some form plugins keep a copy of each entry in the WordPress dashboard. If yours does, find your test entry there. A saved entry with no email is the clearest sign that the form works and the mail does not.

3. Fix the From address

Set the form's "From" address to a real address on your own domain, such as hello@yourbusiness.com, and put the visitor's email in the "Reply-To" field instead. Inboxes reject mail that claims to come from one domain but is sent by another, and many forms are set up to do exactly that.

Two setups cause most of the trouble:

  • The visitor's address in From. If someone with a Gmail address fills in your form, the message claims to come from Gmail but leaves your server. Gmail can tell, and it treats the message as forged.
  • WordPress's default address. Unless something changes it, WordPress sends from wordpress@ followed by your domain (WordPress source). That mailbox usually does not exist, which makes the message look less trustworthy.

In most form plugins, the From and Reply-To fields are in the form's notification or mail settings. With Reply-To set to the visitor's address, pressing reply in your inbox still answers the person who wrote to you.

4. Send through a real mail account with an SMTP plugin

Install an SMTP plugin and connect it to a real email account or mail service, so your site's mail is sent the way your own email is: signed in, from a known sender. By default, WordPress hands its mail to your web server through PHP's built-in mail function (the code says so: "Set to use PHP's mail()", WordPress source). That mail is anonymous, and inboxes trust it less every year.

SMTP is the standard way email programs send mail. An SMTP plugin makes every email your site sends, from forms, WordPress itself and other plugins, go out through the account you choose. Widely used free options in the WordPress plugin directory include WP Mail SMTP, FluentSMTP and Post SMTP.

Pick the account to send from:

Send through

Good for

Note

The mailbox you already use on your domain (Google Workspace, Microsoft 365)

Most small sites with a few form messages a day

Your email provider's sending limits apply

Your host's email service

Sites whose email is already with the host

Check that the host publishes SPF and DKIM settings for it

A transactional mail service (such as Brevo, Mailgun, Postmark, SendGrid or Amazon SES)

Sites that send more mail, or owners who want delivery logs

Needs its own account and DNS records

Then:

  1. Install and activate the SMTP plugin from Plugins, then Add New, in your WordPress dashboard.
  2. Choose your mail provider in the plugin's setup. Where the plugin offers a sign-in button or an API key for your provider, use it instead of typing your mailbox password into WordPress.
  3. Set the From address to the address from step 3, and turn on the setting that forces it for every email, if the plugin has one.
  4. Use the plugin's test email feature to send a message to an address outside your domain.

If the test fails, the plugin usually shows the error from the mail server. A sign-in error means the account details are wrong; a "relay" or "sender" error usually means the From address does not match the account you connected.

5. Check SPF, DKIM and DMARC

Your domain needs three DNS records that tell inboxes your mail is genuine: SPF lists who may send for your domain, DKIM adds a signature that proves a message was not changed, and DMARC tells inboxes what to do when the other two fail. Since February 1, 2024, Google has required everyone who sends to Gmail to "Set up SPF or DKIM email authentication for your sending domains" (Google).

In plain terms:

Record

What it says

Where you get it

SPF

"These services may send email for my domain"

Your mail provider's setup guide. Google Workspace, for example, uses the record v=spf1 include:_spf.google.com ~all

DKIM

"Mail signed with this key really came from me"

Your mail provider's admin panel generates it; you paste it into DNS

DMARC

"If a message fails SPF and DKIM, here is what to do with it"

You write it. A safe start is v=DMARC1; p=none; rua=mailto:you@yourbusiness.com

Three rules keep this from going wrong:

  • One SPF record only. If you send through Google and a mail service, both go in the same SPF record. Two separate SPF records make the check fail (RFC 7208).
  • Every service that sends for you is listed. The SMTP service from step 4 has to appear in SPF and have its own DKIM key, or its mail fails the check.
  • Start DMARC at p=none. That setting only asks for reports and blocks nothing. Google says a DMARC policy "can be set to none" even for its large-sender rules (Google).

DNS changes can take a few hours to show up everywhere, so test again later the same day if the first test after a change still fails.

6. Confirm it is fixed

Submit your own form again, to a Gmail address and to an Outlook or work address, and check three things: the message arrives in the inbox rather than spam, it shows your domain as the sender, and its details show SPF, DKIM and DMARC as passed. In Gmail, open the message, choose "Show original" from the three-dot menu, and read the three results at the top.

Result

What to do

Inbox, and all three show PASS

Fixed. Write down the date and the settings you used

Inbox, but one result fails

It works for now. Fix the failing record from step 5 before an inbox gets stricter

Spam, and the results pass

Mark it "not spam" and check that the From address and Reply-To are set as in step 3

Nothing arrives

Go back to step 4 and read the error in the SMTP plugin's test

Then make the check a habit. Send one test through every form on your site once a month, and again after any plugin or WordPress update. It takes a few minutes and finds the next break before a customer does.

Why it will break again

This fix depends on three pieces of software that each need updates: the form plugin, the SMTP plugin and WordPress itself. Any update can change a setting, clash with another plugin, or reset a mail configuration, and nothing tells you when a form goes quiet. You find out when the leads stop.

That is the real problem behind a silent contact form: a WordPress site is a set of plugins someone has to keep patching and testing. Plugins are also where most WordPress security trouble starts. Patchstack counted 11,334 new WordPress vulnerabilities in 2025, 91% of them in plugins (Patchstack). The process fix is the monthly test above, plus a written list of every form and where it sends, so whoever looks after the site knows what to check.

If the form was the only problem and the site otherwise works, fix it, add the monthly test, and stay where you are. Stay on WordPress too if your site is a store, has members or courses, or is built around one plugin feature: those sites need WordPress, and a broken form is a fixable setting.

When moving is the better fix

If your site is mostly pages and posts and this is the second or third time something has broken, the lasting fix is a site with fewer moving parts to patch. EmDash, the open-source CMS from Cloudflare that its makers call "the spiritual successor to WordPress" (emdashcms.com), is built on Astro and handles email differently: "A single active provider plugin delivers all outgoing mail", and the admin has a send test email button under Settings, then Email (EmDash docs). Plugins from its registry are sandboxed and permission-gated. Our EmDash vs WordPress comparison covers what changes for an owner and what gets harder.

Forms are also the part of a move most likely to go wrong. WordPress form plugins do not move with your content, so every form has to be rebuilt and tested on the new site before launch. Our website migration SEO checklist lists that check alongside URLs, redirects and search details, with the proof to ask for at each step.

Bring your WordPress site into the AI era on EmDash and Astro. We check every URL, redirect, form and search detail against your live site before anything changes, send a real test message from every form, and switch only after you approve the preview, with the rollback written down. With Looked after hosting, which we recommend, we host the site after launch and email you a monthly certificate listing the checks we ran and what changed. Prefer to host it yourself? Download your finished site instead and run it on your own Cloudflare account. A free, read-only check of your public pages shows whether your site is a good fit and the exact price before you ask.

Want to know where your site stands? Check your site for free.

Frequently asked questions

Why is my WordPress contact form not sending email?

Usually the form works but the email is filtered. WordPress sends through your web server's built-in mail function by default, without proof the message came from your domain, so Gmail and Outlook send it to spam or drop it. An SMTP plugin plus SPF, DKIM and DMARC records fixes most cases.

Why is my Contact Form 7 not working?

Check the Mail tab first. The From address should be on your own domain, with the visitor's email in Reply-To instead. If the form shows "There was an error trying to send your message", your server refused to send, and an SMTP plugin connected to a real mail account is the usual fix.

Do I need an SMTP plugin for my WordPress site?

For a site whose forms bring in leads, yes. Without one, WordPress mail leaves your web server unsigned, and inboxes trust it less every year. An SMTP plugin sends every site email through a real mail account you choose, the same way your own email is sent.

What are SPF, DKIM and DMARC in plain English?

They are three DNS records that prove your email is genuine. SPF lists the services allowed to send for your domain. DKIM signs each message so changes can be detected. DMARC tells inboxes what to do when a message fails both. Gmail has required SPF or DKIM from all senders since February 2024.

Why do my form emails go to spam?

Usually because the From address is not on your domain, or your domain's SPF and DKIM records do not cover the service that sends the mail. Set the From address to one on your domain, send through an SMTP plugin, and check that the message details show SPF, DKIM and DMARC as passed.

How do I know my contact form is working again?

Submit it yourself to a Gmail address and a work address. The message should land in the inbox, show your domain as sender, and show SPF, DKIM and DMARC as passed under Show original in Gmail. Repeat the test monthly and after every plugin or WordPress update.