When the contact form’s CAPTCHA is down: failing open
Most form plugins treat any CAPTCHA problem as a failed check. If the service is down, slow, over its limit or rejects your secret, every visitor is told they look like a bot, and every enquiry is lost until someone notices. A safer design accepts the message, marks it as unverified, and keeps the other spam checks running.
Four ways a CAPTCHA fails that aren't the visitor's fault
- The service doesn't answer — an outage, a network problem between your host and the provider, or a timeout.
- Your secret key is rejected — rotated, deleted, or pasted with a character missing.
- A usage limit is reached — reCAPTCHA's free tier stops answering once the month's allowance is used.
- A script blocker in the visitor's browser prevents the widget from loading.
In the first three, rejecting the message punishes the visitor for your configuration or someone else's outage.
How Mailbag handles each one
- No answer — the entry is accepted and marked unverified. It's saved and the notification sent as normal.
- Secret rejected, or limit reached — the same, plus a notice on Mailbag's screens for administrators saying the key needs fixing. It disappears after the next successful check or a new key.
- A real failed check — the visitor is asked to confirm they're human and press Send again, with what they typed kept.
- A low reCAPTCHA score — saved as spam, where you can still read it.
Throughout, the honeypot, the 3-second time trap and the limit of five messages per address per ten minutes keep working, so an unverified entry has still passed three checks.
Why “fail open” is the right default here
A contact form exists to receive enquiries. A few extra spam messages during an outage cost you a minute; a day of refused customers costs you business you never hear about. The same principle runs through Mailbag: save first, tell the owner what went wrong, and never let an outside service decide that a real message disappears.
Mailbag Contact Form is a free contact form that saves every entry before it sends anything, and shows you what happened to each email.
See what it does