What breaks
Contact form not sending email: find the cause
The visitor sends the form and sees a thank you, but no email comes in. This page shows how to tell a lost message from a mail that never left, and what a simulated visitor adds.
Why is my contact form not sending email?
A contact form fails in one of two places: it never stores the message, or it stores the message and the mail step never delivers it. The submissions list in your form tool or site database tells you which, so check it before you change any mail settings. Autofill, a hidden spam-trap field or a sender domain that was never verified can each cause a silent failure. A simulated visitor sends a message through the form from a fresh browser, and the run shows the success line, any error and a screenshot.
What this looks like in a report
“I wrote the date, the budget and my email, then pressed Send. The page said thanks and we will reply soon. Three days went by with nothing, so I called a different bakery.”
The fix. Show the success line only after the mail service accepts the message, and show 'We could not send your message, so email us at the address below' when it does not. Then send one test message from the form to a personal mailbox and one to a second mailbox at a different provider.
An illustration. Run a test to see your own.See a real sample report
The form says thanks, and the inbox stays empty
The visitor fills in a name, a question and an email address, then presses Send. The page changes to a thank you line, which tells the visitor nothing about the mail step. The owner sees no message, and the visitor waits, then calls someone else or leaves. Three different faults produce this exact picture: the form never submitted, the form submitted but the mail step failed, or the mail went out and was filtered before it reached the inbox. Each fault needs a different fix, and the inbox alone cannot separate them.
- After Send, does the message appear in your form tool's submissions list or in the site's database?
- Does the browser's Network tab show a request to the form address that returns a success code?
- Does the form have a hidden field that autofill could fill, and does the server drop any message where it has text?
- Does the mail service's send log show the message as accepted, bounced, rejected or held?
- Does the sender address belong to a domain the mail service has marked as verified?
The submissions list separates a lost message from a mail that never left
Start at the form tool or the site's own database, not at your inbox. Many form tools keep a list of submissions, and a custom form often writes to a table. Send one test message with a name you will recognize, then look for it there. If it is stored, the form worked, and the fault sits in the step that sends mail. If it is not stored, the message never got past the form, and the mail settings are not the place to look yet.
The mail service keeps its own log. Find the send record for the test message and read its status. Accepted means the service took the message and passed it on. Bounced or rejected means the receiving server refused it, often because of the sender domain. Held or suppressed means the service stopped sending to that address on purpose, for example after an earlier bounce. Each status points to a different fix, so write it down before you change anything.
A hidden spam-trap field can drop the message without a trace
Many forms add a field the visitor never sees, sometimes called a honeypot, to catch bots. The form expects that field to stay empty, and it throws away any submission where it has text. Browser autofill can write into fields whose names look like contact details, even when the form hides them. The visitor sees a thank you, the server sees a filled trap, and the message is dropped on purpose.
To check this, open the form in a fresh browser profile that has saved contact details, fill the visible fields by hand, and send. If the message shows up when you type every field yourself, and not when autofill fills the form, the trap is the cause. Fix it by giving the field a name a browser will not guess, and by logging dropped messages so they leave a trace.
Sender domain records decide whether a sent message reaches the inbox
A message can leave the mail service and still land in spam, or be rejected at the receiving end. Receiving servers check that the sending domain has authorized the service to send for it, usually through records in the domain's DNS settings. If you moved the domain, changed hosts or added a second mail service, one of those records can be missing. A message that reaches one mailbox and not another points at the receiving side, so write down which provider each mailbox uses.
Check the sending domain in the mail service's settings. Look for a verified status on the sending address and read any warning beside it. The form tool cannot make that check for you, because the record lives with whoever manages your domain. A form that sends from an address at your domain can stop after a DNS change, and the form itself shows no error when it does.
What you get with Mimiq
- 01
Run it by hand, or on every pull request
Paste a link and a task in the app and watch the visitors work. Or run them on every preview deploy: the GitHub Action comments on the pull request, any other CI can call the MCP endpoint, and your coding agent can run it too.
- 02
Bugs and usability problems in one report
The browser records errors and failed or slow requests on the step they happened. The visitors say where the wording or the steps confused them, and where they left.
- 03
Visitors that behave like your audience
Each visitor is a different profile with a reason to be there, matched to who the page is for, described by you, or built from your own customers.
- 04
A prompt to fix each problem
Every problem comes with a fix to paste into Cursor, Claude Code, Lovable or any coding agent, and one prompt hands over the top problems at once. Then send the same visitors through again.
- 05
Follow every visitor
See each visitor's whole path, step by step with screenshots, and what it was thinking at every step. Ask any visitor a question.
The browser records relevant JavaScript errors and failed or slow app requests encountered during the run, attached to the step where they occurred. The visitors are simulated: they find problems, they do not predict how many real people will convert.
A password change on the mail account can stop the form again
A rotated mail password, a changed DNS record or a plugin update can stop the form again without touching the form page. Send a fresh test message after each change to the mail account, the domain or the form tool. With paid credits, visitors can also open a protected preview, so a form change on a staging site gets the same run before it goes live.
Starter
Try it on one launch
About 4 tests of 5 visitors
- Visitors on your landing page, signup and checkout
- Where they left and why, with a fix to copy for each problem
- Run it in the app or on every pull request
- Ask any visitor a question, included
- Test accounts and protected previews
Builder
Test every build
About 20 tests of 5 visitors
- Everything in Starter
- Credits refill each month, and what is left rolls over once
- Cancel anytime
Pro
Test every release, as a team
About 60 tests of 5 visitors
- Everything in Starter
- Credits refill each month, and what is left rolls over once
- Cancel anytime
Scale
Test at scale, every day
About 240 tests of 5 visitors
- Everything in Starter
- Credits refill each month, and what is left rolls over once
- Priority support
- Cancel anytime
Questions
Can the test check that my email arrives?
Only in one direction. If the form sends an automatic reply to the sender, the visitor has a working inbox, so the run can show whether that reply arrived. It cannot open your mailbox, so it cannot tell you whether your notification arrived. Send one message from your own address after each change to check that step.
Why does the form say thanks when nothing arrives?
The thank you line can appear as soon as the form submits, before the mail step runs. A success message at that point says nothing about delivery. Show success only after the mail service accepts the message, and show a fallback line with your address when it does not.
Does a simulated test show whether my messages land in spam?
No. It shows whether the form took the submission and whether an automatic reply reached the visitor's inbox. It cannot tell you how other mail providers filter your domain, and it does not predict how many leads you will lose. Check spam placement with a few real mailboxes at different providers.
What if submissions are stored but the mail service shows no send at all?
Then the form tool never handed the message to the mail service. Check the mail step's credentials, the sender address and any sending limit or test mode on the mail account. Change one setting at a time and send one test message after each change, so you know which setting mattered.
Keep reading
Send visitors and see what breaks first.
Your first test is free: sign in with Google and it starts right away. Last checked 2026-11-02.