If your WordPress contact form is not sending emails, the cause is almost always the same one. WordPress tries to send mail with PHP’s built-in mail() function, which carries no authentication, so Gmail, Outlook, and even your own host quietly drop it or push it to spam. The form still shows a thank-you message, so nothing looks wrong.
For a service business, that silence is lost work piling up. This guide walks through how to confirm the problem, fix the real cause, and make sure it never breaks again without you knowing. We fix this on the sites we maintain every week, so the steps here are the ones that actually hold.
Contents
- Why isn’t my contact form sending emails?
- Confirm the emails are really failing
- The fix: send through an authenticated sender
- SMTP vs a transactional email service
- Set up SPF, DKIM, and DMARC
- Contact Form 7, WPForms, and Gravity Forms gotchas
- Why it stopped sending after an update
- How to make sure it never breaks silently again
- What a broken form costs a service business
Why Isn’t My WordPress Contact Form Sending Emails?
Your WordPress contact form is not sending emails because WordPress sends mail through PHP mail(), an old method with no password and no signature. Modern mail servers treat unauthenticated mail as suspicious, so they reject it or file it as spam. The form submits fine and shows success, so the failure stays invisible until you notice the leads dried up.
There are six causes we see again and again.
- No SMTP authentication. The form mail goes out unsigned. This is the big one.
- A bad From address. It uses a free domain like gmail.com, or a domain that does not match your site.
- The host blocks PHP mail(). Many hosts limit or disable it to fight spam.
- Missing DNS records. Your domain has no SPF, DKIM, or DMARC, so inboxes do not trust it.
- A misconfigured plugin notification. The wrong Send-To address, or a spoofed From.
- A plugin is blocking the send. A security or caching plugin stops it, or the mail lands in spam.
First, Confirm the Emails Are Actually Failing
Before you change a single setting, confirm the mail is truly failing and not just sitting in a junk folder. Submit your own form with a real message, check every spam and promotions tab, then install a mail logging plugin so you can see whether WordPress even tried to send. Diagnosis first stops you from fixing the wrong thing for an hour.
Here is the order we use.
- Submit a real test through the live form, not just the plugin’s built-in test button, and send it to an inbox you control on a different provider.
- Check spam, junk, and the Gmail Promotions and Updates tabs.
- Install a mail log, WP Mail Logging or Check and Log Email. No log entry means WordPress never sent it, so the problem is the form or plugin config. A log entry with no delivery means an authentication or deliverability problem.
- Ask your host for the mail logs, or check the cPanel mail logs for rejection lines.
- Look for bounce-back messages at your From address. A real bounce usually names the exact reason.
That single split, never sent versus sent but rejected, tells you which half of this guide you need.
The Fix: Send Through an Authenticated Sender
The fix for almost every case is to stop using PHP mail() and send through an authenticated SMTP connection instead. An SMTP plugin logs your site into a real mail service with a username and a key, so every message is signed and trusted. This one change resolves the large majority of WordPress contact form email problems.
- Install an SMTP plugin. WP Mail SMTP and Post SMTP are popular, and FluentSMTP is free with no upsell, which is what we run on our own site.
- Set the From email to a real address on your own domain, like info@yourdomain.com. Never use a Gmail address, and never use the visitor’s address.
- Connect a mailer, which the next section covers.
- Send a test, then submit the real form again to confirm a clean delivery.
SMTP vs a Transactional Email Service: Which Should You Use?
For a business that lives on leads, connect your site to a transactional email service like SendGrid, Postmark, or Amazon SES rather than a personal Gmail connection. Transactional services are built to deliver one-to-one mail reliably, they sign every message, and they show you delivery and bounce data. A Gmail or Workspace connection works for low volume but has daily caps and no real dashboard.
| Mailer | Free tier | Best for | Notes |
|---|---|---|---|
| Gmail or Workspace SMTP | Included with your plan | Very small sites | About 500 a day, no delivery dashboard |
| Brevo | 300 emails a day free | Small business, easy start | Simple setup, decent deliverability |
| SendGrid | 100 emails a day free | Growing business | Strong deliverability and logs, what we run across our client fleet |
| Postmark | Free trial, then paid | Best raw deliverability | Fast, transactional focused |
| Amazon SES | About $0.10 per 1,000 | High volume, lowest cost | More technical to set up |
For most contractors and service businesses, SendGrid or Brevo is the sweet spot. If you send high volume, SES wins on cost.
Set Up SPF, DKIM, and DMARC So Your Forms Reach the Inbox
SPF, DKIM, and DMARC are three DNS records that prove your mail really comes from your domain, and without them even authenticated mail can land in spam. Add all three when you connect a mailer, your provider hands you the exact values to paste.
- SPF is a DNS TXT record that lists which services are allowed to send mail for your domain.
- DKIM adds a cryptographic signature to every message, checked against a key published in your DNS.
- DMARC is a policy record that tells receiving servers what to do with mail that fails SPF or DKIM, and where to send reports.
You add these wherever your DNS lives, usually Cloudflare, your registrar, or your host. Skip them and you will fix sending only to watch your mail sit in spam. If deliverability is wrapped up with a wider security cleanup, our WordPress security work covers the mail side too.
Contact Form 7, WPForms, and Gravity Forms: The Plugin Gotchas
Each form plugin has one or two settings that quietly break delivery even after SMTP is working. Check the plugin, not just WordPress. The three most common forms each have their own trap.
- Contact Form 7 sets the From address to the visitor’s email by default, which reads as spoofing. Set the From to an address on your own domain, then run the Validate Configuration tool under Contact, Contact Forms, and confirm the To field points at you.
- WPForms has an Optimize Email Sending toggle that delays notifications, turn it off if you want mail right away, and check each form’s Notifications, Send To Email Address. Keep the From and the Send-To different so inboxes do not flag it.
- Gravity Forms routes mail per notification, not from your admin email. Open Form Settings, Notifications, confirm the Send To and From, and make sure the notification is switched on for the right event.
Why Did My Contact Form Stop Sending Emails After an Update?
If your form was working and stopped after an update, the update most likely reset your mail settings or your sending credentials expired. Updates are the most common trigger we see for a form that breaks out of nowhere. The five usual suspects each have a quick check.
- A plugin or theme update wiped the SMTP config. Re-enter it and re-test.
- The host changed its mail policy or rotated ports. Check the host’s mail docs.
- An API key or app password expired or was revoked. Regenerate it at the provider.
- A DNS or domain change broke SPF or DKIM. Re-verify the records.
- A new security plugin is blocking outbound connections. Allowlist your mailer.
This is exactly why we test the contact form after every update on a care plan. If you want the safe way to run updates yourself, see our guides on how to update WordPress without breaking your site and how often you should update WordPress.
How to Make Sure It Never Silently Breaks Again
The reason form failures cost so much is that they are silent, so the fix is to make failure loud. Keep mail logging on, run a real form test on a schedule, and watch your provider’s delivery dashboard so a drop sets off an alarm instead of a mystery months later.
- Keep a mail log plugin active so every send is recorded.
- Run a monthly or post-update live form test to a monitored inbox.
- Watch the SendGrid or Postmark dashboard for bounce and drop spikes.
- Set a delivery alert if your provider supports one.
We run SendGrid across a fleet of client sites and rebuild form-to-CRM handoffs when they break, so we have seen most of the ways this fails. On our WordPress care plans we test the contact form after every update and monitor delivery, so a broken form gets caught in days, not months.
What a Broken Contact Form Really Costs a Service Business
For a contractor or service business, a contact form that fails for a month is not a technical annoyance, it is lost jobs. One missed inquiry for a $5,000 to $10,000 project is worth more than years of maintenance. The contact form is usually the single most valuable page on the whole site, and it is the one that fails the most quietly.
Put next to that, a care plan at $99 to $299 a month is cheap insurance. See what WordPress maintenance costs and what we cover for contractors and trades on our local services page.
Why is my WordPress contact form not sending emails?
Because WordPress sends mail through PHP mail() with no authentication, so modern mail servers drop it or mark it spam. The fix is to send through an authenticated SMTP connection or a transactional email service.
How do I test if my WordPress site can send email?
Install a mail logging plugin like WP Mail Logging or Check and Log Email, then submit your form. No log entry means WordPress never sent it. A log entry with no delivery means an authentication problem.
Do I need an SMTP plugin for my contact form?
In almost all cases, yes. Without SMTP, WordPress falls back to PHP mail(), which most hosts and inboxes no longer trust. An SMTP plugin connects your site to a real, authenticated mail service.
Why did my contact form stop sending emails after an update?
An update often resets the SMTP config, or your sending key expired, your host changed its mail policy, or a security plugin started blocking outbound mail. Re-enter your mail settings and send a test.
Why are my contact form emails going to spam?
Usually because your domain is missing SPF, DKIM, and DMARC records, or the From address does not match your domain. Add the three DNS records your mailer gives you and use a real address on your own domain.
Can you fix my contact form for me?
Yes. We set up authenticated sending, fix the DNS, repair the plugin settings, and put your forms on monitoring so they do not break again silently. Reach out through our contact page.
Get your forms fixed and watched
If your contact form is not sending emails and you would rather have it handled than guess, we can take it from here. We set up authenticated sending, fix the DNS, repair the plugin config, and put your forms on monitoring so they stay fixed.
