Ir al contenido

Formulario de contacto con respuesta automática

La guía completa (un formulario de contacto que te envía los mensajes y da las gracias al visitante) ahora es el Tutorial. Los pasos más importantes para esta receta:

Cuando ya funcione, vale la pena echar un vistazo a estos extras.

La plantilla Formulario de contacto de la galería ya tiene activada la Recogida de contactos (en la plantilla, Ajustes → Recogida de contactos, Recoger contactos de esta plantilla) con Parámetro del correo email y Parámetro del nombre name. Cada mensaje enviado correctamente crea o actualiza una entrada en Contactos. Añade más parámetros en Campos adicionales, separados por comas, para guardarlos también con el contacto. Consulta Recogida de contactos.

Añade campos a la plantilla en la pestaña Parámetros y luego añade a tu formulario campos con el mismo name. Los valores del formulario llegan como texto y Frontmail los convierte al tipo declarado, por ejemplo:

Parámetro Tipo Campo del formulario
topic enum con Valores permitidos sales, support, other <select name="topic">
newsletter boolean, Valor predeterminado false <input type="checkbox" name="newsletter">: marcado se convierte en true, sin marcar usa el valor predeterminado
{{#if newsletter}}<p>Quiere recibir el boletín.</p>{{/if}}

Detalles: conversión de los valores de formularios.

Muestra los errores de validación junto a los campos

Sección titulada «Muestra los errores de validación junto a los campos»

Cuando un valor incumple una regla de un parámetro (correo no válido, falta un campo obligatorio, mensaje demasiado corto), la solicitud falla con invalid_template_params y no se envía nada. El error enumera todos los problemas, así que puedes mostrar cada uno en el campo correspondiente:

try {
await frontmail.sendForm(null, 'tpl_…', form);
} catch (err) {
form.querySelectorAll('.field-error').forEach((el) => (el.textContent = ''));
for (const issue of err.details?.issues ?? []) {
// p. ej. <small class="field-error" data-for="email"></small> bajo cada campo
const el = form.querySelector(`.field-error[data-for="${issue.param}"]`);
if (el) el.textContent = issue.message;
}
}

Consulta Gestión de errores.

Los sitios web permitidos y la CAPTCHA de Turnstile (paso 4 del tutorial) frenan la mayoría de los abusos. Para un formulario público con mucho tráfico, además puedes:

  • activar Bloquear navegadores headless en Seguridad → Protección contra abusos,
  • bajar el Rate limit por IP,
  • rellenar una Lista de bloqueo con direcciones o dominios de los que nunca quieras saber nada,
  • añadir un Servicio de respaldo a la plantilla (Ajustes → Entrega) para que una caída del proveedor no retrase tus mensajes.

Consulta Protección contra bots.