Jak přidat kontaktní formulář na web bez backendu
Obyčejný HTML kontaktní formulář, který vám každou zprávu pošle e-mailem – bez serveru, bez PHP a bez pluginu. Funguje na každém statickém webu, od ručně psaného HTML po Astro, Hugo nebo WordPress.
Aktualizováno:
Postavíte běžný HTML formulář, který každé odeslání doručí do vaší schránky. E-mail odešle Frontmail přes schránku, kterou už používáte (Gmail, Outlook, libovolný SMTP server nebo transakční služba), takže nemusíte provozovat žádný vlastní server.
Budete potřebovat: bezplatný účet Frontmail a zhruba deset minut.
1. Připojte svou schránku
- V dashboardu otevřete E-mailové služby a klikněte na Přidat službu.
- Vyberte poskytovatele. Gmail a Outlook připojíte přes svůj účet (žádné heslo se neukládá); SMTP, Resend, Postmark, Mailgun a další potřebují API klíč nebo přihlašovací údaje.
- Zaškrtněte Nastavit jako výchozí a klikněte na Ověřit a uložit. Frontmail údaje zkontroluje, aniž by cokoli odeslal.
2. Vytvořte šablonu z galerie
- Otevřete Šablony → Z galerie a vyberte Kontaktní formulář (kategorie Formuláře).
- Klikněte na Použít šablonu. V poli Komu je vaše adresa a v Odpovědět na adresa návštěvníka, takže když kliknete na Odpovědět, odpovídáte rovnou jemu.
Šablona očekává tyto parametry – z nich se stanou atributy name polí formuláře:
| Parametr | Povinný | Co obsahuje |
|---|---|---|
name |
ano | Jméno návštěvníka |
email |
ano | E-mail návštěvníka (ověřuje se formát) |
phone |
ne | Telefon |
topic |
ne | Téma, zobrazí se v předmětu |
message |
ano | Zpráva |
3. Povolte svůj web
Veřejný klíč je vidět ve zdrojovém kódu stránky, a to je v pořádku – používat ho ale smí jen váš web.
- Otevřete Zabezpečení a do seznamu Povolené weby přidejte svou doménu (například
example.comawww.example.com; během vývoje ilocalhost). Klikněte na Uložit. - Doporučujeme: vytvořte si bezplatný widget Cloudflare Turnstile pro své hostnames, vložte jeho site key a secret key do Zabezpečení → Ochrana proti botům a klikněte na Zapnout CAPTCHA u všech šablon. Boti pak formulář nezneužijí a lidé si kontroly většinou ani nevšimnou.
4. Vložte formulář do stránky
Zkopírujte veřejný klíč (Zabezpečení) a ID šablony (záložka Kód pro web u šablony) a na místo, kde má formulář být, vložte:
<form id="contact">
<label>Name <input name="name" required maxlength="200" /></label>
<label>Email <input name="email" type="email" required /></label>
<label>Message <textarea name="message" required></textarea></label>
<!-- Turnstile adds a hidden cf-turnstile-response field; leave it out if you skipped the CAPTCHA -->
<div class="cf-turnstile" data-sitekey="YOUR_TURNSTILE_SITE_KEY"></div>
<button type="submit">Send</button>
<p id="form-status" role="status"></p>
</form>
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
<script
src="https://cdn.jsdelivr.net/npm/@frontmail/browser@0.1.0/dist/frontmail.umd.js"
integrity="sha384-g2Rxznkz2yb/YYSdVTkXLxZFZ2Nh2+XdhPStxh0stydXFF3gYjDuyHimWIZLJDCc"
crossorigin="anonymous"></script>
<script>
frontmail.init({ publicKey: 'pk_…' });
const form = document.getElementById('contact');
const status = document.getElementById('form-status');
form.addEventListener('submit', async (event) => {
event.preventDefault();
status.textContent = 'Sending…';
try {
// null = your default service
await frontmail.sendForm(null, 'tpl_…', form);
status.textContent = 'Thank you! We’ll get back to you soon.';
form.reset();
} catch (err) {
status.textContent = 'Sorry, that didn’t work: ' + err.message;
} finally {
window.turnstile?.reset(); // a Turnstile token works only once
}
});
</script>
sendForm() čte pole podle jejich name, takže formulář a šablona zůstávají v souladu bez
jakéhokoli mapovacího kódu. Chyby sítě a výpadky serveru se automaticky zopakují se stejným
idempotency key – návštěvník vám tutéž zprávu nikdy nepošle dvakrát.
5. Vyzkoušejte to
Otevřete stránku, vyplňte formulář a odešlete ho. E-mail dorazí do schránky během několika sekund a v sekci Historie v dashboardu uvidíte zprávu i s celou časovou osou.
Pokud něco nefunguje, chyba vám řekne proč:
origin_not_allowed– doména stránky není v seznamu Povolené weby (zkontrolujtewwwa port).captcha_required– šablona vyžaduje Turnstile, ale ve formuláři chybí widget.invalid_template_params– povinné pole je prázdné nebo hodnota neodpovídá parametru.
Došly vám v rušném týdnu kredity? Zpráva se neztratí: přijme se se stavem
helda odejde automaticky, jakmile kredity doplníte.
Další kroky
- Pošlete návštěvníkovi potvrzení: přidejte z galerie šablonu Automatická odpověď: díky za zprávu a vyberte ji v kontaktní šabloně v Nastavení → Doručování.
- Používáte React, Vue nebo Svelte? Balíčky pro frameworky obsahují hotovou komponentu
FrontmailForms vestavěným widgetem Turnstile – podívejte se do dokumentace SDK.


