Static Forms n’est pas un backend de formulaires
Il analyse l’envoi et appelle votre gestionnaire. Persistance, notifications, antispam et erreurs restent à écrire : c’est le vrai travail, et le plugin ne le fait pas.
intégrations · hosting platform
Cloudflare Pages sert votre site depuis plus de 300 villes sans recevoir un formulaire. Pas d’équivalent Netlify Forms : son guide renvoie à un tiers. Static Forms pour Pages Functions intercepte le POST puis le remet à une fonction à écrire et à un espace KV à provisionner.
Faire pointer action vers mailcontact retire toute cette couche : sans dossier Functions, binding KV, configuration wrangler ou Worker à maintenir. Les envois vont dans la boîte avec alertes Discord, Slack, email ou webhook.
configuration recommandée
Ajoutez ce HTML à votre site, ou utilisez le générateur de formulaires. Remplacez le lien du formulaire par le vôtre. Le script hébergé injecte le contrôle caché, gère l’envoi et la vérification automatique, et conserve le brouillon en cas d’erreur. Vous contrôlez le HTML et le CSS. Les formulaires Free affichent un lien visible « Traité par mailcontact.app » ; Pro et Plus ne l’affichent pas. Les messages de retour suivent la langue du navigateur ; définissez data-mailcontact-language="fr" sur le formulaire pour imposer le français.
<form action="https://mailcontact.app/api/forms/your-form-id" method="POST" data-mailcontact-form lang="fr" data-mailcontact-language="fr">
<input type="hidden" name="_language" value="fr" />
<fieldset>
<legend>Contactez-nous</legend>
<label>
Nom (facultatif)
<input name="name" type="text" autocomplete="name" maxlength="200" />
</label>
<label>
Email
<input name="email" type="email" autocomplete="email" maxlength="320" required />
</label>
<label>
Message
<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>Site web
<input name="company_website" type="text" tabindex="-1" autocomplete="off" />
</label>
</div>
</noscript>
<button type="submit">Envoyer le message</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>Pour un composant doté de son propre gestionnaire d’envoi, chargez le même script et utilisez MailContact.prepare(form) et MailContact.send() au lieu du marqueur automatique. Voir la référence des interfaces personnalisées pour le chargement, les messages de retour et l’attribution Free.
l’extrait
Cet exemple appelle directement l’API. Gardez le champ requis company_website champ présent et vide. Les envois natifs ouvrent du JSON en cas de succès ou une page de vérification si nécessaire. Les scripts personnalisés sans vérification envoient les messages suspects dans les spams pour examen ; les spams manifestes y sont aussi retenus sans notification ni consommation du quota. Un succès confirme la réception, y compris pour examen, ou l’abandon silencieux d’un contrôle rempli. Voir protection antispam pour le comportement complet.
<!-- No functions/ directory. No KV namespace. No wrangler.toml. -->
<form action="https://mailcontact.app/api/forms/your-form-id" method="POST">
<input type="text" name="name" placeholder="Your name" required />
<input type="email" name="email" placeholder="[email protected]" required />
<textarea name="message" placeholder="What's on your mind?" required></textarea>
<!-- Bots fill this in. Humans never see it. -->
<input type="text" name="company_website" type="text" tabindex="-1" autocomplete="off"
style="position:absolute;left:-10000px" aria-hidden="true" />
<button type="submit">Send</button>
</form>fonctionnement
Une boîte par projet. Nommez-la comme le projet Pages pour obtenir immédiatement point de réception et adresse.
HTML simple, compilation Astro ou bundle React : le formulaire reste du HTML dans la page. La commande de compilation ne change pas.
git push ou wrangler pages deploy. Le formulaire fonctionne dès l’aperçu, sur les alias de branches et votre domaine, sans réglage par environnement.
pourquoi mailcontact
Il analyse l’envoi et appelle votre gestionnaire. Persistance, notifications, antispam et erreurs restent à écrire : c’est le vrai travail, et le plugin ne le fait pas.
Workers facture les requêtes et le temps CPU, et un gestionnaire mail ajoute une API et une clé. Une URL externe n’a ni budget d’invocations à dépasser ni démarrage à déboguer à 2 heures du matin.
Cloudflare oriente les nouveaux projets complets vers Workers. Un formulaire vers une URL externe reste indépendant du produit d’hébergement : aucun lien à la plateforme à migrer.
FAQ
Non. Netlify détecte un attribut de formulaire au déploiement et conserve les envois ; Cloudflare ne le propose pas. Les solutions documentées sont Static Forms, qui nécessite d’écrire le gestionnaire et de connecter le stockage, ou un service externe. La plateforme n’a pas d’option sans code.
C’est une brique technique, pas un produit. Le plugin intercepte le POST d’un formulaire marqué data-static-form-name et le transmet au gestionnaire respondWith à implémenter. Enregistrer, notifier et filtrer les spams restent à construire. Si vous voulez l’écrire, le plugin aide ; pour l’éviter, un point de réception est plus direct.
Oui. Aucun conflit : action envoie vers une autre origine, sans toucher au dossier functions/, middleware ou bindings. Cela remplace uniquement la partie contact que vous auriez écrite avec Functions.
Oui. Les envois de toute origine sont acceptés : aperçus *.pages.dev, alias de branche et domaine principal alimentent la même boîte, sans liste d’autorisation ni réglage par environnement.
voir aussi
Formulaires et vraie adresse email, ensemble, avec des notifications dans vos outils. Commencez gratuitement.
Créer mon formulaireAucune carte bancaire requise. Free comprend un projet et 50 messages de formulaire par mois.