A website contact form can look perfectly healthy while quietly losing enquiries.
The visitor fills it in, clicks Send, sees a success message and assumes the business received the message. The business sees nothing.
That is why the first troubleshooting rule is important: do not treat the success message as proof of delivery. Trace the lead through every layer until you find the first place where expected and actual state disagree.
For a business that depends on enquiries, this is not merely an email problem. It is a broken revenue path.
Trace the full lead journey before changing anything
Think of the form as a small system:
visitor → browser validation → form endpoint → stored submission → email service → domain authentication → receiving mailbox → human follow-up
The visible form is only the first part.
Start with one controlled test. Use a private browser window, submit a realistic enquiry from an external email address, record the exact time, and take a screenshot of the confirmation state.
Then work downstream.
1. Check whether the website actually received the submission
If your form tool stores entries in a database or dashboard, look there first.
If the test entry exists, the browser-to-form part probably worked. Your problem is further downstream: notification generation, outbound email or inbox delivery.
If no entry exists, stop debugging email. Inspect the form itself: JavaScript errors, blocked requests, expired CAPTCHA keys, validation rules, security controls, server errors or a broken endpoint.
This distinction prevents hours of changing SMTP settings for a form that never reached the server.
2. Confirm where notifications are supposed to go
Check the recipient address configured on the form.
This sounds basic, but websites survive staff changes, email migrations and redesigns. A form can continue sending to an old mailbox long after everybody assumes it points somewhere else.
Also check conditional notification rules. Some forms send different services or enquiry types to different addresses. A bad condition can make only part of the form appear broken.
3. Check the sending layer
If the submission is stored but no notification arrives, inspect how the website sends mail.
Google’s current Workspace troubleshooting guidance notes that contact-form messages can be rejected or classified as spam and that authentication commonly uses SPF, SMTP relay or DKIM. See Google Workspace’s contact-form troubleshooting guide.
On WordPress, community support guidance similarly points to unauthenticated mail and incomplete SPF/DKIM configuration as common reasons submissions do not reach the inbox.
The useful question is not simply “Do I have SMTP?” It is:
Can I prove the website handed this exact test message to a sending service, and what did that service say happened next?
Use mail logs or provider logs where available. Look for the test timestamp and recipient.
4. Check sender identity and DNS authentication
A form should not pretend to send from the visitor’s Gmail or Yahoo address through your domain.
A safer pattern is to send from an authorised address on a domain you control and put the visitor’s address in Reply-To. That keeps the sending identity consistent while still letting staff reply normally.
Review SPF and DKIM for the actual service sending the notification. If you use DMARC, check that the configuration aligns with your sending setup.
Do not randomly replace DNS records. A domain may use several legitimate email services, and an uninformed edit can fix one path while breaking normal business email elsewhere.
5. Check the receiving mailbox, not just the inbox
If the sending provider reports successful delivery, inspect the recipient side:
- spam or junk;
- quarantine;
- mailbox rules and filters;
- forwarding rules;
- blocked senders;
- full or disabled mailboxes;
- organisation-level security policies.
Test more than one destination when possible. If Gmail receives the notification but a company mailbox does not, you have narrowed the problem considerably.
A form should not have email as its only record of a lead
This is the architecture decision I care about most for business-critical enquiry forms.
Email is useful for notification. It should not necessarily be the only copy of customer intent.
Where the platform allows it, store the submission independently in a form dashboard, database, CRM or other controlled system. Then email can fail without making the lead disappear completely.
The pattern becomes:
save the enquiry → confirm successful storage → notify the team → track follow-up
That is more resilient than “try to send an email and hope somebody receives it.”
Test the commercial journey, not only the form component
A technically working form can still lose business after submission.
| Layer | What to verify |
|---|---|
| Visitor | Form is usable on mobile and validation is clear |
| Submission | A real entry reaches the server or provider |
| Storage | The lead is preserved somewhere the business controls |
| Notification | The right team receives an alert |
| Delivery | Authentication and mailbox filtering do not silently block it |
| Confirmation | Visitor knows what happens next |
| Follow-up | Someone owns response time and status |
| Analytics | A genuine successful submission is measurable |
This is why I treat forms as part of the website’s business system rather than decorative UI.
What to do if you cannot find the failure
Avoid changing five things at once.
Record the current configuration first: form provider, recipient, sending domain, email service, DNS provider and the latest known-good test. Then change one layer, retest and record the result.
If the form is tied to paid ads, high-value consultations, bookings or quote requests, professional debugging is easier to justify because every silent failure can represent a real customer you never knew existed.
If the wider problem is that your site receives visitors but does not turn them into customers, read 5 reasons your website gets traffic but no sales. If you want me to audit the enquiry journey itself, see my web design service or contact me.



