integraciones · framework

Un formulario de Gatsby que se muda contigo.

Gatsby genera archivos estáticos. Functions ata el formulario a un entorno y la función del alojamiento, al proveedor. El cierre de Gatsby Cloud mostró qué piezas podían migrarse; los formularios a menudo no.

Un endpoint de mailcontact evita esas ataduras. El formulario React con action sobrevive a cambios de alojamiento, versión y tecnología.

configuración recomendada

Utiliza el script de MailContact con tu diseño.

Añade este HTML a tu sitio o utiliza el generador de formularios. Sustituye el enlace por el de tu formulario. El script alojado inserta la comprobación oculta, gestiona el envío y la verificación automática y conserva el borrador si hay errores. Tú controlas el HTML y el CSS. Los formularios Free muestran un enlace visible «Processed by mailcontact.app»; Pro y Plus no. Los avisos siguen el idioma del navegador; configura data-mailcontact-language="fr" en el formulario para forzar el francés.

contact.html
<form action="https://mailcontact.app/api/forms/your-form-id" method="POST" data-mailcontact-form lang="es" data-mailcontact-language="es">
  <input type="hidden" name="_language" value="es" />
  <fieldset>
    <legend>Contáctanos</legend>
    <label>
      Nombre (opcional)
      <input name="name" type="text" autocomplete="name" maxlength="200" />
    </label>
    <label>
      Correo electrónico
      <input name="email" type="email" autocomplete="email" maxlength="320" required />
    </label>
    <label>
      Mensaje
      <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>Sitio web
        <input name="company_website" type="text" tabindex="-1" autocomplete="off" />
      </label>
    </div>
    </noscript>
    <button type="submit">Enviar mensaje</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>

Para un componente con su propio controlador de envío, carga el mismo script y utiliza MailContact.prepare(form) y MailContact.send() en lugar del marcador automático. Consulta la referencia de interfaces personalizadas para carga, avisos y atribución de Free.

el código

Alternativa: una integración directa para Gatsby.

Este ejemplo envía directamente a la API. Mantén el campo obligatorio company_website presente y vacío. Los envíos nativos abren JSON si tienen éxito o una página de verificación si hace falta. Los scripts sin verificación envían los mensajes sospechosos a Spam; el spam claro también se retiene sin alertas ni consumo de cuota. Una respuesta de éxito confirma recepción, incluida revisión, o el descarte silencioso de una trampa rellenada. Consulta protección contra spam para conocer todo el funcionamiento.

src/pages/contact.js
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>
  );
}

cómo funciona

Tres pasos de principio a fin.

01

Crear una bandeja

Una bandeja por proyecto con endpoint y email antes de la primera compilación.

02

Añade la página

Pega en src/pages/contact.js y sustituye el ID. Sin plugins, variables ni cambios de compilación.

03

Recibe avisos

Añade Discord, Slack, email o webhook para recibir avisos.

por qué mailcontact

Pensado para funcionar con Gatsby.

Sin plugin en gatsby-config

Los plugins pueden fallar con versiones mayores y abandonarse antes que tu sitio. Aquí no hay integración que quede incompatible.

Independiente del alojamiento desde el principio

Netlify Forms depende de Netlify y Gatsby Functions de un alojamiento compatible. Un action externo no depende de dónde sirvas archivos.

Tu historial también se traslada

Los formularios nativos dejan el archivo atrás al migrar. Tu bandeja conserva las consultas aunque cambies de proveedor.

preguntas frecuentes

Gatsby + mailcontact: tus preguntas resueltas

¿Puede un sitio Gatsby estático recibir formularios?

No por sí solo. gatsby build genera HTML, CSS y JS, sin receptor de POST. Necesitas una Gatsby Function en un alojamiento compatible, un servicio externo o tu API.

¿Y Gatsby Functions?

Funcionan, pero añaden ejecución de servidor al sitio estático. Además programas entrega, antispam y almacenamiento y dependes de alojamientos con Gatsby Functions. Para contacto, es mucho trabajo.

¿Necesito gatsby-plugin-react-helmet o alguna configuración?

No. No cambia configuración. Es un componente React con formulario y controlador: sin plugin, GraphQL ni entrada en gatsby-config.js.

¿Merece la pena usar Gatsby en 2026?

Tú decides; muchos sitios Gatsby funcionan bien. Su impulso se ha reducido, así que agradecerás mantener portables las piezas posibles. Un formulario que apunta a una URL es una de ellas.

relacionado

También funciona con

Una bandeja por cada proyecto de Gatsby que publiques.

Formularios y una dirección de email real, juntos, con avisos en tus herramientas. Empieza con una cuenta gratuita.

Crear formulario gratis

Sin tarjeta de crédito. Free incluye un proyecto y 50 mensajes de formulario al mes.