Product
Solutions
Compare
Resources
Get early access Talk to us
Troubleshooting

How to tell whether a client contact form has quietly stopped

A form that has stopped working looks exactly like a form that is working. The visitor still gets a thank you. Nothing errors, nothing alerts, and the first person to find out is usually the client.

A contact form showing a thank you message next to an empty enquiry inbox marked quiet for 21 days
The two views of the same broken form: the visitor's, and yours.

The short version

To check whether a WordPress contact form is working, submit it yourself from a signed-out browser using an address on another domain, then check the inbox, the spam folder, and the form plugin's own list of stored entries. Stored but not emailed means the mail is broken rather than the form. Nothing stored at all means the form itself is failing. Across a portfolio, testing every form by hand does not hold up, so the practical answer is to watch the enquiries arriving instead, where a site that has gone quiet shows itself.

Why a broken form gives no sign

Sending a form and sending an email are two separate jobs, and WordPress treats them that way. The browser posts the form, the site stores or processes it, the page returns a success message, and only after all that does something try to hand an email to a mail server.

If that last step fails, none of the earlier ones know. The visitor has already been thanked. The success message is not a report that you received anything; it is a report that the page finished loading.

Which is why this class of fault can run for a very long time. There is no error page, no admin notice, no uptime alert, and no bounce, because the failure is usually a message that was never accepted rather than one that was returned. Search Engine Land has documented a case where an agency lost months of leads to exactly this, with campaigns still delivering prospects the whole time.

Seven ways a WordPress contact form fails silently

Every one of these leaves the site looking healthy.

  • The host switched mail off and told nobody. Hosts restrict or disable PHP's mail function to stop outbound spam, sometimes after a security event on the server. The site carries on working perfectly. Nothing in WordPress reports it.
  • SMTP stopped authenticating. An API key expired, a password rotated, a mail provider suspended the account, or a host migration left the SMTP plugin pointing at settings that no longer exist. Extremely common straight after a move.
  • An update changed where notifications go. A plugin or theme update resets a notification address or reads an old setting differently, and mail starts going somewhere nobody reads.
  • It is arriving, in the spam folder. The mail is being sent and delivered, and filed somewhere the client never looks. From the site's side this failure is indistinguishable from success.
  • Authentication stopped matching. SPF, DKIM and DMARC records get edited during a DNS change or a mail migration, and receiving servers quietly start refusing mail that used to be accepted.
  • The address belongs to somebody who left. The form still sends faithfully to a mailbox that is full, closed, or forwarding into a void.
  • A caching layer is serving an old form. The page a visitor gets is a stored copy, pointing at an endpoint or carrying a token that is no longer valid.

Notice how many of these are triggered by routine work. Updates, migrations and DNS changes are the ordinary business of running client sites, and they are also the events most likely to break a form. The maintenance is what breaks it, which is precisely why it goes unnoticed by the person who did the maintenance.

How to check one contact form today

Six steps, about five minutes per site.

  • Submit the form yourself, from a browser you are not signed into on that site, using an email address on a different domain from the client's.
  • Check the inbox and the spam folder. A message in spam is a different problem from no message at all, and the fix is different too.
  • Check the plugin's own entry list. Most form plugins store submissions in the database. Stored but not emailed means the form works and the mail is broken. Not stored either means the form itself is failing.
  • Send a test mail from WordPress directly, with any of the small test plugins that do this. If that fails too, the problem is the site's mail, not the form.
  • Check the notification address on the form, and check a human still reads it.
  • Look at when it last worked. Line the last successful enquiry up against the site's update history, and the cause is usually sitting on the same date.

Step three is the one that saves the most time, and it is the one people skip. It splits the problem cleanly in half: a stored submission with no email is a mail problem, and an unstored submission is a form problem. Everything you do next depends on knowing which of the two you have.

If it turns out to be mail, the durable fix is to stop relying on the server's own mail and send through a proper mail service with authentication in place, then get SPF, DKIM and DMARC lined up for the sending domain. That is well-trodden ground and there is good documentation for it everywhere.

Why testing by hand stops working around ten sites

The six steps above are fine for one site. Multiply them by forty client sites and by every event that warrants a re-test, and the arithmetic stops working. Nobody is going to submit a hundred and twenty test enquiries a month, and the ones they do submit will be on the sites they already worry about rather than the quiet one where a form has been dead since a migration in March.

Manual testing also has a subtler flaw: it tells you the form worked at the moment you tested it. It says nothing about the three weeks between tests, which is where the leads actually went.

So the routine that gets written into the care plan is not the routine that gets done, and everyone involved knows it.

Watch the enquiries, not the form

There is a way round this that does not depend on anybody remembering anything.

Instead of testing whether a form can send, watch what it is actually producing. If real submissions from every client site land somewhere you can see, then a form that has stopped announces itself: the site simply stops appearing. No test needed, no schedule to keep, and the check happens continuously rather than on the day somebody got round to it.

It also catches the failures a test submission never would. A test you send yourself will not show you that genuine enquiries are being filed as spam, or that a client's mailbox stopped being read in April. Real traffic shows you both.

This is what contact form submissions in WPCentrify does: enquiries from every connected site collected into one list, with a spam filter that explains its decisions rather than just filing things away. A site with no enquiries this month is visible next to the ones with plenty, which is the entire diagnostic.

A routine that actually gets done

If you take nothing else from this, take these four:

  • Test after the event, not on a calendar. Updates, migrations, DNS changes and mail provider switches are when forms break. Test then and you catch most of it.
  • Know which plugins store entries. On sites where the plugin only sends and stores nothing, a failed notification is an unrecoverable lead. Those sites deserve attention first.
  • Put SMTP on every site. It removes the single most common cause, even though it removes none of the others.
  • Watch the output, not the mechanism. Somewhere you can see enquiries arriving across the portfolio turns this from a task somebody has to remember into something you would notice anyway.

The failure this article is about is not really a technical problem. Technically it is small, and usually a ten-minute fix. What makes it expensive is the time between the break and the discovery, and the only thing that shortens that is watching the right thing.

Answers

Related questions

Almost always because the mail is not leaving the server, or is leaving and not being accepted. WordPress sends through PHP's mail function by default, which many hosts restrict or disable outright to stop spam, and which carries no authentication, so what does get out is easy for a receiving server to reject. Sending through SMTP with a proper mail service fixes the sending half. Correct SPF, DKIM and DMARC records fix the accepting half.

Submit it yourself from a browser you are not logged into, using an address on a different domain from the site, then check both the inbox and the spam folder. If nothing arrives, check whether the submission was stored in the form plugin's own entry list. If it was stored but no email came, the form is fine and the mail is broken. If it was not stored either, the form itself is failing.

Monthly at a minimum, and immediately after anything that could disturb mail: a plugin or core update, a host migration, a DNS change, a new mail provider, or a change to who receives notifications. Those events are when forms break, so that is when testing is worth the most.

Yes, and it is one of the more common causes. An update can reset a notification address, change a setting the previous version stored differently, or conflict with the SMTP plugin doing the actual sending. Nothing errors, because from WordPress's point of view the form worked.

It depends on the plugin. Some store every entry in the database regardless of what happens to the email, which means the leads are recoverable once you notice. Others only send, and store nothing, in which case a failed notification is a lead that no longer exists anywhere. Check which of the two your clients are running before you need to know.

Usually because the message fails authentication. If SPF, DKIM and DMARC do not line up for the domain the mail claims to come from, a receiving server is entitled to treat it as suspicious, and many now do by default. Forms that send from the visitor's own address rather than the site's make this worse, because the site is not authorised to send as that domain.

Testing every form by hand does not survive contact with a real portfolio. The practical answer is to stop testing the form and start watching the enquiries: if you can see submissions arriving across every site in one place, a site that has gone quiet is visible without anybody remembering to check it.

It fixes the most common cause and it is worth doing on every site. It does not make the problem impossible: SMTP credentials expire, mail services suspend accounts, DNS records get edited, and notification addresses still point at people who have left. SMTP reduces how often this happens. It does not tell you when it has happened.

Available now

See the enquiries, and the sites without any

Contact form submissions from every WordPress site you manage, in one list, so a form that has stopped shows itself.

Free during early access. No credit card required.