Ir al contenido

Postmark

Postmark se centra exclusivamente en el correo transaccional y es conocido por una entrega en la bandeja de entrada rápida y fiable. Separa el tráfico transaccional y el masivo en message streams, lo que protege la reputación de tus correos importantes.

Elige Postmark si lo que más te importa es la entregabilidad y la velocidad del correo transaccional (restablecimiento de contraseñas, recibos, confirmaciones de formularios) y no te importa que Postmark revise las cuentas nuevas antes de dejarlas enviar libremente. Postmark no permite el marketing en frío ni el envío a listas compradas. Consulta el resumen de los servicios para ver alternativas.

  • Una cuenta de Postmark y un server (el nombre que da Postmark a un proyecto), p. ej. «Website».
  • Un remitente verificado: una Sender Signature para una sola dirección o, mejor, un dominio verificado (Sender Signatures → Add Domain or Signature).
  • Aprobación de la cuenta antes de enviar a destinatarios fuera de tu propio dominio; consulta Sandbox y límites.
  • El Server API token de ese server (Servers → tu servidor → API Tokens). Un token de servidor solo puede enviar y leer los datos de su propio servidor: es la opción con menos privilegios. No uses el Account API token.
  1. Abre Servicios de correo → Añadir servicio → Postmark.
  2. Rellena los campos:
Campo Dónde encontrarlo Ejemplo
Token de Server API Servers → tu servidor → API Tokens a1b2c3d4-e5f6-7890-abcd-ef1234567890
Message stream Servers → tu servidor → Message Streams; usa un stream Transactional outbound
Usuario del webhook Opcional: el usuario de Basic auth que configuraste en el webhook de Postmark frontmail
Contraseña del webhook Opcional: la contraseña correspondiente s3cr3t-long-random
Máx. de correos por segundo Opcional; por defecto 10/s 10
  1. Haz clic en Verificar y guardar: Frontmail lee los datos del servidor con el token.
  2. El servicio se guarda cuando la comprobación es correcta. Las credenciales se cifran con cifrado de sobre de AWS KMS.

Después de añadir un dominio, Postmark te muestra dos registros para publicar:

; DKIM: el selector incluye una parte basada en la fecha; cópialo desde Postmark
20240101123456pm._domainkey.example.com. TXT "k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GN…"
; Return-Path personalizado: alinea SPF con tu dominio
pm-bounces.example.com. CNAME pm.mtasv.net.
; DMARC: primero supervisión
_dmarc.example.com. TXT "v=DMARC1; p=none; rua=mailto:dmarc@example.com"
  • El host DKIM tiene la forma <timestamp>pm._domainkey; copia siempre el valor exacto desde Postmark.
  • Con el CNAME del Return-Path apuntando a pm.mtasv.net, no necesitas añadir Postmark a tu registro SPF principal: SPF se comprueba en el subdominio del Return-Path, que gestiona Postmark.
  • Haz clic en Verify junto a cada registro en Postmark. Endurece DMARC a p=quarantine / p=reject cuando los informes estén limpios.

Postmark tiene un único endpoint de API (api.postmarkapp.com) y no hay región que elegir. Los datos se procesan en EE. UU.; revisa el DPA de Postmark si te importa que los datos se queden en la UE.

  • Pendiente de aprobación: una cuenta nueva solo puede enviar a direcciones del mismo dominio que el remitente verificado hasta que Postmark la aprueba. Los intentos de enviar a otras direcciones fallan con el código de error 412. Solicita la aprobación en el panel de Postmark; suele resolverse en un día laborable.
  • Modo de prueba: el token especial POSTMARK_API_TEST acepta mensajes sin enviarlos; útil para pruebas locales, pero Probar conexión de Frontmail lo rechazará porque no tiene ningún servidor detrás.
  • Plan gratuito para desarrolladores: 100 correos al mes.
  • Postmark mantiene su propia lista de destinatarios inactivos (rebotes permanentes, quejas) por stream; enviarles falla con el código 406.

Los webhooks de Postmark se configuran por message stream.

  1. Copia la URL del webhook de la página del servicio en Frontmail (botón de copiar):

    https://api.frontmail.dev/webhooks/providers/postmark/<token>
  2. En Postmark, abre Servers → tu servidor → el stream (p. ej. Default Transactional Stream) → Webhooks → Add webhook, pega la URL y selecciona los eventos:

Evento de Postmark Evento de Frontmail
Delivery delivered
Bounce – permanente (HardBounce, BadEmailAddress, ManuallyDeactivated) bounced: se añade a la lista de supresión
Bounce – temporal (SoftBounce, Transient, DnsError) se registra en el mensaje
Spam Complaint complained: se añade a la lista de supresión
Open opened (activa el seguimiento de aperturas en el stream)
Link Click clicked (activa el seguimiento de enlaces en el stream)
  1. Protege el webhook con Basic auth (recomendado): en el formulario del webhook, rellena Basic auth credentials (usuario + una contraseña aleatoria larga) e introduce los mismos valores en los campos Usuario del webhook / Contraseña del webhook del servicio en Frontmail.

Verificación de la firma: Postmark no firma los payloads de los webhooks. El token secreto de la URL identifica el servicio y, si configuras una contraseña del webhook, Frontmail rechaza cualquier solicitud sin las credenciales de Basic auth correctas. Usa el botón Send test de Postmark para comprobarlo.

Frontmail añade a cada mensaje una cabecera X-Frontmail-Message-Id para que los eventos se asocien al mensaje correcto.

  • auth: el servicio no funciona (token no válido, remitente sin confirmar, cuenta sin aprobar, stream desconocido). El servicio se marca como unhealthy; el propietario recibe un correo y un aviso en el panel. Si la plantilla tiene un servicio de respaldo, este toma el relevo; si no, se devuelve el crédito y el mensaje espera en la cola de correos retenidos como held_service_error y se envía automáticamente cuando arreglas el servicio (se vuelve a comprobar al guardar y en la comprobación de estado diaria).
  • permanent: este mensaje no se puede enviar (destinatario no válido o inactivo, error de validación). Servicio de respaldo si está configurado; si no, failed y se devuelve el crédito.
  • transient: 5xx, tiempos de espera agotados, 429. Se reintenta con espera exponencial; cuando se agotan los reintentos, failed y se devuelve el crédito.
Error de Postmark Clase Qué hacer
10 – Bad or missing Server API token (HTTP 401) auth Vuelve a copiar el token del Server (no el de la cuenta).
400 – Sender signature not defined for From address auth Verifica el dominio o la dirección From en Sender Signatures, o cambia el From de la plantilla.
401 – Sender signature not confirmed auth Haz clic en el enlace de confirmación que Postmark envió a la dirección del remitente.
412 – Account pending approval, recipients restricted to your domain auth Solicita la aprobación de la cuenta en Postmark.
1235 – Message stream not found auth Corrige el ID del Message stream (p. ej. outbound).
406 – Inactive recipient permanent La dirección rebotó o presentó una queja antes; Postmark la suprime. Reactívala en Postmark solo si estás seguro.
300 / 422 – Invalid email request / dirección no válida permanent Consulta destinatario no válido.
HTTP 429 / 500 / 503 transient Límite de velocidad o caída: Frontmail reintenta automáticamente.
  • Dominio verificado en Postmark (TXT de DKIM + CNAME de Return-Path pm.mtasv.net)
  • Registro DMARC publicado, empezando con p=none
  • Cuenta aprobada por Postmark
  • Token de API del Server (no el de la cuenta) introducido
  • Message stream = un stream transaccional (outbound)
  • Probar conexión funciona
  • Webhook en el stream con Delivery, Bounce, Spam Complaint (+ Open/Click)
  • Basic auth en el webhook y las mismas credenciales en Frontmail