8. Mailing

Introducción

El sistema de mailing gestiona campañas de email, contactos, plantillas y componentes específicos para envíos. Es uno de los módulos más completos del panel: cubre desde la captura de suscriptores hasta el envío masivo y el reporte de resultados.

El módulo se compone de cuatro pantallas principales accesibles desde el menú lateral (entrada Mailing): campañas, contactos, plantillas y componentes. Una quinta pantalla, el log de envío de cada campaña, permite revisar aperturas, clics y rebotes una vez la campaña ha sido lanzada.

Acceso rápido

Todas las rutas son accesibles desde el menú lateral, en la entrada Mailing.

Pantalla principal (listado de campañas)

Listado de campañas de mailing
Listado principal de campañas (/mailing/campaigns). Muestra cada campaña con su estado, destinatarios, fecha de envío y acciones disponibles.

La pantalla principal de campañas muestra, en formato tabla:

En la parte superior de la tabla hay un botón destacado Crear campaña que abre el formulario de alta (ver 8.1) y, a la derecha, un campo de búsqueda y filtros por estado y fecha.

Tareas habituales

8.1 Crear una campaña

Formulario de creación de una nueva campaña
Formulario de creación de una campaña. Se definen remitente, asunto, plantilla, lista de destinatarios y fecha de envío.

Para lanzar una nueva campaña de email:

  1. Entra en /mailing/campaigns.
  2. Pulsa el botón Crear campaña (esquina superior derecha).
  3. Rellena los campos del formulario:
    • Nombre interno (no lo ven los destinatarios).
    • Remitente: nombre y email desde el que se envía (por defecto toma los valores de /variables, claves MAIL_FROM_NAME y MAIL_FROM_EMAIL).
    • Asunto del email.
    • Preheader (texto预览 que aparece junto al asunto en muchos clientes de correo).
    • Plantilla: elige una de las plantillas disponibles (ver 8.3).
    • Destinatarios: elige una lista o segmento de contactos (ver 8.2) o importa un CSV ad-hoc.
    • Programación: envía ahora o programa la fecha y hora exactas.
  4. Previsualiza el email (botón Previsualizar) y comprueba cómo se ve en cliente de escritorio y móvil.
  5. Guarda la campaña. Quedará en estado borrador (o programada si indicaste fecha futura).
  6. Cuando estés listo, pulsa Lanzar (o se lanzará automáticamente en la fecha programada).
Importante: una vez lanzada, la campaña no se puede editar. Si necesitas cambiar algo, primero detenla/pausarla, duplícala, modifica la copia y lanza la nueva. Esto es así para preservar la trazabilidad de lo enviado.

8.2 Gestionar contactos

Listado y gestión de contactos de mailing
Pantalla de gestión de contactos (/mailing/contacts). Permite buscar, importar, exportar, segmentar y dar de baja contactos.

La pantalla de contactos es la base de datos de suscriptores del mailing. Funciones principales:

Consejo: antes de importar un CSV grande (miles de contactos), haz una prueba con 5-10 filas para validar el formato y revisar si hay duplicados. El sistema detecta duplicados por email, pero los campos personalizados pueden pisarse si no se gestiona bien.

8.3 Crear y usar plantillas

Listado y editor de plantillas de email
Pantalla de plantillas de email (/mailing/templates). Editor HTML con vista previa en tiempo real y soporte para variables y condicionales.

Las plantillas definen la estructura visual y el contenido reutilizable de los emails. Se editan en HTML con marcadores que se rellenan en el momento del envío:

Para crear una nueva plantilla:

  1. Entra en /mailing/templates.
  2. Pulsa Nueva plantilla.
  3. Asigna un nombre interno, un asunto por defecto y pega o edita el HTML.
  4. Usa la pestaña Vista previa para ver el resultado con datos de prueba.
  5. Guarda. La plantilla ya está disponible al crear una campaña (ver 8.1).

8.4 Componentes de mailing

Componentes reutilizables para emails
Pantalla de componentes de mailing (/mailing/components). Bloques reutilizables (cabecera, pie, botón CTA, etc.) que se insertan en las plantillas.

Los componentes de mailing son bloques HTML reutilizables (cabecera con logo, pie con datos de contacto, botón CTA, divisor, etc.) que se insertan dentro de las plantillas. Esto evita repetir HTML y permite cambiar el logo o el pie en un solo sitio para que afecte a todos los emails.

El manejo es similar al de los componentes de página (ver sección 4): tienen un nombre, un slug, un template HTML con campos editables y un flag is_global que indica si se comparten entre todas las plantillas.

8.5 Ver el log de envío de una campaña

Reporte y log de envío de una campaña
Reporte de envío de una campaña (/mailing/reports/{id}). Estadísticas agregadas (entregados, aperturas, clics, rebotes) y log por destinatario.

Una vez lanzada una campaña, esta pantalla muestra:

Los datos de apertura y clic se obtienen de los webhooks que los proveedores de email envían (ver webhooks). Puede haber un retraso de varios minutos respecto al envío real.

Referencia técnica (webmasters)

Configuración SMTP en el .env

El envío de emails se realiza a través de un servidor SMTP externo (por ejemplo, Mailgun, Amazon SES, SendGrid, el SMTP de tu hosting). Las claves habituales en el .env son:

MAIL_HOST=smtp.example.com
MAIL_PORT=587
MAIL_USER=apikey
MAIL_PASS=xxxxxxxxxxxxxxxxxxxx
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=noreply@example.com
MAIL_FROM_NAME="${SITE_NAME}"

Colas de envío

Para no bloquear la web durante el envío masivo, las campañas se procesan con una cola (queue). El flujo es:

  1. Al lanzar una campaña, se crea una fila por destinatario en una tabla de cola (estado queued).
  2. Un worker en background (cron, daemon, o disparado por la propia web) toma N mensajes de la cola, los envía por SMTP, y actualiza el estado a sent o failed.
  3. Si el envío falla por un error transitorio (timeout, rate limit), el mensaje vuelve a la cola con un backoff y se reintenta hasta un máximo. Si el error es permanente (email inválido), se marca como bounced y se desuscribe al contacto.

El ritmo de envío lo controla un parámetro de throttle (por ejemplo, MAIL_THROTTLE_PER_MINUTE=200) para no superar el rate limit del proveedor SMTP.

Webhooks del proveedor de email

Para que el log de la campaña registre aperturas, clics, rebotes y bajas, el panel expone un endpoint público al que el proveedor de email envía eventos HTTP POST:

POST /api/mailing/webhook/{provider}
Content-Type: application/json
Signature: <firma del proveedor>

{ "event": "delivered", "recipient": "user@example.com", "timestamp": "..." }

El endpoint verifica la firma del proveedor, identifica al destinatario, actualiza el estado del envío en la base de datos y registra el evento. Cada proveedor tiene su propio formato de payload y de firma, por lo que el endpoint suele tener una rama por proveedor (/api/mailing/webhook/mailgun, /api/mailing/webhook/sendgrid, etc.).

Rutas internas relevantes

Errores frecuentes