Nessun plugin in gatsby-config
I plugin moduli possono rompersi agli aggiornamenti maggiori e spesso vengono abbandonati prima del sito. Qui nulla può diventare incompatibile con future versioni Gatsby.
integrazioni · framework
Gatsby produce file statici e un modulo deve raggiungere qualcosa fuori dalla build. Due abitudini invecchiano male: Gatsby Functions lega al runtime, il modulo nativo dell’hosting lega all’host. Chi ha affrontato la chiusura di Gatsby Cloud e spostato il sito ha scoperto quali parti erano trasferibili: spesso i moduli non lo erano.
Un modulo verso mailcontact non ha quel legame. È markup in un componente React con action: resiste a migrazioni hosting, aggiornamenti Gatsby e infine a una riscrittura completa.
configurazione consigliata
Aggiungi questo HTML al sito oppure usa generatore di moduli. Sostituisci il link del modulo con il tuo. Lo script ospitato inserisce il controllo nascosto, gestisce invio e verifica automatica e conserva la bozza in caso di errore. Tu controlli HTML e CSS. I moduli Free mostrano un link visibile “Processed by mailcontact.app”; Pro e Plus no. I messaggi seguono la lingua del browser; imposta data-mailcontact-language="fr" sul modulo per impostare il francese.
<form action="https://mailcontact.app/api/forms/your-form-id" method="POST" data-mailcontact-form lang="it" data-mailcontact-language="it">
<input type="hidden" name="_language" value="it" />
<fieldset>
<legend>Contattaci</legend>
<label>
Nome (facoltativo)
<input name="name" type="text" autocomplete="name" maxlength="200" />
</label>
<label>
Email
<input name="email" type="email" autocomplete="email" maxlength="320" required />
</label>
<label>
Messaggio
<textarea name="message" rows="5" maxlength="5000" required></textarea>
</label>
<noscript>
<div aria-hidden="true" style="position:absolute;left:-10000px;width:1px;height:1px;overflow:hidden;">
<label>Sito web
<input name="company_website" type="text" tabindex="-1" autocomplete="off" />
</label>
</div>
</noscript>
<button type="submit">Invia messaggio</button>
</fieldset>
<p data-contact-status role="status" aria-live="polite" aria-atomic="true"></p>
</form>
<script defer src="https://mailcontact.app/forms/v1.js" crossorigin="anonymous" referrerpolicy="no-referrer"></script>Per un componente con un proprio gestore di invio, carica lo stesso script e usa MailContact.prepare(form) e MailContact.send() al posto del marcatore automatico. Consulta riferimento per interfacce personalizzate per caricamento, messaggi e attribuzione Free.
lo snippet
Questo esempio invia direttamente all’API. Mantieni il campo obbligatorio company_website presente e vuoto. Gli invii nativi aprono JSON in caso di successo o una pagina di verifica se serve. Gli script personalizzati senza supporto alla verifica inviano i messaggi sospetti in Spam per revisione; anche lo spam evidente resta lì senza notifiche né consumo di quota. Una risposta di successo conferma la ricezione, anche per revisione, oppure lo scarto silenzioso di un controllo compilato. Vedi protezione antispam per il comportamento completo.
import * as React from "react";
// No src/api/ function. No host form feature. Nothing to migrate later.
export default function ContactPage() {
const [sent, setSent] = React.useState(false);
async function submit(event) {
event.preventDefault();
await fetch("https://mailcontact.app/api/forms/your-form-id", {
method: "POST",
body: new FormData(event.target),
});
setSent(true);
}
if (sent) return <p>Thanks. We'll be in touch.</p>;
return (
<form onSubmit={submit}>
<input name="name" placeholder="Your name" required />
<input name="email" type="email" placeholder="[email protected]" required />
<textarea name="message" placeholder="What's on your mind?" required />
<input name="company_website" type="text" tabIndex={-1} autoComplete="off"
style={{ position: "absolute", left: "-10000px" }} aria-hidden="true" />
<button>Send</button>
</form>
);
}come funziona
Una casella per progetto, con endpoint modulo ed email pronti prima della prima build.
Inseriscilo in src/pages/contact.js e cambia l’ID endpoint. Nessun plugin gatsby-config, variabile d’ambiente o modifica al comando di build.
Aggiungi Discord, Slack, email o webhook: riceverai lì gli avvisi dei messaggi consegnati.
perché mailcontact
I plugin moduli possono rompersi agli aggiornamenti maggiori e spesso vengono abbandonati prima del sito. Qui nulla può diventare incompatibile con future versioni Gatsby.
Netlify Forms funziona solo su Netlify e Gatsby Function richiede un hosting che la esegua. Un’action verso URL esterno non dipende da dove sono serviti i file.
I moduli nativi lasciano l’archivio sull’hosting quando migri. La casella di progetto conserva i messaggi: cambiare host non perde due anni di richieste.
FAQ
Non da solo. gatsby build produce HTML, CSS e JS senza processi per accettare POST. Serve qualcosa fuori dalla build: una Gatsby Function su hosting compatibile, un servizio terzo o una tua API.
Funzionano, ma aggiungono un runtime al sito statico, proprio ciò che potresti evitare. Devi anche scrivere consegna email, antispam e archiviazione, e pubblicare su hosting compatibili con Gatsby Functions. Per un modulo è molto lavoro per poco.
No. Non modifica alcuna configurazione. È un componente React con un elemento form e un gestore d’invio: niente plugin, query GraphQL o voci in gatsby-config.js.
La scelta è tua e molti siti Gatsby funzionano bene. Lo slancio del framework però è rallentato: rendere trasferibili i componenti utili ti aiuterà in futuro. Un modulo fatto di markup verso un URL è uno di questi.
correlati
Moduli e un vero indirizzo email insieme, con notifiche dove lavori. Inizia con un account gratuito.
Crea un modulo gratisNon serve la carta di credito. Free include un progetto e 50 messaggi dal modulo al mese.