Skip to main content

Technical Fixes & QA

Website Contact Form Not Sending Emails? What to Check

A missing enquiry email can start at the browser, storage, notification job, mail provider or recipient inbox. Trace one request through these boundaries before changing the form or replacing your website.

All insights4 min readBy APPNEURAL Editorial

Illustrative advisory conversation reviewing a business and technology roadmap
Illustrative context image

Who this guide is for

Website owners, operations teams and agencies investigating lost or delayed enquiries.

01

Start with one traceable test, not a redesign

Record the page, time, browser and expected destination for a controlled test. Use an approved test inbox and a clearly marked message; do not send repeated tests to real customers. Open the browser network panel and locate the form request. Note its status and public reference without copying the message body into shared logs. A button changing to “Thank you” is not evidence that a request reached your server. If you cannot find a request, investigate browser validation, JavaScript errors, a disabled control or the form handler before touching email settings.

02

Separate saving an enquiry from sending its notification

Ask where the enquiry is stored and whether the server waits for that write before returning a saved receipt. If the database or storage write failed, the interface must explain that saving was not confirmed and retain entered information. If a durable record exists but no email arrived, investigate notification processing rather than asking the visitor to submit again. A useful record has an opaque reference, timestamp, routing owner and separate delivery state. Email should notify the team about that record; it should not be the only copy of the enquiry.

03

Use the response as a clue, not proof of inbox delivery

A rejected request may point to missing fields, an expired session, blocked origin or a rate limit. A server error needs investigation of the failing dependency. A successful HTTP response only establishes what that endpoint promises: inspect its response contract and stored record. Do not equate a 2xx response from a mail service with a message appearing in an inbox. Track queued, provider-accepted, delivered, bounced and failed separately where the provider supplies those signals. Without delivery events or an inbox check, label the final delivery status unknown.

04

Check approved sender and recipient configuration

Confirm the deployed environment is using the intended recipient, sender and provider configuration. Test and production can differ even when the local form works. Check domain-verification status in the actual mail provider account, credential validity and provider errors without printing secrets. Keep the recipient server-controlled: a visitor must not choose arbitrary internal recipients or email headers. An acknowledgement to the visitor is a different message from the internal team notification and needs its own result. If only one fails, preserve that distinction.

05

Make retry safe and give failed messages an owner

A retry should reuse the same enquiry reference rather than create another sales task. Store pending notification intent durably and use bounded retries for temporary failures. Permanent address or configuration problems need operator attention, not an endless loop. Review provider-specific idempotency rules before resending; retention and payload requirements vary. For example, Resend documents a 24-hour idempotency-key window. Replaying an old request after the provider forgets its key can send a second email even if your application still recognizes the original enquiry.

06

APPNEURAL internal implementation: what was actually checked

In the APPNEURAL website repository, a prior events form displayed success even when its API call failed. It was changed to a durable enquiry flow. Local tests exercised storage failure, save-before-receipt, stable retry references and mail-provider failure isolation. The deployed website uses Cloudflare KV and separate notification records; KV consistency limits mean this is not a global exactly-once guarantee. The prior release did not verify real mailbox delivery because provider credentials were absent. This is an internal engineering example, not a claim of additional enquiries or customer results.

07

Agree a bounded diagnosis and acceptance test

An initial investigation can cover one form, one deployed environment, the storage path and two notification destinations. Include access requirements, evidence to collect, what configuration changes are allowed and whether a provider change is excluded. A sensible acceptance test records one enquiry, retries without creating another record, simulates provider failure, confirms recoverable input and checks the approved inbox when configured. Domain ownership, provider account access and recipient approval are prerequisites. Diagnosis does not promise unlimited fixes, an immediate response or a complete website rebuild.

Scope checklist

  • Which exact form and environment fails?
  • Does one durable enquiry record exist?
  • Which notification channel failed?
  • Who can inspect the provider and approved test inbox?
  • What counts as a successful repair?
Open the printable preparation checklist or template (new tab) →

Sources and implementation references

Prepared with AI assistance as an engineering decision guide. Examples are illustrative unless explicitly labelled as an internal implementation. No independent expert review or customer outcome is claimed.

Need help investigating this issue?

Describe what is failing and which platform you use. Do not submit passwords, API keys, or confidential customer data. Scope, access, dependencies and commercial terms are agreed before delivery. Do not submit passwords, API keys or confidential records.