Saliente (SMTP)

Última actualización: Aug 31, 2026Sección: Integraciones

Mailoo envía correo electrónico a través de tres capas distintas. Cada capa tiene credenciales, límites de seguridad y destinatarios diferentes.

::: {.contents local="" depth="2"} :::

1. SMTP de integración (outboundMail)

Qué: Configuración SMTP almacenada en una integración específica bajo integration.config.outboundMail (panel de control: Conexión y ajustesCorreo saliente (SMTP)).

Quién recibe correo: Usuarios finales y flujos de negocio de esa integración exclusivamente, por ejemplo:

  • Crear respuesta del panel de control a mensajes entrantes (FORM / CONTACT_FORM).
  • Correo de bienvenida opcional después de una nueva suscripción de formulario cuando se configura una campaña ON_EVENT / SUBSCRIBER_CREATED.
  • Envío transaccional de un solo destinatario: POST …/webhooks/transactional/…/send de servidor a servidor (alcance transactional.send) --- consulta transactional-email{.interpreted-text role="doc"}.
  • Checkout por correo de mercado: correo de confirmación al comprador después de POST …/market/…/orders (mismo outboundMail de la integración MARKET propietaria del catálogo).

API: Rutas Bearer solo para propietarios para hacer PATCH a la configuración de integración / outboundMail y probar SMTP:

POST /api/v1/projects/{projectUid}/integrations/{integrationId}/outbound-mail/test

Tipos de integración compatibles con este panel y la ruta de prueba: FORM, CONTACT_FORM y MARKET.

Seguridad: Las contraseñas SMTP se almacenan cifradas (variable de entorno de la API MAIL_SMTP_ENCRYPTION_KEY). La API nunca devuelve texto cifrado o plano a los clientes; las respuestas pueden incluir solo hasSmtpPassword.

Sin respaldo: Si el SMTP de integración falta, es inválido o el envío falla, Mailoo no sustituye con el servicio de correo global. Crear respuesta del panel devuelve un error cuando SMTP no está configurado; los correos de bienvenida se omiten y se registran cuando SMTP no está disponible; los pedidos de mercado devuelven emailToCustomer.status: NOT_CONFIGURED cuando outboundMail no está establecido.

Requerido en el host de la API para cifrar contraseñas SMTP: MAIL_SMTP_ENCRYPTION_KEY.

2. SMTP del generador de ofertas (separado de outboundMail)

Qué: Configuración de correo por generador de ofertas en OfferGeneratorMailSettings (no integration.config.outboundMail).

Quién recibe correo: Usuarios que envían formularios del asistente (entrega al cliente) y dirección de notificación interna opcional configurada en el generador.

Por qué separado: El generador de ofertas puede usar marca, límites de envío u operadores diferentes al resto de la integración MARKET.

Esta versión no fusiona el SMTP del generador de ofertas con outboundMail de la integración.

3. SMTP global / de plataforma (GLOBAL_SMTP_*, GLOBAL_MAIL_FROM)

Qué: Variables de entorno solo en el host de la API.

Uso previsto: Reservado para notificaciones de operador / plataforma (facturación, alertas de seguridad, cumplimiento, futuro correo del sistema). No se usa para correo dirigido a suscriptores, confirmaciones a compradores de mercado ni entregas del generador de ofertas.

Comportamiento actual del producto: Ninguna funcionalidad visible para el usuario depende del SMTP global en esta versión; configúralo cuando introduzcas correo a nivel de plataforma.

Sin respaldo: El SMTP global nunca se sustituye cuando el SMTP de integración falla.

Correo saliente externo (sitios integradores)

Compatible: llamadas de servidor o BFF a las APIs de Mailoo que crean un mensaje saliente dentro de la integración y permiten que Mailoo envíe mediante outboundMail. Ejemplos:

  • Envío transaccional --- POST …/webhooks/transactional/…/send (alcance transactional.send): persiste Message, TransactionalSend, sincronización de suscriptor, seguimiento, webhooks de entrega opcionales. Consulta transactional-email{.interpreted-text role="doc"}.
  • Crear pedido de mercado --- correo de confirmación al comprador después de POST …/market/…/orders.

No compatible: tratar a Mailoo como un relay SMTP sin estado o envío silencioso sin registros de mensaje de Mailoo:

  • No integres host/usuario/contraseña SMTP de outboundMail en código del integrador ni en paquetes públicos del navegador.
  • No esperes una API de "enviar este MIME crudo ahora" sin ciclo de vida de Message / suscriptor / cancelación de suscripción.

Los integradores que necesiten control total sobre la infraestructura de entrega deben usar su propio servicio de correo en el backend. La ruta externa de Mailoo siempre es activar el procesamiento del lado de Mailoo (registros de auditoría, consentimiento, idempotencia), no exportar credenciales.

Correo de prueba del panel de control

En Conexión y ajustesCorreo saliente (SMTP), usa Enviar correo de prueba para verificar los valores actuales de los campos (no necesitas guardar primero). Mailoo envía un mensaje a tu correo de cuenta de Mailoo (el usuario con sesión iniciada). La prueba sola no persiste nada; guardar sigue usando Guardar configuración SMTP.

Formato de dirección de remitente (obligatorio): un correo simple (news@yourdomain.com) o nombre para mostrar más dirección entre ángulos (Newsletter <news@yourdomain.com>). Un nombre solo (p. ej. Consolieri Team) se rechaza con 400 al guardar y probar --- sin un addr-spec muchos receptores (incluyendo Gmail) rechazan con From header is missing.

Prueba verde ≠ bandeja de entrada: HTTP 200 / éxito en la UI significa que la submisión SMTP aceptó el mensaje. No garantiza que el MTA remoto lo entregó al buzón del destinatario. Los rebotes asíncronos después de la aceptación no se muestran en la respuesta de prueba.

El JSON de prueba exitosa incluye sentTo, y cuando está disponible messageId y smtpResponse.

Si al host de la API le falta MAIL_SMTP_ENCRYPTION_KEY y introduces una contraseña SMTP nueva en el formulario, guardar y probar devuelven 503 con un mensaje de configuración claro---establece la clave en la API (mismo valor en cada réplica), p. ej. openssl rand -base64 32.

API de propietario (opcional)

Igual que la prueba del panel: POST /api/v1/projects/{projectUid}/integrations/{integrationId}/outbound-mail/test con autenticación Bearer; cuerpo { "outboundMail": { … } } coincide con la forma del campo outboundMail del PATCH.