Cinco formas que funcionan para recibir en tu bandeja de entrada los envíos de un formulario web: mailto, un servicio de endpoint de formularios, Netlify Forms, una función serverless con una API de email y Google Apps Script. Con código JavaScript de envío y protección contra spam.
Una página web no puede enviar emails por sí sola. El formulario tiene que enviar sus datos a algo que sí pueda: un servicio de endpoint de formularios, la función de formularios de tu hosting, una función serverless que llame a una API de email, un Google Apps Script o tu propio servidor. Elige según cuánto control necesites y después envía con JavaScript para que los visitantes se queden en la página.
Comparativa de los cinco métodos
Cada método de abajo incluye el código completo. Empieza por el formulario y el manejador de envío en JavaScript, que funcionan con todos los métodos, y luego elige un backend.
Solo con una acción mailto:, que abre la app de correo del propio visitante con los datos rellenados. Falla para cualquiera que no tenga una app de correo configurada, lo que incluye a mucha gente en ordenadores compartidos o del trabajo, y no puedes dar estilo ni validar el resultado. Para cualquier cosa importante, usa uno de los otros métodos.
Normalmente porque el mensaje dice venir de la dirección del visitante, o porque tu dominio no tiene registros SPF, DKIM y DMARC para el servicio que lo envía. Envía desde una dirección de tu propio dominio, pon al visitante como reply-to y añade los registros DNS que te dé tu proveedor de email.
Un campo oculto para las personas pero visible para los bots sencillos. Las personas lo dejan vacío; los bots lo rellenan. Tu backend descarta cualquier envío en el que tenga un valor. Frena mucho spam básico sin molestar a los visitantes reales.
Al principio no. Empieza con un campo trampa y comprobaciones en el servidor, como rechazar mensajes llenos de enlaces. Añade un desafío solo si el spam sigue llegando, y elige uno que no obligue a la gente a resolver acertijos.
Este front-end funciona con todos los métodos. El script envía el formulario con fetch, muestra un mensaje de estado y conserva el texto si el envío falla.
Las etiquetas envuelven sus campos, el navegador comprueba los campos obligatorios y el formato del email, y la línea de estado se anuncia a los lectores de pantalla.
Funciona con cualquier endpoint que acepte un envío de formulario normal. Si el endpoint espera JSON, envía JSON.stringify(Object.fromEntries(data)) con un content type JSON.
Abre la app de correo del visitante con los campos en el cuerpo. No necesita servidor, pero no se envía nada si no tiene app de correo.
Servicios como Formspree, Basin, Getform y Web3Forms te dan una URL a la que enviar y reenvían cada envío a tu bandeja de entrada. Regístrate, crea un formulario, pega su URL en el atributo action del formulario de arriba y conserva el script fetch. Revisa los límites gratuitos actuales de cada servicio y dónde almacena los datos.
Netlify detecta el formulario al desplegar cuando tiene el atributo data-netlify. Activa las notificaciones por email en los ajustes de formularios del sitio. En formularios renderizados con JavaScript, guarda también una copia en HTML simple entre tus archivos compilados para que Netlify pueda encontrarlo.
La función recibe el formulario, lo comprueba e invoca una API de email con una clave secreta guardada en el servidor. Este ejemplo usa la API REST de Resend; SendGrid, Postmark y Amazon SES funcionan igual con sus propios endpoints.
Funciona en plataformas que usan los objetos web Request y Response. Define RESEND_API_KEY en las variables de entorno de tu hosting y verifica antes tu dominio de envío con el proveedor de email.
Un script corto, desplegado como web app desde una cuenta de Google, envía cada formulario por email y puede registrarlo en una hoja de cálculo. Hay cuotas diarias de email, así que encaja con formularios de poco volumen.
En un proyecto nuevo de Apps Script, pega esto y luego despliégalo como web app que se ejecuta como tú y a la que cualquiera puede acceder. Usa la URL de la web app como action del formulario.
El hosting compartido suele ejecutar PHP. La función integrada mail() funciona en muchos hostings, pero la entregabilidad es mejor con una librería SMTP como PHPMailer y un buzón real en tu dominio.
Rechaza las peticiones que no son POST, recorta los campos, no admite saltos de línea en la dirección de respuesta (que permitirían a un atacante añadir cabeceras) y redirige a una página de agradecimiento.
Empieza gratis · Sin tarjeta de crédito