Replay the request outside the page
Open the Network tab, submit the form once and note the URL, method and status of the request. Then repeat the request from a terminal to see what the endpoint returns without the page's success message in the way.
curl -i -X POST https://example.com/api/contact -d "[email protected]&message=test"
Docs: developer.mozilla.org →
Confirm the form posts to a real handler
Check the action attribute and the fetch URL. If action is missing, the data goes to the current page. The target should be server code that parses the fields and sends or stores the message.
Docs: developer.mozilla.org →
Look for the recipient in the provider's suppression list
In Resend, open Suppressions in the dashboard and search for the address that should receive the notification. In Amazon SES, list the account-level suppression list and search for the address or domain.
aws sesv2 list-suppressed-destinations | grep -A2 'example.com'
Docs: docs.aws.amazon.com →
Show success after a 2xx response
Check response.ok after the fetch and throw if it is false. The catch branch can then show an error and log the status, so a silent drop becomes a visible failure.
const res = await fetch("/api/contact", { method: "POST", body });
if (!res.ok) throw new Error(`Response status: ${res.status}`);
Docs: developer.mozilla.org →
Remove the address once the cause is fixed
If the recipient is on the list by mistake, remove it in the provider's dashboard or API. Fix the reason it was added first, because Resend suppresses an address again if that reason remains.
Docs: resend.com →