guide

How to send form submissions to email without losing track of them

September 17, 2026 ・ Halict Editorial

Form to email is the default architecture of the internet. A visitor fills in fields, a message appears in a mailbox, somebody answers it. It has worked for thirty years, it needs no database, and it is still the right answer for a great many sites.

It also has three failure modes that are invisible during setup and obvious six months later: the mail does not arrive, the reply does not reach the right person, and nobody can say what happened to a given submission. Each has a specific cause, and the causes are worth knowing before choosing a route rather than after.

What the phrase actually covers

Four different things get called form to email, and they behave differently.

A mailto link opens the visitor's own mail client with the fields prefilled. This is the one to rule out first. It depends on the visitor having a configured desktop mail client, which on a phone means the message arrives from whatever personal account is signed in, and on a work machine often means nothing happens at all. It also means the submission never exists unless the visitor presses send in a second application. Treat it as a link, not as a form.

Server side sending means your own code composes the message and hands it to an SMTP server or a transactional mail API. Maximum control, and you own the deliverability problem described below.

A form backend is a hosted endpoint that receives the POST and sends the mail for you. Formspree, Web3Forms and FormSubmit all work this way. FormSubmit requires no account: set the form action to their endpoint with an address in it, submit once, and confirm the verification mail that arrives.

A form builder's own notifications are the settings inside a hosted form tool that send mail when a response arrives. Google Forms has a toggle for this under the Responses tab; most other builders let you list recipients and edit the subject line.

The routes side by side

Route Account needed Who sends the mail Custom From domain Copy to the submitter
Mailto link No The visitor's own client Not applicable Not applicable
Server side SMTP Your own infrastructure You Yes, you configure it You build it
Form backend Usually, FormSubmit excepted The vendor Paid tiers Paid tiers on most
Form builder notification Yes The vendor Varies by tier Usually available

The pattern in the last two columns is consistent across the market. Sending from your own domain and sending a confirmation to the person who submitted are both treated as upgrades. Formspree lists autoresponses from its Professional tier at 20 dollars a month and custom email domains from its Business tier at 60 dollars a month. Web3Forms puts autoresponders and multiple recipients on its paid tier, with the free tier allowing 250 submissions a month to a single recipient address.

The From address decides whether the mail arrives

This is where most form to email setups are quietly broken, and the symptom is not an error. It is that some recipients never see the message and nobody ever finds out.

Putting the submitter in the From field is the classic mistake

The instinct is to set the From address to whatever the visitor typed, so that the message looks like it came from them and replying just works. This was normal practice for years and is now the fastest way to get form mail filed as spam or rejected outright.

The reason is authentication. A receiving mail server checks whether the server that sent the message is authorised to send for the domain in the From address, using SPF, and whether the message carries a valid signature for that domain, using DKIM. A form on your site sending mail that claims to be from a visitor's company domain passes neither check. If that domain publishes a strict DMARC policy, and a growing share of them do, the receiving server is being told explicitly to reject or quarantine the message.

The failure is silent by design. The sender sees a successful send. The recipient sees nothing.

Reply-To is the field that was wanted all along

The correct shape is to send from an address you control and put the visitor's address in the Reply-To header. The message authenticates cleanly because it comes from your domain, and pressing reply still reaches the person who filled in the form.

Netlify documents this pattern plainly for its built in forms: notification mails are sent from a service address, replies to a notification go back to that service address, and the fix is to include an input named email in the form so that the notification carries a Reply-To that reaches the submitter. Most form backends follow the same convention, which is why renaming that field to something else quietly breaks the reply path.

Sending from your own domain

Once mail is being sent by a vendor on your behalf, the From address is theirs by default. Notifications arrive from a vendor address, and any confirmation the visitor receives does too.

For internal notifications this barely matters. For a confirmation sent to a candidate or a customer it matters a lot, because a message about your company arriving from an unfamiliar sender is both less trusted and more likely to be filtered. This is exactly why custom sending domains sit on paid tiers. If confirmations go to people outside the organisation, budget for the tier that includes it, and set up the DNS records the vendor asks for rather than skipping that step.

Telling the submitter that it arrived

An auto reply is the cheapest reduction in email volume available. It removes the duplicate submissions that come from uncertainty, and it removes the messages asking whether the form worked.

Google Forms supports this as response receipts: collect respondent email addresses in the settings and choose to send a copy of the submission, either always or on request. Most builders have an equivalent. On form backends it is generally a paid feature under the name autoresponse or autoresponder.

Two things separate a useful auto reply from a useless one. The first is that it says what happens next and roughly when, rather than only confirming receipt. The second is that it comes from an address that accepts replies. A confirmation sent from a no reply address tells the recipient that the conversation is one directional before it has started, and any question they have then arrives through some other channel, which is the opposite of the goal.

The limits that appear at volume

Every route meters something, and the meter is usually invisible until it trips.

Google Apps Script, which is the route behind most custom Google Forms notifications, publishes its quotas. Email recipients per day is 100 for consumer accounts such as gmail.com and 1,500 for Google Workspace accounts. Recipients per message is capped at 50, a single execution at 6 minutes, and total trigger runtime at 90 minutes a day on consumer accounts against 6 hours on Workspace. A script that sends one notification and one confirmation per submission consumes two recipients each time, which means a personal Google account stops at fifty submissions in a day. When a script exceeds a quota it throws an exception and execution stops; it does not queue and it does not warn.

Form backends meter submissions rather than recipients. Formspree's free tier is 50 submissions a month with a 30 day archive, described on their own plans page as suited to testing and development. Web3Forms allows 250 a month free with 30 days of submission history. Those are honest numbers for a contact form on a small site and the wrong order of magnitude for a hiring round.

The general rule is that the meter and the spike are unrelated. Volume from forms arrives in bursts tied to a campaign, a posting or an event, and the burst is the reason the form exists. A cap that is comfortable across an average month is measuring the wrong month.

There is a third meter that nobody configures and everybody eventually meets: the recipient's own filtering. Mail sent one message at a time from a shared address to the same internal group, with near identical subject lines, looks to a filter a great deal like a mailing list. Varying the subject line with something from the submission, such as the form name and the sender, helps more than it sounds, and it also makes the inbox searchable later, which is the one thing that still works when the record lives only in mail.

What email cannot do, at any price

Assume the mail now arrives reliably, from the right domain, with a working reply path, and a confirmation goes out automatically. There is still a class of question that no configuration answers.

Who is handling this one. Whether it has been answered. What was said, and by whom. Whether this person has submitted before. What state the enquiry from March ended in.

An inbox cannot answer these because a message is an event, not a record. Every recipient gets a private copy, and coordination happens through forwarding and conversation. With one person answering the form this is invisible. With two it produces the familiar pair of failures: the same enquirer receiving two different answers, and a submission that nobody replies to because each person assumed the other had it.

The structural fix is to move the unit of work from the message to the response. Each submission carries an owner, so responsibility is explicit; a stage, so its state is visible without asking; and a history of what was sent, attached to the response rather than living in one person's sent items. Notifications still go out, and they can go to Slack, Teams, Chatwork or Discord as well as email, but they become pointers into a shared record rather than the record itself. The features page shows what that looks like in practice, and the use cases cover where the difference shows up first: applications, enquiries, event sign ups and grant programmes.

What to change first

Check the From address on the mail your form is sending right now. If it carries the visitor's domain, change it to an address you control and move the visitor into Reply-To today, because that one change fixes deliveries that are currently failing without telling anyone. Next, turn on a confirmation to the submitter and make sure it comes from an address that accepts replies. If more than one person answers what comes in, the remaining problem is not the mail at all, and it is worth seeing what a response with an owner and a status looks like; the demo runs without an account, and Halict leaves forms and responses unlimited on every tier, including the free one.

Q1. Why do my form emails go to spam?

The most common cause is the From address. If the form sends mail claiming to come from the visitor's own domain, the message fails SPF and DKIM checks for that domain, and a strict DMARC policy instructs the receiving server to reject or quarantine it. Send from an address you control and put the visitor in the Reply-To header instead.

Q2. How do I reply directly to the person who filled in the form?

Put their address in the Reply-To header of the notification rather than the From header. Many form services do this automatically if a field named email exists in the form, which Netlify documents explicitly for its built in forms. Renaming that field to something else usually turns the behaviour off.

Q3. Can I send form submissions to email without any account or backend?

Yes. FormSubmit requires no registration: set the form action to their endpoint with your address in it, submit once, and confirm the verification email that arrives. Web3Forms works similarly with an access key and allows 250 submissions a month on its free tier to a single recipient.

Q4. How many emails can a Google Forms script send in a day?

Apps Script caps email recipients per day at 100 for consumer accounts such as gmail.com and 1,500 for Google Workspace accounts, with a maximum of 50 recipients in a single message. Exceeding the quota throws an exception and stops execution rather than queueing, so the last submissions of the day generate no mail at all.

Q5. Should a form confirmation come from a no reply address?

Generally not, if it goes to someone outside the organisation. A confirmation is often the first message a candidate or customer receives, and sending it from an address that cannot accept replies pushes their next question into some other channel. Use a monitored address and say in the message what happens next.

All guides

How to send form submissions to email without losing track of them | Halict