A WordPress site that stops sending email rarely shows an error. The contact form still says thanks. The order still goes through. The message just never reaches anyone. Before you change anything, find out where the email stops, because the fix depends on it.
First, find where the email stops
Install a mail logging plugin, or use the log inside your SMTP plugin if it has one. Submit the form once and look at the log.
- Nothing in the log. WordPress never tried to send. The problem is in the form or its notification settings (causes 5 and 6).
- Logged as failed. WordPress tried and the server refused. Look at causes 1 and 7.
- Logged as sent, but nothing arrived. The message left the site and was dropped or filed as spam on the way. Look at causes 2, 3 and 4.
1. The site still uses PHP mail
Out of the box, WordPress hands every email to the web server’s own mail function. Nothing signs those messages, and the server that sends them is a web server with no reputation as a mail sender. Many hosts limit this function or switch it off.
Fix: send through a real mail service over SMTP or an API. Plugins such as WP Mail SMTP, FluentSMTP and Post SMTP connect WordPress to providers like Google Workspace, Microsoft 365, Amazon SES, Postmark, Brevo or Mailgun.
2. The From address is on the wrong domain
This is the most common cause on sites that already use SMTP. The form puts the visitor’s address in the From field, or an address at gmail.com, or an address on an old domain. Receiving servers see mail that claims to come from one domain and was sent by another, and they reject it.
Fix: set From to an address on the site’s own domain, for example forms@clientsite.com. Put the visitor’s address in Reply-To. Replies still go to the visitor.
3. SPF, DKIM or DMARC is missing or broken
These three DNS records tell receiving servers which services may send mail for the domain. If the record does not list the service the site uses, or the DKIM key was never published after a provider change, the mail fails authentication. Gmail, Yahoo and Microsoft now enforce these checks.
Fix: run the domain through the SPF, DKIM and DMARC checker. Add the missing record, or add the sending service to the record that exists. There is a plain-language guide to the three records if you need one.
4. The email arrives, in the spam folder
Search the recipient’s spam and quarantine folders for the form’s subject line before you assume the email is lost. A message with correct authentication can still be filed as spam if the content looks like spam or the sending domain is new.
Fix: fix causes 2 and 3 first, since they explain most spam placement. Then use a plain subject line and keep links out of the notification body where you can.
5. The notification settings are wrong
A typo in the recipient address. An address for someone who left the company. A second notification that was switched off during testing and never switched back on. Conditional logic that only sends when a field has a certain value.
Fix: open the form’s notification settings and read every field. Send to more than one recipient if a single mailbox is a risk. Plugin-specific steps: Contact Form 7, Elementor forms, WPForms, Gravity Forms, Ninja Forms. For store emails, see WooCommerce not sending emails.
6. The form never submits
If the mail log is empty, check that the submission happens at all. A JavaScript error from another plugin can stop the submit button from working. A cached page can serve an expired security token, so the server rejects the submission. A hidden required field can block it with no visible message.
Fix: submit the form with the browser console open and look for errors. Exclude pages with forms from page caching. See when a form looks fine but won’t submit.
7. The host limits or blocks outgoing mail
Shared hosts often cap the number of emails per hour, and some block the outgoing SMTP ports. Mail works during testing and fails on a busy day.
Fix: ask the host what the limits are. Send through an API-based mail service, which uses normal web traffic and is not affected by blocked SMTP ports.
Why the fix does not stay fixed
Each of these causes can come back without anyone touching the form. A host migration changes the sending server. A plugin update resets a setting. Someone edits DNS and removes a record. A mailbox fills up. The form keeps showing its success message through all of it.
That is the problem Formitor was built for. It sends a tagged test lead through each form on a schedule and checks that the notification email reaches a real inbox. When one does not, you get the alert, not the client. The free plan covers 2 sites.