HTML Contact Form Without a Backend (Copy & Paste)
A copy-paste HTML contact form that emails you every submission — without writing any backend code.
A contact form is just an HTML <form>. The hard part has always been the backend — the bit that receives the submission and emails it to you. This guide skips the server entirely: you’ll get a working, spam-protected contact form you can paste into any page and have running in a couple of minutes.
The minimal contact form
Every contact form needs three things: fields for the visitor to fill in, a method="POST", and an action that points at something which can process the data. Here’s the smallest version that actually works:
<form action="https://saveform.io/api/submit/YOUR_FORM_ID" method="POST">
<label>
Name
<input type="text" name="name" required />
</label>
<label>
Email
<input type="email" name="email" required />
</label>
<label>
Message
<textarea name="message" rows="5" required></textarea>
</label>
<button type="submit">Send message</button>
</form>Replace YOUR_FORM_ID with the ID of a form you create in the dashboard. That’s the whole integration — no JavaScript required. When the visitor hits Send, the browser POSTs the fields to the endpoint, which stores and forwards them.
Getting submissions to your inbox
HTML can’t send email by itself. The form endpoint does it for you: every submission triggers an email notification with the field values, and you can turn on an auto-reply so the visitor gets an instant confirmation back.
Blocking spam without a CAPTCHA
A public contact form will attract bots. The simplest defence is a honeypot: a field hidden from humans that bots fill in anyway. Add one input and most automated spam disappears — with no CAPTCHA to annoy real visitors.
<!-- Hidden from people, irresistible to bots --> <input type="text" name="_honey" style="display:none" tabindex="-1" autocomplete="off" />
Submissions with the _honey field filled are flagged as spam and never reach your inbox. For a deeper look at honeypots, rate limiting, and reCAPTCHA trade-offs, read how to stop form spam without CAPTCHA.
Controlling what happens after submit
By default the visitor sees a hosted thank-you page. To keep them on your site, add a hidden _redirect field pointing at your own success URL:
<input type="hidden" name="_redirect" value="https://yoursite.com/thanks" />
Prefer to stay on the page without a reload? Submit with JavaScript / fetch instead and show your own inline confirmation.
Quick checklist
- Give every input a
name— that’s the key you’ll see in submissions. - Use the right
type(email,tel,url) so browsers validate for free. - Mark required fields with
required. - Add the
_honeyhoneypot to catch bots. - Pair every input with a proper label for accessibility.
Frequently asked questions
Can an HTML form send an email without a backend?
Not on its own — plain HTML cannot send email. The browser can only POST the form data somewhere. You point the form’s action at a form endpoint (like SaveForm) that receives the submission and emails it to you, so you never have to run a server or write PHP.
Do I need PHP for a contact form?
No. PHP’s mail() function was the classic way to handle <form> submissions, but it requires a PHP host and is easy to misconfigure. A hosted form endpoint works with any static HTML — GitHub Pages, S3, Netlify, a plain index.html — with no server-side language at all.
How do I stop spam on a no-backend contact form?
Add a hidden honeypot field that real users never see but bots fill in. Submissions with the honeypot filled are dropped automatically. For higher-traffic forms, combine that with rate limiting. See the stop-form-spam guide for the full approach.
Where do the submissions go?
With SaveForm, each submission is stored in a dashboard, emailed to you, and optionally forwarded to any webhook (Slack, Discord, Zapier, your own API). You can also export everything as CSV or JSON.
Related resources
Wire up your contact form in two minutes
Create a form, drop the endpoint into your HTML, and every message lands in your inbox and dashboard. No backend, free to start.