# Le formulaire annonce un succès, mais l'email n'arrive pas

Repérez l'étape en cause : requête, réponse API, enregistrement, spam, destinataire confirmé ou token Turnstile.

Author: Formgong
Published: 2026-10-01
Language: fr
Canonical: https://formgong.com/blog/contact-form-not-sending-email?lang=fr

Contrôlez séparément la requête du site, la demande enregistrée dans Formgong et l'email destiné à une adresse vérifiée. success: true indique l'acceptation, pas la livraison du courrier. Vérifiez aussi les demandes retenues, le spam et Turnstile.

## Trois résultats à ne pas confondre

Un remerciement peut n'être qu'un état visuel. Un enregistrement et un email reçu sont deux autres résultats. Envoyez une demande identifiable depuis le site publié et suivez-la. Les codes ci-dessous concernent Formgong ; pour un autre service, consultez ses propres réponses.

## La requête part-elle réellement ?

Ouvrez Network dans les outils du navigateur et cherchez le POST vers `https://formgong.com/submit`. Examinez clé, champs et réponse. Sans requête, revoyez le bouton ou le gestionnaire du formulaire. En HTML, vérifiez `action` et `method` ; en JavaScript, l'URL de `fetch`.

## Affichez le succès après la réponse

Demandez du JSON avec `Accept: application/json` et contrôlez HTTP ainsi que `success`. Un fetch terminé peut avoir reçu une erreur. Un POST HTML classique redirige le navigateur. Appelez l'exemple dans `try/catch` et préservez les champs en cas d'échec.

```javascript
// Call from your form's submit handler inside try/catch.
// Keep the entered fields when the request fails.
async function sendContactForm(form) {
  const response = await fetch("https://formgong.com/submit", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      Accept: "application/json",
    },
    body: JSON.stringify({
      ...Object.fromEntries(new FormData(form)),
      access_key: "fk_your_access_key",
    }),
  });
  const result = await response.json();
  if (!response.ok || result.success !== true) {
    throw new Error(result.message || "Submission failed");
  }
  // Accepted by Formgong; this is not email-delivery confirmation.
  return result.id;
}
```

## Le code d'erreur indique quoi examiner

`unknown_access_key` concerne la clé ; `origin_not_allowed`, le domaine autorisé. `turnstile_missing` et `turnstile_failed` concernent le token. `rate_limited` et `limit_exceeded` sont des limites distinctes : des clics rapides ne les corrigent pas.

Désactivez le bouton pendant l'attente et réactivez-le ensuite. Un échec ne doit pas effacer le message.

## Cherchez dans le bon formulaire et le spam

La clé de la page doit correspondre au formulaire ouvert. Un `botcheck` rempli peut produire une réponse apparemment correcte, mais un enregistrement spam sans notifications. Si l'évaluation IA retient le spam, examinez aussi ce statut.

## L'enregistrement existe : passez à l'email

Confirmez l'adresse du propriétaire. Vérifiez les notifications activées et les destinataires confirmés du formulaire, puis les indésirables, filtres et transferts de leur boîte.

Une notification Telegram aide à isoler le canal email, sans prouver sa livraison. La réponse automatique au visiteur est également un courrier distinct.

## Après un changement de protection

Reprenez le code à jour avec le site key et `cf-turnstile-response`. Les tokens expirent et ne servent qu'une fois ; renouvelez le widget si nécessaire. Le secret key reste hors du navigateur. Vérifiez le domaine publié.

## Préparez des informations utiles au diagnostic

Conservez URL, heure, statut HTTP, code et ID de demande s'il existe. Ne publiez ni données clients ni secrets. Après correction, testez à nouveau tout le parcours.

Pour repartir sur une base simple, utilisez l'[exemple HTML](/blog/html-contact-form-without-backend?lang=fr) ; pour un canal supplémentaire, le [guide Telegram](/blog/website-form-to-telegram?lang=fr).

## Questions fréquentes

### success: true confirme-t-il l'email ?

Non. Formgong a accepté la requête ; la notification est livrée séparément.

### Pourquoi Telegram arrive-t-il sans l'email ?

Les canaux sont indépendants. Vérifiez l'activation des emails, les destinataires confirmés et les indésirables.

### Pourquoi botcheck ne renvoie-t-il pas d'erreur ?

C'est un piège pour les bots : l'envoi peut paraître réussi tout en étant classé comme spam sans notification.

### Que faire après une erreur Turnstile ?

Obtenez un nouveau token et vérifiez son envoi dans cf-turnstile-response. Ne réutilisez pas un token consommé.

## Sources et documentation

- [MDN: Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch)
- [Cloudflare: Turnstile token validation](https://developers.cloudflare.com/turnstile/get-started/server-side-validation/)
- [Documentation Formgong](https://formgong.com/docs?lang=fr)

[Obtenir une clé](https://formgong.com/?lang=fr#top)
