Form to email, without a mail server on your site
A form to email is a form whose only job is to land in a mailbox. You do not need a daemon on the same host as the HTML. You need a URL that accepts the POST, a key that identifies the inbox, and an email provider behind that URL. This page is the working version of that URL.
Point the action at the endpoint
Set the form action to https://getformpost.com/api/submit and method to POST. Include the access key from your dashboard as a hidden input. The rest of the fields are yours.
Hide a honeypot
Add an input named botcheck and hide it with CSS. People skip it. Scripts fill it. A filled honeypot is dropped before any email is sent.
Choose redirect or JSON
Save a thank-you URL if the browser should navigate after a normal submit. Send Accept: application/json, or a _reply field set to json, if your script wants a status object instead of a new page.
The HTML below updates as you type. You do not edit the code.
HTML
<form action="https://getformpost.com/api/submit" method="POST">
<input type="hidden" name="access_key" value="YOUR_ACCESS_KEY">
<label>
Name
<input type="text" name="name" required>
</label>
<label>
Email
<input type="email" name="email" required>
</label>
<label>
Message
<textarea name="message" required></textarea>
</label>
<input type="text" name="botcheck" tabindex="-1" autocomplete="off" style="display:none" aria-hidden="true">
<button type="submit">Send</button>
</form>What the request contains
The endpoint accepts application/x-www-form-urlencoded, multipart form data, and a JSON object. Each named text field becomes a line in the email. The access key, the honeypot, the redirect, and the _reply flag are consumed and not copied into the message. Field names must start with a letter and stay short. Values are trimmed and capped so a single post cannot dump a megabyte into your mailbox. File parts are skipped. A form to email that needs attachments belongs on a product with a file store and a virus scan, not on a free mail forwarder.

How delivery is decided
After the key matches an inbox, the server reserves one slot in this month's counter. The reserve is a single update, so two posts at the same moment cannot both sneak past a stale read. On the free plan a post past the included cap is still stored and marked locked, and the field email is skipped. On Pro a post past 5,000 is refused. Inside the cap, the row is written and the email is sent. If mail delivery is not connected yet, the message stays in your submission list and the dashboard shows the status as logged. That is how you can prove a form to email works before messages start leaving for your mailbox. If delivery returns an error, the row stays with status failed and the JSON body says the save worked but the email did not.

Reply-To and the subject line
If the post includes an email or from field that is one plain address, that address becomes Reply-To. Newlines are rejected so the value cannot add extra headers. The subject is the _subject field, or the subject field, or a default that includes the inbox name. Keep the subject short. The body lists every remaining field in the order it arrived. A form to email is easier to answer when the labels match the words you expect to see in the mail client: name, email, message.

Why the redirect is locked to the dashboard
A public key means a stranger can POST. If that POST could set the Location header to any URL, this host would be an open redirect. The thank-you address is saved on the inbox by a signed-in owner, and a redirect field in the body is ignored unless you are simply using the saved URL. Browser navigations go there with status 303. JSON clients never get a redirect, so a fetch call can show its own confirmation. Test the form to email with curl using an Accept header of text/html if you want to see the 303, and with application/json if you want the object.

Limits that keep the mailbox usable
Each IP and each access key can submit only once every few seconds. The free account can store 100 posts per UTC month and email each one inside that cap. Pro raises that to 5,000. The cap is there so a leaked key cannot turn your address into a firehose. On the free plan, posts past the cap are stored and locked, and no field email goes out. Pro past 5,000 still answers 429 and stores nothing. Upgrade on the free contact form page, or wait for the next month. The homepage describes the same endpoint as a website contact form.

A form to email is not a list
Do not use this to collect newsletter opt-ins unless you also store consent yourself and you actually send that mail from a proper list tool. We do not add people to an audience. We do not track opens. The dashboard is a log of form posts for the account owner. If a visitor asks you to delete a message, delete it from your mailbox and, if you need the row gone, remove the inbox data from the database you operate. The privacy page states what the account stores. A form to email should stay a message, not a signup you did not describe.
Where to go next
If the page is a contact box, start from the website contact form article and its snippet. If you are replacing a PHP mail script, read html form to email php. If you want the markup for a static host with no framework, read html contact form send to email and submit form to email. Each of those pages links back here because it describes the same form to email path.
Frequently asked questions
Older tutorials often show a PHP mail() call, a WordPress plugin, or a marketing form that also subscribes the person to a list. Those are different jobs. A form to email on a static file should not import a CMS and should not require the visitor to become a contact record.