intégrations · framework

Un formulaire Svelte sans backend.

Svelte seul compile un bundle JavaScript pour le navigateur, sans serveur. Idéal pour widget, landing page ou îlot, mais le formulaire n’a nulle part où envoyer.

Ajouter un backend revient à maintenir un service pour trois champs. Avec mailcontact, le déploiement reste statique et les envois arrivent en boîte avec alertes Discord, Slack, email ou webhook.

configuration recommandée

Utilisez le script MailContact avec votre design.

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.

contact.html
<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

Alternative : une intégration directe pour Svelte.

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.

src/lib/ContactForm.svelte
<script>
  let sent = $state(false);
  let error = $state(false);

  async function submit(event) {
    const res = await fetch("https://mailcontact.app/api/forms/your-form-id", {
      method: "POST",
      body: new FormData(event.currentTarget),
    });
    if (res.ok) sent = true;
    else error = true;
  }
</script>

{#if sent}
  <p>Thanks. We'll be in touch.</p>
{:else}
  <form onsubmit={(e) => { e.preventDefault(); submit(e); }}>
    <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></textarea>
    <input name="company_website" type="text" tabindex="-1" autocomplete="off"
      style="position:absolute;left:-10000px" aria-hidden="true" />

    <button>Send</button>
    {#if error}<p role="alert">That didn't send. Try again?</p>{/if}
  </form>
{/if}

fonctionnement

Trois étapes, du début à la fin.

01

Créer une boîte

Une boîte par projet, URL et adresse disponibles immédiatement.

02

Ajoutez le composant

Collez dans l’arbre de composants et remplacez l’identifiant. Le gestionnaire lit le formulaire : les attributs name déterminent les champs reçus.

03

Recevoir des alertes

Ajoutez Discord, Slack, email ou webhook pour recevoir le message à son arrivée.

pourquoi mailcontact

Conçu pour fonctionner avec Svelte.

Le bundle reste un bundle

Svelte avec Vite produit un dossier pour tout hébergeur statique. La réception externe évite d’ajouter un serveur et ne change pas la nature du déploiement.

Aucun état à déclarer

new FormData(event.currentTarget) évite toute liaison. Aucune valeur par champ ni réinitialisation à écrire ; required et type restent vérifiés par le navigateur avant le gestionnaire.

S’intègre partout

Les composants Svelte s’intègrent souvent ailleurs. CORS permet l’envoi quel que soit le domaine d’intégration.

FAQ

Svelte + mailcontact : vos questions

Quelle différence avec la configuration SvelteKit ?

SvelteKit propose des actions, véritables gestionnaires serveur : il faut donc garder un adaptateur capable de les exécuter. Svelte seul n’a pas de serveur, donc le formulaire doit toujours envoyer ailleurs. Pour SvelteKit, consultez plutôt son guide.

Puis-je l’utiliser avec Svelte 4 ?

Oui. L’exemple utilise $state et onsubmit de Svelte 5. Avec Svelte 4, utilisez let sent = false et on:submit|preventDefault={submit}. fetch et FormData ne changent pas : ils ne dépendent pas du framework.

L’identifiant du point de réception est-il secret ?

Non, et il n’est pas traité comme tel. Il figure dans votre HTML public par conception, comme une URL Google Form. Il accepte uniquement les envois vers une boîte : aucun contenu ne peut être lu avec lui. Les limites serveur, contrôles de contenu et détection de campagnes protègent la réception. Le champ caché bloque certains robots simples ; les messages suspects peuvent nécessiter une vérification ou être retenus dans les spams.

Puis-je envoyer cela vers Discord plutôt que par email ?

Oui, mais sans webhook dans le code Svelte. Une URL Discord collée dans un composant est envoyée à tous les navigateurs : chacun peut ensuite publier. Ajoutez Discord comme destination de la boîte ; le relais se fait côté serveur et l’URL n’en sort pas.

voir aussi

Fonctionne aussi avec

Une boîte pour chaque projet Svelte lancé.

Formulaires et vraie adresse email, ensemble, avec des notifications dans vos outils. Commencez gratuitement.

Créer mon formulaire

Aucune carte bancaire requise. Free comprend un projet et 50 messages de formulaire par mois.