Contact form submits but no email arrives
A form can display “Sent” without sending anything. HTML collects the fields. A server or form service must receive them and send the email.
Check whether a request leaves the page
Open your browser’s Network panel, submit a harmless test message, and inspect the request. Do not share a screenshot containing private messages or account details. If no request appears, inspect the submit handler. Calling preventDefault() stops the browser’s normal submission. Your script must then send the data itself. Changing the button text is not a delivery step.
Check the destination and fields
A plain HTML form needs a working action URL. Without one it submits to the current page, which may only be a static file. Each submitted field needs a name attribute. An id connects a label to a field, but does not name the submitted value. Disabled fields are not submitted.
If you use fetch(), check response.ok before showing success. A resolved promise can still carry an HTTP error. Also check the endpoint’s documented response body: a 200 response or redirected login page is not proof that mail was accepted.
Separate acceptance from delivery
If the endpoint received the message, check its mail logs or your form service’s delivery history. Look for rejected recipients, unverified sending domains, account limits and spam placement. Server-side mail credentials must stay on the server, never in the page’s JavaScript.
Use a sender address your mail provider permits. Put the visitor’s address in Reply-To, not in From as though you own their domain. A mailto: action depends on the visitor’s mail app and is not a server-side delivery system.
Only show a success state after the endpoint confirms acceptance. Say “Message accepted” if that is all you can verify. Test with an inbox you control before inviting customer messages.
The free HTML checklist can flag some static markup problems. It cannot test your endpoint or prove email delivery.
Need help with the page itself? Ask about one HTML or CSS fix for $29. Mail-server setup is outside that fixed scope.