# How to Send an HTML Form to Your Inbox Without a Backend (2026) HTML can't send email on its own. Here's how to get an HTML form to your inbox without a backend in 2026: the mailto trap, Apps Script, and the endpoint fix. **HTML can't send an email.** The `
``` That's the entire integration. No JavaScript, no server, no SMTP. The browser POSTs the fields, [Form Plume](/docs/quickstart) stores the submission in a dashboard, runs it through spam filtering, and sends the notification email from a warmed sender so it actually arrives. Every field needs a `name` attribute, since the browser only submits [named fields](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/input#name); an input with just an `id` sends nothing. This is the category the SERP is full of: Formspree, Web3Forms, and the rest all do a version of it, and I'll be straight that Form Plume is one of them. Where it pulls ahead: the free tier stores **500 submissions a month in a real dashboard** instead of only relaying them to your inbox, and spam filtering, file uploads, and a signed webhook are on by default rather than bolted on later. If you want the honest free-tier comparison across all of them, [I keep a roundup](/blog/best-free-form-backends-2026) that names where each one still wins. Otherwise the pattern is the same everywhere: swap one URL and you're receiving mail. ## Which route should you actually pick Read it by what you're building, not by what's newest: | Route | Actually sends? | Server to run? | Spam handling | Stored copy | Best for | | --- | --- | --- | --- | --- | --- | | `mailto:` | No | None | None | None | Nothing. Don't. | | PHP `mail()` | Barely | Yes | You build it | You build it | Legacy hosts you're stuck with | | Serverless function | Yes | None, you write code | You build it | You build it | Devs who want full control | | Google Apps Script | Yes | None | You bolt it on | Google Sheet | Free personal projects | | Hosted endpoint | Yes | None | Built in | Dashboard | Anything with a form you care about | The split that matters most is the last two columns. **A `mailto:` or bare email relay gives you no stored copy, so a lost email is a lost lead.** For a static hobby site that's fine. For anything with revenue attached, I want the submission saved the second it arrives, whether or not the email ever shows up. Only the bottom row does that with nothing to build, which is why a hosted endpoint is what I reach for on any form I actually care about. ## Before you rely on it Whichever route you pick, three things save you a silent failure: - **Send one real submission from the deployed site** and confirm it lands in your inbox. A form that "works" locally and a green 200 in the Network tab are not proof the email arrived. If it doesn't, my [contact form debugging checklist](/blog/why-is-my-contact-form-not-working) walks the usual causes. - **Add a honeypot field** before you publish, or the spam bots will find the form within days. Form Plume includes one, and [the docs cover the pattern](/docs/spam-protection) if you're rolling your own. - **Keep the styling and markup yours.** The whole point of a form endpoint over a form builder is that you own the HTML; the [HTML contact form guide](/html-contact-form) has the full field setup, and there are matching guides for [React](/react-contact-form) and plain [JavaScript](/javascript-contact-form) if you submit with `fetch`.