Come creare un modulo di contatto per il sito web senza backend
Un semplice modulo di contatto HTML che ti invia ogni messaggio via email: niente server, niente PHP, niente plugin. Funziona su qualsiasi sito statico, dall'HTML scritto a mano ad Astro, Hugo o WordPress.
Aggiornato:
Creerai un normale modulo HTML che invia ogni messaggio alla tua casella di posta. L’email parte da Frontmail attraverso la casella che usi già (Gmail, Outlook, qualsiasi server SMTP o un provider transazionale), quindi non devi gestire nessun server tuo.
Ti serve: un account Frontmail gratuito e una decina di minuti.
1. Collega la tua casella di posta
- Nella dashboard apri Servizi email e fai clic su Aggiungi servizio.
- Scegli il tuo provider. Gmail e Outlook si collegano con il tuo account (nessuna password salvata); SMTP, Resend, Postmark, Mailgun e gli altri richiedono una chiave API o le credenziali.
- Seleziona Imposta come predefinito e fai clic su Verifica e salva. Frontmail controlla le credenziali senza inviare nulla.
2. Crea il modello dalla galleria
- Apri Modelli → Dalla galleria e scegli Modulo di contatto (categoria Moduli).
- Fai clic su Usa modello. Il destinatario (A) è il tuo indirizzo e Reply-To è il visitatore, quindi premendo Rispondi gli scrivi direttamente.
Il modello si aspetta questi parametri, che diventano gli attributi name dei campi del modulo:
| Parametro | Obbligatorio | Che cos’è |
|---|---|---|
name |
sì | Il nome del visitatore |
email |
sì | L’indirizzo del visitatore (validato) |
phone |
no | Numero di telefono |
topic |
no | Argomento, mostrato nell’oggetto |
message |
sì | Il messaggio |
3. Autorizza il tuo sito
La chiave pubblica si trova nel sorgente della pagina, e va bene così: però deve poterla usare solo il tuo sito.
- Apri Sicurezza e aggiungi il tuo dominio in Siti consentiti (per esempio
example.comewww.example.com; durante lo sviluppo aggiungi anchelocalhost). Fai clic su Salva. - Consigliato: crea un widget Cloudflare Turnstile gratuito per i tuoi hostname, incolla la chiave del sito e la chiave segreta in Sicurezza → Protezione dai bot e fai clic su Attiva il CAPTCHA per tutti i modelli. Così i bot non possono usare il tuo modulo, e per le persone di solito è invisibile.
4. Aggiungi il modulo alla pagina
Copia la chiave pubblica (Sicurezza) e l’ID del modello (scheda Snippet del modello), poi incolla questo codice dove deve comparire il modulo:
<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() legge i campi in base al loro name, quindi modulo e modello restano allineati senza
alcun codice di mappatura. Gli errori di rete e i problemi temporanei del server vengono ritentati
automaticamente con la stessa chiave di idempotenza: un visitatore non ti invierà mai due volte lo
stesso messaggio.
5. Provalo
Apri la pagina, compila il modulo e invialo. L’email arriva nella tua casella in pochi secondi, e la Cronologia nella dashboard mostra il messaggio con tutta la sua timeline.
Se qualcosa non funziona, l’errore ti dice perché:
origin_not_allowed– il dominio della pagina non è in Siti consentiti (controllawwwe la porta).captcha_required– il modello richiede Turnstile, ma nel modulo manca il widget.invalid_template_params– un campo obbligatorio è vuoto oppure un valore non rispetta il parametro.
Hai finito i crediti in una settimana intensa? Il messaggio non va perso: viene accettato con lo stato
helde parte automaticamente appena aggiungi crediti.
Prossimi passi
- Invia al visitatore una conferma: aggiungi dalla galleria il modello Risposta automatica: grazie per il messaggio e selezionalo in Impostazioni → Consegna del modello di contatto.
- Usi React, Vue o Svelte? I pacchetti per i framework includono un componente
FrontmailFormpronto all’uso con il widget Turnstile integrato: trovi i dettagli nella documentazione dell’SDK.


