# El formulario dice «enviado», pero no llega el correo

Comprueba petición, respuesta, registro, spam y destinatarios verificados para descubrir por qué no llega un correo del formulario.

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

Comprueba por separado la petición de la web, el registro en Formgong y el canal de correo con un destinatario verificado. success: true confirma aceptación, no entrega del email. El spam, las cuentas sin verificar y Turnstile requieren comprobaciones adicionales.

## No mezcles aceptación con entrega

El agradecimiento de la página puede ser solo un estado visual. El registro guardado y el correo recibido son otros dos resultados. Usa un mensaje identificable en la web publicada y síguelo. Los códigos de esta guía son de Formgong; otros servicios tienen respuestas propias.

## Abre la pestaña Network

Envía el formulario y busca el POST a `https://formgong.com/submit`. Revisa clave, campos y respuesta. Si no existe la petición, revisa el evento del formulario o el botón. En HTML importan `action` y `method`; en JavaScript, la URL de `fetch`.

## Lee la respuesta antes de dar las gracias

Solicita JSON con `Accept: application/json`. Verifica el estado HTTP y `success`: fetch puede terminar con una respuesta de error. El HTML clásico recibe una redirección. Llama al ejemplo dentro de `try/catch` y conserva los datos si falla.

```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;
}
```

## Utiliza el código para elegir la revisión

`unknown_access_key` apunta a la clave; `origin_not_allowed`, al dominio. `turnstile_missing` y `turnstile_failed` indican problemas con el token. `rate_limited` y `limit_exceeded` son límites distintos: no se resuelven pulsando repetidamente.

Desactiva el botón mientras esperas y actívalo al terminar. No borres la consulta tras un error.

## Busca también entre los registros de spam

Elige el formulario que corresponde a la clave de la web. Un `botcheck` rellenado puede producir una respuesta aparentemente correcta y guardar spam sin avisos. Si está activa la evaluación por IA con retención de spam, revisa también esa clasificación.

## Si el registro existe, revisa los avisos

Confirma el correo del propietario, activa los avisos del formulario y verifica el destinatario. Después revisa spam, filtros y reenvíos de su buzón.

Un mensaje recibido en Telegram acota el problema al correo, pero no prueba su entrega. La respuesta automática al visitante es otra comunicación con sus propios ajustes.

## Tras activar Turnstile

Actualiza la integración con el site key vigente y `cf-turnstile-response`. Los tokens caducan y solo se utilizan una vez; quizá debas reiniciar el widget para el siguiente intento. El secret key no va en el navegador.

## Guarda una prueba útil para continuar

Anota URL, hora, estado HTTP, código y el ID del envío si aparece. No publiques datos de clientes ni secretos. Tras corregirlo, prueba todo el recorrido.

Puedes partir del [ejemplo HTML](/blog/html-contact-form-without-backend?lang=es) o añadir avisos con la [guía de Telegram](/blog/website-form-to-telegram?lang=es).

## Preguntas frecuentes

### ¿success: true confirma el correo?

No. Confirma que Formgong aceptó la petición. El aviso se entrega por separado.

### ¿Por qué llega Telegram pero no el correo?

Son canales independientes. Revisa avisos, destinatarios verificados y spam.

### ¿Por qué botcheck no muestra error?

Es una trampa para bots: la petición puede parecer exitosa y quedar como spam sin avisos.

### ¿Qué hago tras un error de Turnstile?

Obtén un token nuevo y comprueba que se envía en cf-turnstile-response. No reutilices uno ya consumido.

## Fuentes y documentación

- [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/)
- [Documentación de Formgong](https://formgong.com/docs?lang=es)

[Obtener una clave](https://formgong.com/?lang=es#top)
