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.
integraciones · framework
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
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.
<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
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.
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
Una bandeja por proyecto con endpoint y email antes de la primera compilación.
Pega en src/pages/contact.js y sustituye el ID. Sin plugins, variables ni cambios de compilación.
Añade Discord, Slack, email o webhook para recibir avisos.
por qué mailcontact
Los plugins pueden fallar con versiones mayores y abandonarse antes que tu sitio. Aquí no hay integración que quede incompatible.
Netlify Forms depende de Netlify y Gatsby Functions de un alojamiento compatible. Un action externo no depende de dónde sirvas archivos.
Los formularios nativos dejan el archivo atrás al migrar. Tu bandeja conserva las consultas aunque cambies de proveedor.
preguntas frecuentes
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.
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.
No. No cambia configuración. Es un componente React con formulario y controlador: sin plugin, GraphQL ni entrada en gatsby-config.js.
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
Formularios y una dirección de email real, juntos, con avisos en tus herramientas. Empieza con una cuenta gratuita.
Crear formulario gratisSin tarjeta de crédito. Free incluye un proyecto y 50 mensajes de formulario al mes.