Contact form says “sent” but no email arrives?
A success message proves that the page changed. It does not prove that a request left the browser, that a form service accepted it, or that the intended inbox received it. These five checks separate those stages.
Run the free source check Read the five checksThe browser inspector processes pasted HTML on your device and makes no inspector network request. Never paste secrets, private customer messages, or production submission data.
Five checks, in order
Check whether the form submits anywhere
Inspect the opening <form> tag. An empty action, action="#", or a JavaScript handler that only changes visible state can produce a convincing “sent” message without delivering anything.
<form action="#">
...
</form>
A mailto: action is different but still fragile: it asks the visitor’s device to open an email application. It is not an in-browser delivery endpoint.
Check every value has a field name
Browsers submit successful controls by name. A visitor can type into an email input or message box that looks correct, but a missing name means that value is normally omitted from a standard form submission.
<input type="email" name="email" required>
<textarea name="message" required></textarea>
Remove placeholders without exposing secrets
Copied examples often retain values such as YOUR_ACCESS_KEY, example@example.com, or an endpoint ending in /example. Those values may allow the interface to render while preventing real routing.
Do not fix this by committing an inbox password or private API secret to frontend code. Use the form provider’s documented public form identifier, an owner-controlled backend route, or deployment-time server configuration as appropriate.
Separate endpoint acceptance from inbox receipt
An HTTP success response means the endpoint accepted or processed a request according to its own contract. It does not, by itself, prove that an email reached the owner’s inbox. Delivery can still depend on account activation, recipient confirmation, provider rules, spam filtering, or downstream mail handling.
Use synthetic data such as “Website delivery test — 2026-08-15” and ask the endpoint owner to confirm the exact message arrived. Do not use a real customer’s details for testing.
Test failure as carefully as success
A reliable form disables duplicate submits while sending, announces its status, and shows an honest retry path when the network or endpoint fails. It must not display success unconditionally after a timer or local state change.
Test required-field validation, an endpoint rejection in a non-production environment, keyboard submission, and a common phone width. Keep visible phone or email details as a fallback when the business supports them.
Contact-form delivery FAQ
Can a source-code check prove that email arrives?
No. It can find suspicious or missing configuration. Only a synthetic end-to-end test plus owner-confirmed receipt proves the full path.
Does a mailto form count as a working form?
It can be a visible fallback, but it depends on the visitor having a configured email application and is not an in-browser submission flow.
Should I share an endpoint key or inbox password?
No. Keep production secrets, inbox access, private messages, and customer data private. A diagnosis should begin with public source and synthetic test data.
Want the source checked first?
Static Form Inspector can identify inert actions, placeholder endpoint tokens, contact-like GET forms, unnamed controls, and unclosed forms without submitting data. If implementation is needed, the fixed £35 repair covers one public form with written acceptance checks and payment after review.
Inspect HTML in the browser See the £35 repair scope