Despliegue de señales para locales: Integración de PowerMTA

Pájaro

30 ago 2019

Correo electrónico

1 min read

Despliegue de señales para locales: Integración de PowerMTA

Puntos clave

    • Propósito: Esta guía explica cómo integrar PowerMTA 5.0+ con SparkPost Signals para transmitir datos de eventos y participación (rebotes, aperturas, clics, quejas de spam) desde MTAs locales directamente a la capa de análisis de SparkPost.

    • Configuración principal:

      • Agregue enable-signals true y defina su punto de ingestión de SparkPost (https://api.sparkpost.com/api/v1/ingest/events o el equivalente en la UE).

      • Utilice una clave API válida con permiso de “Incoming Events: Write”.

      • Especifique el customer-id, y opcionalmente configure dominios de seguimiento personalizados para mejorar la entregabilidad.

    • Configuración de seguimiento: El Engagement Tracking de PowerMTA inyecta automáticamente píxeles de apertura y clic en los correos electrónicos HTML. Puede deshabilitar el seguimiento por enlace con el atributo data-msys-clicktrack="0".

    • Informes selectivos: Signals puede habilitarse de forma global o limitarse a ciertos VirtualMTAs, pools, o dominios del remitente, permitiendo un control detallado de los datos.

    • Pruebas y verificación: Utilice el panel de integración de Signals y los registros de PowerMTA para confirmar la ingesta de eventos y seguir Health Scores, rebotes y métricas de participación en tiempo real.

    • Ajuste de entregabilidad:

      • Utilice nombres significativos para VirtualMTA y trabajos, ya que estos se asignan directamente a IP Pools y IDs de campaña en los informes de SparkPost.

      • Configure la firma DKIM, la aplicación de TLS y las reglas de retransmisión adecuadas para evitar inyecciones no autorizadas.

    • Configuración avanzada: El artículo también incluye fragmentos listos para usar para manejo de rebotes FBL y fuera de banda, inyección SMTP autenticada (puerto 587) y código Python para sanitizar encabezados X-Job para compatibilidad.

Destacados de Q&A

  • ¿Qué es lo que realmente hace la integración de Signals?

    Carga automáticamente los eventos de mensajes de PowerMTA (inyección, entrega, rebote, interacción) en tu cuenta de SparkPost para que puedas acceder a paneles como Health Score, informes de retraso y monitoreo de trampas de spam.

  • ¿Por qué integrar Signals con un MTA local?

    Muchas empresas gestionan infraestructura de correo autoalojada por razones de cumplimiento, pero aún desean las capacidades de análisis y monitoreo de SparkPost. Signals cierra esa brecha sin migrar la entrega de correo a la nube.

  • ¿Cómo puedo verificar que los eventos están fluyendo a SparkPost?

    Revise los registros de PowerMTA para Signals: Transferred ... successfully y confirme las entradas de eventos bajo Signals → Events Search en SparkPost.

  • ¿Puedo usar mi propio dominio de seguimiento?

    Sí — configure un CNAME como track.mycompany.com → pmta.spgo.io (US) o pmta.eu.spgo.io (EU), luego regístrelo y verifíquelo en SparkPost para la consistencia de la marca y la reputación.

  • ¿Qué hay sobre la privacidad de los datos o el uso del disco?

    La directiva min-free-space elimina automáticamente los archivos de eventos JSON antiguos cuando el espacio en disco se reduce, evitando la acumulación local de datos de telemetría.

  • ¿Cuál es la “bonus feature” al final?

    Una utilidad de expresiones regulares de Python (pmtaSafeJobID) que garantiza que los nombres de campañas/trabajos usen solo caracteres válidos en el formato de encabezado X-Job de PowerMTA, reemplazando los caracteres no seguros con guiones bajos.

Vamos a profundizar en los detalles de la configuración de PowerMTA para SparkPost Signals. Vas a necesitar:

  • Un host para ejecutar la última versión de PowerMTA – ya sea una máquina nueva o existente

  • Una cuenta de SparkPost con permiso de clave API para “Incoming Events: Write” como se describe aquí

Configuraremos PowerMTA para transmitir eventos a tu cuenta de SparkPost, luego podrás usar lo siguiente:

Vamos a profundizar en los detalles de la configuración de PowerMTA para SparkPost Signals. Vas a necesitar:

  • Un host para ejecutar la última versión de PowerMTA – ya sea una máquina nueva o existente

  • Una cuenta de SparkPost con permiso de clave API para “Incoming Events: Write” como se describe aquí

Configuraremos PowerMTA para transmitir eventos a tu cuenta de SparkPost, luego podrás usar lo siguiente:

Vamos a profundizar en los detalles de la configuración de PowerMTA para SparkPost Signals. Vas a necesitar:

  • Un host para ejecutar la última versión de PowerMTA – ya sea una máquina nueva o existente

  • Una cuenta de SparkPost con permiso de clave API para “Incoming Events: Write” como se describe aquí

Configuraremos PowerMTA para transmitir eventos a tu cuenta de SparkPost, luego podrás usar lo siguiente:

Descripción general de la instalación y configuración

Primero, instale (o actualice) a PowerMTA 5.0 r4 o posterior, siguiendo las instrucciones habituales de instalación de v5.0 que son bastante sencillas. Luego trabajaremos a través de los siguientes pasos:

  • Configurar el conector PowerMTA a SparkPost Signals

  • Configurar el seguimiento de compromiso con un dominio de seguimiento personalizado

  • Seleccionar qué flujos de tráfico de PowerMTA informar a Signals

  • Probar que sus eventos están llegando a Signals

  • Revisar cómo utilizar nombres significativos que se muestren bien en los informes.

También cubriremos los otros aspectos específicos de configuración de PowerMTA utilizados en nuestra demo de Signals:

  • Eventos FBL (quejas de spam) y rebotes remotos (out-of-band)

  • Configuración de inyección, incluyendo DKIM

  • Configuración de FBL y OOB

  • Configuración y nombres de VirtualMTA (y cómo esto aparece en sus informes de SparkPost Signals)

Finalmente, hay una "función adicional" con código para asegurar que los nombres de sus campañas sean compatibles con las convenciones de nombres X-Job de PowerMTA.

Primero, instale (o actualice) a PowerMTA 5.0 r4 o posterior, siguiendo las instrucciones habituales de instalación de v5.0 que son bastante sencillas. Luego trabajaremos a través de los siguientes pasos:

  • Configurar el conector PowerMTA a SparkPost Signals

  • Configurar el seguimiento de compromiso con un dominio de seguimiento personalizado

  • Seleccionar qué flujos de tráfico de PowerMTA informar a Signals

  • Probar que sus eventos están llegando a Signals

  • Revisar cómo utilizar nombres significativos que se muestren bien en los informes.

También cubriremos los otros aspectos específicos de configuración de PowerMTA utilizados en nuestra demo de Signals:

  • Eventos FBL (quejas de spam) y rebotes remotos (out-of-band)

  • Configuración de inyección, incluyendo DKIM

  • Configuración de FBL y OOB

  • Configuración y nombres de VirtualMTA (y cómo esto aparece en sus informes de SparkPost Signals)

Finalmente, hay una "función adicional" con código para asegurar que los nombres de sus campañas sean compatibles con las convenciones de nombres X-Job de PowerMTA.

Primero, instale (o actualice) a PowerMTA 5.0 r4 o posterior, siguiendo las instrucciones habituales de instalación de v5.0 que son bastante sencillas. Luego trabajaremos a través de los siguientes pasos:

  • Configurar el conector PowerMTA a SparkPost Signals

  • Configurar el seguimiento de compromiso con un dominio de seguimiento personalizado

  • Seleccionar qué flujos de tráfico de PowerMTA informar a Signals

  • Probar que sus eventos están llegando a Signals

  • Revisar cómo utilizar nombres significativos que se muestren bien en los informes.

También cubriremos los otros aspectos específicos de configuración de PowerMTA utilizados en nuestra demo de Signals:

  • Eventos FBL (quejas de spam) y rebotes remotos (out-of-band)

  • Configuración de inyección, incluyendo DKIM

  • Configuración de FBL y OOB

  • Configuración y nombres de VirtualMTA (y cómo esto aparece en sus informes de SparkPost Signals)

Finalmente, hay una "función adicional" con código para asegurar que los nombres de sus campañas sean compatibles con las convenciones de nombres X-Job de PowerMTA.

Configuración de FBL y OOB

Ahora .. finalmente .. declaramos qué dominios específicos están abiertos para rebote remoto y respuestas de FBL. No queremos redirigir esos a ningún lugar (para prevenir ataques de retrodispersión), solo procesar internamente esas respuestas.

# # Enable Bounce and FBL processing on specific domains #
relay-domain pmta.signalsdemo.trymsys.net
relay-domain bounces.pmta.signalsdemo.trymsys.net
relay-domain fbl.pmta.signalsdemo.trymsys.net

<bounce-processor>
deliver-unmatched-email no
deliver-matched-email no
<address-list>
domain pmta.signalsdemo.trymsys.net
domain bounces.pmta.signalsdemo.trymsys.net
</address-list>
</bounce-processor>

<feedback-loop-processor>
deliver-unmatched-email no
deliver-matched-email no
<address-list>
domain fbl.pmta.signalsdemo.trymsys.net
</address-list>
</feedback-loop-processor>

Puedes ver que configuré dos dominios de rebote, ya que estaba experimentando con el uso/no uso de la regla de reescritura mfrom. 

El dominio FBL generalmente se registra con servicios externos como Microsoft SNDS; consulte este artículo para más información. Para esta demostración, los FBLs vendrán del Bouncy Sink, por lo que no hay necesidad de registrarse.

Ahora .. finalmente .. declaramos qué dominios específicos están abiertos para rebote remoto y respuestas de FBL. No queremos redirigir esos a ningún lugar (para prevenir ataques de retrodispersión), solo procesar internamente esas respuestas.

# # Enable Bounce and FBL processing on specific domains #
relay-domain pmta.signalsdemo.trymsys.net
relay-domain bounces.pmta.signalsdemo.trymsys.net
relay-domain fbl.pmta.signalsdemo.trymsys.net

<bounce-processor>
deliver-unmatched-email no
deliver-matched-email no
<address-list>
domain pmta.signalsdemo.trymsys.net
domain bounces.pmta.signalsdemo.trymsys.net
</address-list>
</bounce-processor>

<feedback-loop-processor>
deliver-unmatched-email no
deliver-matched-email no
<address-list>
domain fbl.pmta.signalsdemo.trymsys.net
</address-list>
</feedback-loop-processor>

Puedes ver que configuré dos dominios de rebote, ya que estaba experimentando con el uso/no uso de la regla de reescritura mfrom. 

El dominio FBL generalmente se registra con servicios externos como Microsoft SNDS; consulte este artículo para más información. Para esta demostración, los FBLs vendrán del Bouncy Sink, por lo que no hay necesidad de registrarse.

Ahora .. finalmente .. declaramos qué dominios específicos están abiertos para rebote remoto y respuestas de FBL. No queremos redirigir esos a ningún lugar (para prevenir ataques de retrodispersión), solo procesar internamente esas respuestas.

# # Enable Bounce and FBL processing on specific domains #
relay-domain pmta.signalsdemo.trymsys.net
relay-domain bounces.pmta.signalsdemo.trymsys.net
relay-domain fbl.pmta.signalsdemo.trymsys.net

<bounce-processor>
deliver-unmatched-email no
deliver-matched-email no
<address-list>
domain pmta.signalsdemo.trymsys.net
domain bounces.pmta.signalsdemo.trymsys.net
</address-list>
</bounce-processor>

<feedback-loop-processor>
deliver-unmatched-email no
deliver-matched-email no
<address-list>
domain fbl.pmta.signalsdemo.trymsys.net
</address-list>
</feedback-loop-processor>

Puedes ver que configuré dos dominios de rebote, ya que estaba experimentando con el uso/no uso de la regla de reescritura mfrom. 

El dominio FBL generalmente se registra con servicios externos como Microsoft SNDS; consulte este artículo para más información. Para esta demostración, los FBLs vendrán del Bouncy Sink, por lo que no hay necesidad de registrarse.

Configurar PowerMTA connector

La configuración de Signals se describe en la sección 10.1 de la Guía del Usuario 5.0. Aquí comenzaremos con el “Caso de Uso #2”, que habilita Signals para todo el tráfico desde este host de PowerMTA, y habilitaremos el seguimiento de compromiso de SparkPost.

# # SparkPost Signals #
<signals>
api-key ##my ingest API key here##
upload-url https://api.sparkpost.com/api/v1/ingest/events
log-verbose true
min-free-space 1G
engagement-tracking sparkpost   # this turns on the open and click tracking in PowerMTA
customer-id 123                 # Your SparkPost account number here
</signals>

enable-signals true


Esto es lo que hace cada atributo:

api-key

Esto es único para tu cuenta de SparkPost, es el valor que obtuviste de SparkPost anteriormente.


upload-url

Esto debe coincidir con la dirección de tu servicio SparkPost API, ya sea que esté en EE.UU. o en la UE. Para más información, consulta aquí. Los valores habituales son:

SparkPost (EE.UU.): https://api.sparkpost.com/api/v1/ingest/events

SparkPost UE:    https://api.eu.sparkpost.com/api/v1/ingest/events


log-verbose

Esta directiva es opcional y cuando está habilitada, proporciona un poco más de información en el archivo pmta.log, lo cual puede ser útil durante la configuración para confirmar que todo está funcionando correctamente. Cada minuto, incluso cuando no haya tráfico, verás:

2019-07-26 11:47:57 Signals: Discovered 0 files


Con tráfico, verás algo como:

2019-07-26 11:50:57 Signals: Discovered sp1-0000000000003FBD.json
2019-07-26 11:50:57 Signals: Transferred sp1-0000000000003FBD.json successfully.
2019-07-26 11:50:57 Signals: Discovered 1 file, transferred 1 file successfully


min-free-space

Esto le indica a PowerMTA el umbral de espacio en disco a partir del cual debería comenzar a eliminar los archivos de eventos JSON de SparkPost más antiguos para hacer espacio para nuevos archivos cuando el espacio en disco se esté agotando.


enable-signals

Esto le indica a PowerMTA que cargue a Signals, en este caso de manera global para todo el tráfico (más información aquí, para v5.0). Puedes ser más selectivo sobre qué flujos de tráfico subir si lo deseas.


También puedes marcar un tráfico particular de PowerMTA para que se reporte como perteneciente a una subcuenta de SparkPost – esta es otra forma de distinguir un flujo de tráfico particular de otro.


engagement-tracking, customer-id
La solución de Seguimiento de Compromiso de PowerMTA por defecto utiliza el dominio de seguimiento para el servicio alojado por SparkPost en EE.UU. Especificas tu ID de cliente numérico de SparkPost; aquí tienes instrucciones para encontrarlo.


tracking-domain

Para cuentas de SparkPost en la UE, añade la siguiente línea:

tracking-domain pmta.eu.spgo.io # este es el endpoint para SparkPost EU


Dominio de seguimiento personalizado

Si prefieres usar tu propio dominio de seguimiento (esto es mejor desde el punto de vista de la entregabilidad), haz lo siguiente:

  • Crea un dominio de seguimiento con tu proveedor de DNS creando un registro CNAME. Esto usualmente será un subdominio de tu dominio de nivel superior, por ejemplo track.mycompany.com .


track.mycompany.com CNAME pmta.spgo.io      # if you have a SparkPost US account
track.mycompany.com CNAME pmta.eu.spgo.io   # if you have a SparkPost EU account

También puedes usar dominios de seguimiento HTTPS, aunque esto es más complicado (consulta los pasos de configuración de SparkPost para dominios de seguimiento HTTPS).

  • Registra el dominio de seguimiento en tu cuenta de SparkPost, y verifícalo. Espera unos minutos antes de intentar esto, para permitir que los cambios de DNS se propaguen a través de Internet, dependiendo de tu proveedor de DNS.

  • Configura PowerMTA para usar ese dominio en lugar del predeterminado, con

tracking-domain yourdomain.com # Coloca tu propio dominio aquí

Puedes verificar que tus correos electrónicos entregados tienen “píxeles abiertos” añadidos y los enlaces envueltos, al observar los internos del correo (en Gmail, usa el menú superior derecho y elige “Mostrar Original”).

Show original option highlighted


Notarás los píxeles abiertos al inicio y final del HTML en el correo electrónico. Cada enlace HTML también se cambia para tener REF apuntando al dominio de seguimiento.

HTML code highlighted


Eso es todo lo que necesitas para hacer funcionar SparkPost Signals con el Seguimiento de Compromiso incorporado de PowerMTA.

Prevenir que enlaces específicos en tu correo electrónico HTML sean rastreados

Puedes evitar que PowerMTA rastree enlaces específicos configurando el atributo personalizado data-msys-clicktrack  en “0”  :

<a href="#" data-msys-clicktrack="0">Example</a>

PowerMTA no envolverá el enlace. También eliminará ese atributo antes de transmitir el mensaje a tu destinatario.

La configuración de Signals se describe en la sección 10.1 de la Guía del Usuario 5.0. Aquí comenzaremos con el “Caso de Uso #2”, que habilita Signals para todo el tráfico desde este host de PowerMTA, y habilitaremos el seguimiento de compromiso de SparkPost.

# # SparkPost Signals #
<signals>
api-key ##my ingest API key here##
upload-url https://api.sparkpost.com/api/v1/ingest/events
log-verbose true
min-free-space 1G
engagement-tracking sparkpost   # this turns on the open and click tracking in PowerMTA
customer-id 123                 # Your SparkPost account number here
</signals>

enable-signals true


Esto es lo que hace cada atributo:

api-key

Esto es único para tu cuenta de SparkPost, es el valor que obtuviste de SparkPost anteriormente.


upload-url

Esto debe coincidir con la dirección de tu servicio SparkPost API, ya sea que esté en EE.UU. o en la UE. Para más información, consulta aquí. Los valores habituales son:

SparkPost (EE.UU.): https://api.sparkpost.com/api/v1/ingest/events

SparkPost UE:    https://api.eu.sparkpost.com/api/v1/ingest/events


log-verbose

Esta directiva es opcional y cuando está habilitada, proporciona un poco más de información en el archivo pmta.log, lo cual puede ser útil durante la configuración para confirmar que todo está funcionando correctamente. Cada minuto, incluso cuando no haya tráfico, verás:

2019-07-26 11:47:57 Signals: Discovered 0 files


Con tráfico, verás algo como:

2019-07-26 11:50:57 Signals: Discovered sp1-0000000000003FBD.json
2019-07-26 11:50:57 Signals: Transferred sp1-0000000000003FBD.json successfully.
2019-07-26 11:50:57 Signals: Discovered 1 file, transferred 1 file successfully


min-free-space

Esto le indica a PowerMTA el umbral de espacio en disco a partir del cual debería comenzar a eliminar los archivos de eventos JSON de SparkPost más antiguos para hacer espacio para nuevos archivos cuando el espacio en disco se esté agotando.


enable-signals

Esto le indica a PowerMTA que cargue a Signals, en este caso de manera global para todo el tráfico (más información aquí, para v5.0). Puedes ser más selectivo sobre qué flujos de tráfico subir si lo deseas.


También puedes marcar un tráfico particular de PowerMTA para que se reporte como perteneciente a una subcuenta de SparkPost – esta es otra forma de distinguir un flujo de tráfico particular de otro.


engagement-tracking, customer-id
La solución de Seguimiento de Compromiso de PowerMTA por defecto utiliza el dominio de seguimiento para el servicio alojado por SparkPost en EE.UU. Especificas tu ID de cliente numérico de SparkPost; aquí tienes instrucciones para encontrarlo.


tracking-domain

Para cuentas de SparkPost en la UE, añade la siguiente línea:

tracking-domain pmta.eu.spgo.io # este es el endpoint para SparkPost EU


Dominio de seguimiento personalizado

Si prefieres usar tu propio dominio de seguimiento (esto es mejor desde el punto de vista de la entregabilidad), haz lo siguiente:

  • Crea un dominio de seguimiento con tu proveedor de DNS creando un registro CNAME. Esto usualmente será un subdominio de tu dominio de nivel superior, por ejemplo track.mycompany.com .


track.mycompany.com CNAME pmta.spgo.io      # if you have a SparkPost US account
track.mycompany.com CNAME pmta.eu.spgo.io   # if you have a SparkPost EU account

También puedes usar dominios de seguimiento HTTPS, aunque esto es más complicado (consulta los pasos de configuración de SparkPost para dominios de seguimiento HTTPS).

  • Registra el dominio de seguimiento en tu cuenta de SparkPost, y verifícalo. Espera unos minutos antes de intentar esto, para permitir que los cambios de DNS se propaguen a través de Internet, dependiendo de tu proveedor de DNS.

  • Configura PowerMTA para usar ese dominio en lugar del predeterminado, con

tracking-domain yourdomain.com # Coloca tu propio dominio aquí

Puedes verificar que tus correos electrónicos entregados tienen “píxeles abiertos” añadidos y los enlaces envueltos, al observar los internos del correo (en Gmail, usa el menú superior derecho y elige “Mostrar Original”).

Show original option highlighted


Notarás los píxeles abiertos al inicio y final del HTML en el correo electrónico. Cada enlace HTML también se cambia para tener REF apuntando al dominio de seguimiento.

HTML code highlighted


Eso es todo lo que necesitas para hacer funcionar SparkPost Signals con el Seguimiento de Compromiso incorporado de PowerMTA.

Prevenir que enlaces específicos en tu correo electrónico HTML sean rastreados

Puedes evitar que PowerMTA rastree enlaces específicos configurando el atributo personalizado data-msys-clicktrack  en “0”  :

<a href="#" data-msys-clicktrack="0">Example</a>

PowerMTA no envolverá el enlace. También eliminará ese atributo antes de transmitir el mensaje a tu destinatario.

La configuración de Signals se describe en la sección 10.1 de la Guía del Usuario 5.0. Aquí comenzaremos con el “Caso de Uso #2”, que habilita Signals para todo el tráfico desde este host de PowerMTA, y habilitaremos el seguimiento de compromiso de SparkPost.

# # SparkPost Signals #
<signals>
api-key ##my ingest API key here##
upload-url https://api.sparkpost.com/api/v1/ingest/events
log-verbose true
min-free-space 1G
engagement-tracking sparkpost   # this turns on the open and click tracking in PowerMTA
customer-id 123                 # Your SparkPost account number here
</signals>

enable-signals true


Esto es lo que hace cada atributo:

api-key

Esto es único para tu cuenta de SparkPost, es el valor que obtuviste de SparkPost anteriormente.


upload-url

Esto debe coincidir con la dirección de tu servicio SparkPost API, ya sea que esté en EE.UU. o en la UE. Para más información, consulta aquí. Los valores habituales son:

SparkPost (EE.UU.): https://api.sparkpost.com/api/v1/ingest/events

SparkPost UE:    https://api.eu.sparkpost.com/api/v1/ingest/events


log-verbose

Esta directiva es opcional y cuando está habilitada, proporciona un poco más de información en el archivo pmta.log, lo cual puede ser útil durante la configuración para confirmar que todo está funcionando correctamente. Cada minuto, incluso cuando no haya tráfico, verás:

2019-07-26 11:47:57 Signals: Discovered 0 files


Con tráfico, verás algo como:

2019-07-26 11:50:57 Signals: Discovered sp1-0000000000003FBD.json
2019-07-26 11:50:57 Signals: Transferred sp1-0000000000003FBD.json successfully.
2019-07-26 11:50:57 Signals: Discovered 1 file, transferred 1 file successfully


min-free-space

Esto le indica a PowerMTA el umbral de espacio en disco a partir del cual debería comenzar a eliminar los archivos de eventos JSON de SparkPost más antiguos para hacer espacio para nuevos archivos cuando el espacio en disco se esté agotando.


enable-signals

Esto le indica a PowerMTA que cargue a Signals, en este caso de manera global para todo el tráfico (más información aquí, para v5.0). Puedes ser más selectivo sobre qué flujos de tráfico subir si lo deseas.


También puedes marcar un tráfico particular de PowerMTA para que se reporte como perteneciente a una subcuenta de SparkPost – esta es otra forma de distinguir un flujo de tráfico particular de otro.


engagement-tracking, customer-id
La solución de Seguimiento de Compromiso de PowerMTA por defecto utiliza el dominio de seguimiento para el servicio alojado por SparkPost en EE.UU. Especificas tu ID de cliente numérico de SparkPost; aquí tienes instrucciones para encontrarlo.


tracking-domain

Para cuentas de SparkPost en la UE, añade la siguiente línea:

tracking-domain pmta.eu.spgo.io # este es el endpoint para SparkPost EU


Dominio de seguimiento personalizado

Si prefieres usar tu propio dominio de seguimiento (esto es mejor desde el punto de vista de la entregabilidad), haz lo siguiente:

  • Crea un dominio de seguimiento con tu proveedor de DNS creando un registro CNAME. Esto usualmente será un subdominio de tu dominio de nivel superior, por ejemplo track.mycompany.com .


track.mycompany.com CNAME pmta.spgo.io      # if you have a SparkPost US account
track.mycompany.com CNAME pmta.eu.spgo.io   # if you have a SparkPost EU account

También puedes usar dominios de seguimiento HTTPS, aunque esto es más complicado (consulta los pasos de configuración de SparkPost para dominios de seguimiento HTTPS).

  • Registra el dominio de seguimiento en tu cuenta de SparkPost, y verifícalo. Espera unos minutos antes de intentar esto, para permitir que los cambios de DNS se propaguen a través de Internet, dependiendo de tu proveedor de DNS.

  • Configura PowerMTA para usar ese dominio en lugar del predeterminado, con

tracking-domain yourdomain.com # Coloca tu propio dominio aquí

Puedes verificar que tus correos electrónicos entregados tienen “píxeles abiertos” añadidos y los enlaces envueltos, al observar los internos del correo (en Gmail, usa el menú superior derecho y elige “Mostrar Original”).

Show original option highlighted


Notarás los píxeles abiertos al inicio y final del HTML en el correo electrónico. Cada enlace HTML también se cambia para tener REF apuntando al dominio de seguimiento.

HTML code highlighted


Eso es todo lo que necesitas para hacer funcionar SparkPost Signals con el Seguimiento de Compromiso incorporado de PowerMTA.

Prevenir que enlaces específicos en tu correo electrónico HTML sean rastreados

Puedes evitar que PowerMTA rastree enlaces específicos configurando el atributo personalizado data-msys-clicktrack  en “0”  :

<a href="#" data-msys-clicktrack="0">Example</a>

PowerMTA no envolverá el enlace. También eliminará ese atributo antes de transmitir el mensaje a tu destinatario.

Seleccione qué flujos de tráfico de PowerMTA informar a Signals

Puede seleccionar Signals para que estén activos:

  • Globalmente (esto es lo que usamos en el ejemplo anterior)

  • Para algunos MTAs virtuales y no otros

  • Para algunos grupos de MTAs virtuales y no otros

  • Para direcciones específicas de "Sender" o "From" retransmitidas por PowerMTA, en combinación con las selecciones de MTA virtual / grupo de MTA virtual

Ámbito

Qué se reporta a Signals

Cuándo usarlo

Global

Todo el tráfico desde el host PowerMTA

Despliegues simples donde todo el tráfico debe alimentar a SparkPost Signals.

VirtualMTA

Tráfico solo de VirtualMTAs seleccionados

Cuando desea vistas de informes separadas para diferentes IPs o tipos de tráfico.

Grupo MTA virtual

Tráfico de grupos seleccionados de MTAs virtuales

Cuando agrupa IPs en grupos y desea informes a nivel de grupo.

Sender / From domain

Mensajes de remitente específico o dominios de "From"

Cuando necesita informes por cliente o por marca dentro de la misma infraestructura.

Esta configuración es muy potente y se ilustra a través de una serie de ejemplos de casos de uso (v5.0) en la Guía del Usuario.

Puede seleccionar Signals para que estén activos:

  • Globalmente (esto es lo que usamos en el ejemplo anterior)

  • Para algunos MTAs virtuales y no otros

  • Para algunos grupos de MTAs virtuales y no otros

  • Para direcciones específicas de "Sender" o "From" retransmitidas por PowerMTA, en combinación con las selecciones de MTA virtual / grupo de MTA virtual

Ámbito

Qué se reporta a Signals

Cuándo usarlo

Global

Todo el tráfico desde el host PowerMTA

Despliegues simples donde todo el tráfico debe alimentar a SparkPost Signals.

VirtualMTA

Tráfico solo de VirtualMTAs seleccionados

Cuando desea vistas de informes separadas para diferentes IPs o tipos de tráfico.

Grupo MTA virtual

Tráfico de grupos seleccionados de MTAs virtuales

Cuando agrupa IPs en grupos y desea informes a nivel de grupo.

Sender / From domain

Mensajes de remitente específico o dominios de "From"

Cuando necesita informes por cliente o por marca dentro de la misma infraestructura.

Esta configuración es muy potente y se ilustra a través de una serie de ejemplos de casos de uso (v5.0) en la Guía del Usuario.

Puede seleccionar Signals para que estén activos:

  • Globalmente (esto es lo que usamos en el ejemplo anterior)

  • Para algunos MTAs virtuales y no otros

  • Para algunos grupos de MTAs virtuales y no otros

  • Para direcciones específicas de "Sender" o "From" retransmitidas por PowerMTA, en combinación con las selecciones de MTA virtual / grupo de MTA virtual

Ámbito

Qué se reporta a Signals

Cuándo usarlo

Global

Todo el tráfico desde el host PowerMTA

Despliegues simples donde todo el tráfico debe alimentar a SparkPost Signals.

VirtualMTA

Tráfico solo de VirtualMTAs seleccionados

Cuando desea vistas de informes separadas para diferentes IPs o tipos de tráfico.

Grupo MTA virtual

Tráfico de grupos seleccionados de MTAs virtuales

Cuando agrupa IPs en grupos y desea informes a nivel de grupo.

Sender / From domain

Mensajes de remitente específico o dominios de "From"

Cuando necesita informes por cliente o por marca dentro de la misma infraestructura.

Esta configuración es muy potente y se ilustra a través de una serie de ejemplos de casos de uso (v5.0) en la Guía del Usuario.

Probando que tus eventos están alcanzando Signals

Aquí tienes una vista de SparkPost Signals, conectado a PowerMTA. Puedes ver que el puntaje de salud está variando.

Health score dashboard


Los nombres de las Campaign están disponibles como facetas de informes, junto con Subaccount, IP Pool, Mailbox Provider, y Sending Domain.

Además de mirar los registros de PowerMTA, puedes verificar que los datos de eventos están llegando a SparkPost mirando la pantalla de Signals Integration.

Signals integration screen

En tu pantalla de SparkPost Events Search, deberías ver los eventos aparecer en unos minutos. Estos incluirán Injection y Delivery events, así como Bounce, y potencialmente Out-of-Band Bounce y Spam Complaint events, si ya has configurado PowerMTA para manejarlos por ti.
Si tienes Engagement Tracking habilitado, también verás open, initial_open, y click  events.

Aquí tienes una vista de SparkPost Signals, conectado a PowerMTA. Puedes ver que el puntaje de salud está variando.

Health score dashboard


Los nombres de las Campaign están disponibles como facetas de informes, junto con Subaccount, IP Pool, Mailbox Provider, y Sending Domain.

Además de mirar los registros de PowerMTA, puedes verificar que los datos de eventos están llegando a SparkPost mirando la pantalla de Signals Integration.

Signals integration screen

En tu pantalla de SparkPost Events Search, deberías ver los eventos aparecer en unos minutos. Estos incluirán Injection y Delivery events, así como Bounce, y potencialmente Out-of-Band Bounce y Spam Complaint events, si ya has configurado PowerMTA para manejarlos por ti.
Si tienes Engagement Tracking habilitado, también verás open, initial_open, y click  events.

Aquí tienes una vista de SparkPost Signals, conectado a PowerMTA. Puedes ver que el puntaje de salud está variando.

Health score dashboard


Los nombres de las Campaign están disponibles como facetas de informes, junto con Subaccount, IP Pool, Mailbox Provider, y Sending Domain.

Además de mirar los registros de PowerMTA, puedes verificar que los datos de eventos están llegando a SparkPost mirando la pantalla de Signals Integration.

Signals integration screen

En tu pantalla de SparkPost Events Search, deberías ver los eventos aparecer en unos minutos. Estos incluirán Injection y Delivery events, así como Bounce, y potencialmente Out-of-Band Bounce y Spam Complaint events, si ya has configurado PowerMTA para manejarlos por ti.
Si tienes Engagement Tracking habilitado, también verás open, initial_open, y click  events.

Usando nombres significativos que se muestren bien en el informe

Configurar los nombres de los PowerMTA VirtualMTA Pool y los nombres de los trabajos para que sean significativos y fáciles de leer para los humanos vale la pena hacerlo. Estos aparecen directamente en tus facetas de SparkPost Signals y en el informe de resumen.

Como se mencionó anteriormente, no necesitas crear estos pools en tu cuenta de SparkPost. SparkPost los recoge de la configuración de tu PowerMTA.

Así es como los términos de configuración de PowerMTA se traducen a términos de SparkPost.

Término PowerMTA Término SparkPost Reports / SignalsDominio del destinatario

(domain portion of “rcpt” field in Accounting file).Recipient Domain
The domain portion of the “Sender” or “From” header in the message relayed by PowerMTA.
  
(domain portion of “orig” in Accounting file).Sending Domain
VirtualMTA (name)—VirtualMTA Pool (name)
  
(“vmtaPool” in accounting file)IP Pool (name)
smtp-source-host a.b.c.d
  
(“dlvSourceIp” in accounting file)Sending IP a.b.c.d
Job (name)
  
(“jobId” in accounting file)Campaign ID (name)—Template (name)
“Subaccount” is not a native PowerMTA concept


Sin embargo, PowerMTA puede etiquetar virtualMTAs, virtual MTA Pools, o dominios de Sender-or-From con un ID de subcuenta para fines de informe en SparkPost.

Subaccount ID (number)
FBL (event)
Spam Complaint (event)
Remote Bounce (event)
Out-of-Band bounce (event)

Configurar al menos una dirección smtp-source-host también permite a SparkPost identificar correctamente la dirección IP de envío para que aparezca en los eventos de Inyección y Entrega, así como en la vista del informe de resumen.

Los nombres de los trabajos se establecen en PowerMTA a través de un encabezado en el mensaje inyectado. Además de habilitar el control individual de trabajos (pausa/reanudación, etc.), que es útil en sí mismo, PowerMTA pasa los nombres a través de SparkPost Signals reportando como “campaign ID”. Ver Guía del Usuario v5.0 sección 12.8 “Tracking a campaign in PowerMTA with a JobID”.

Hay algunas cosas que debes tener en cuenta con respecto a la nomenclatura de trabajos. Mientras que SparkPost (con formato JSON, y escape de JSON) permite caracteres como <ESPACIO>  en los nombres de campaña, los encabezados de correo son más restrictivos. Los caracteres válidos permitidos en el encabezado X-Job  son:

A-Za-z0-9!#$%&'()*+,-./:;<=>?@[\]^_{|}~ 

En otras palabras, los caracteres no permitidos incluyen <ESPACIO>, comillas dobles “  y comillas invertidas `. Si estás acostumbrado a trabajar con nombres X-Job, esto no te sorprenderá, y los nombres de tus campaign ID “simplemente funcionarán” en el informe de SparkPost. Si, como yo, aprendiste SparkPost primero, podrías querer una herramienta para asegurar que tus valores X-Job sean seguros; ver la característica adicional al final de este artículo.

Término PowerMTA

Término SparkPost Signals

VirtualMTA

IP Pool

VirtualMTA Pool

IP Pool (agrupado)

Job Name (X-Job header)

Campaign ID

smtp-source-host

Dirección IP de envío

Dominio Bounce

Identificación del dominio de envío

Dominio del remitente/De

Subaccount / Informe a nivel de dominio

Configurar los nombres de los PowerMTA VirtualMTA Pool y los nombres de los trabajos para que sean significativos y fáciles de leer para los humanos vale la pena hacerlo. Estos aparecen directamente en tus facetas de SparkPost Signals y en el informe de resumen.

Como se mencionó anteriormente, no necesitas crear estos pools en tu cuenta de SparkPost. SparkPost los recoge de la configuración de tu PowerMTA.

Así es como los términos de configuración de PowerMTA se traducen a términos de SparkPost.

Término PowerMTA Término SparkPost Reports / SignalsDominio del destinatario

(domain portion of “rcpt” field in Accounting file).Recipient Domain
The domain portion of the “Sender” or “From” header in the message relayed by PowerMTA.
  
(domain portion of “orig” in Accounting file).Sending Domain
VirtualMTA (name)—VirtualMTA Pool (name)
  
(“vmtaPool” in accounting file)IP Pool (name)
smtp-source-host a.b.c.d
  
(“dlvSourceIp” in accounting file)Sending IP a.b.c.d
Job (name)
  
(“jobId” in accounting file)Campaign ID (name)—Template (name)
“Subaccount” is not a native PowerMTA concept


Sin embargo, PowerMTA puede etiquetar virtualMTAs, virtual MTA Pools, o dominios de Sender-or-From con un ID de subcuenta para fines de informe en SparkPost.

Subaccount ID (number)
FBL (event)
Spam Complaint (event)
Remote Bounce (event)
Out-of-Band bounce (event)

Configurar al menos una dirección smtp-source-host también permite a SparkPost identificar correctamente la dirección IP de envío para que aparezca en los eventos de Inyección y Entrega, así como en la vista del informe de resumen.

Los nombres de los trabajos se establecen en PowerMTA a través de un encabezado en el mensaje inyectado. Además de habilitar el control individual de trabajos (pausa/reanudación, etc.), que es útil en sí mismo, PowerMTA pasa los nombres a través de SparkPost Signals reportando como “campaign ID”. Ver Guía del Usuario v5.0 sección 12.8 “Tracking a campaign in PowerMTA with a JobID”.

Hay algunas cosas que debes tener en cuenta con respecto a la nomenclatura de trabajos. Mientras que SparkPost (con formato JSON, y escape de JSON) permite caracteres como <ESPACIO>  en los nombres de campaña, los encabezados de correo son más restrictivos. Los caracteres válidos permitidos en el encabezado X-Job  son:

A-Za-z0-9!#$%&'()*+,-./:;<=>?@[\]^_{|}~ 

En otras palabras, los caracteres no permitidos incluyen <ESPACIO>, comillas dobles “  y comillas invertidas `. Si estás acostumbrado a trabajar con nombres X-Job, esto no te sorprenderá, y los nombres de tus campaign ID “simplemente funcionarán” en el informe de SparkPost. Si, como yo, aprendiste SparkPost primero, podrías querer una herramienta para asegurar que tus valores X-Job sean seguros; ver la característica adicional al final de este artículo.

Término PowerMTA

Término SparkPost Signals

VirtualMTA

IP Pool

VirtualMTA Pool

IP Pool (agrupado)

Job Name (X-Job header)

Campaign ID

smtp-source-host

Dirección IP de envío

Dominio Bounce

Identificación del dominio de envío

Dominio del remitente/De

Subaccount / Informe a nivel de dominio

Configurar los nombres de los PowerMTA VirtualMTA Pool y los nombres de los trabajos para que sean significativos y fáciles de leer para los humanos vale la pena hacerlo. Estos aparecen directamente en tus facetas de SparkPost Signals y en el informe de resumen.

Como se mencionó anteriormente, no necesitas crear estos pools en tu cuenta de SparkPost. SparkPost los recoge de la configuración de tu PowerMTA.

Así es como los términos de configuración de PowerMTA se traducen a términos de SparkPost.

Término PowerMTA Término SparkPost Reports / SignalsDominio del destinatario

(domain portion of “rcpt” field in Accounting file).Recipient Domain
The domain portion of the “Sender” or “From” header in the message relayed by PowerMTA.
  
(domain portion of “orig” in Accounting file).Sending Domain
VirtualMTA (name)—VirtualMTA Pool (name)
  
(“vmtaPool” in accounting file)IP Pool (name)
smtp-source-host a.b.c.d
  
(“dlvSourceIp” in accounting file)Sending IP a.b.c.d
Job (name)
  
(“jobId” in accounting file)Campaign ID (name)—Template (name)
“Subaccount” is not a native PowerMTA concept


Sin embargo, PowerMTA puede etiquetar virtualMTAs, virtual MTA Pools, o dominios de Sender-or-From con un ID de subcuenta para fines de informe en SparkPost.

Subaccount ID (number)
FBL (event)
Spam Complaint (event)
Remote Bounce (event)
Out-of-Band bounce (event)

Configurar al menos una dirección smtp-source-host también permite a SparkPost identificar correctamente la dirección IP de envío para que aparezca en los eventos de Inyección y Entrega, así como en la vista del informe de resumen.

Los nombres de los trabajos se establecen en PowerMTA a través de un encabezado en el mensaje inyectado. Además de habilitar el control individual de trabajos (pausa/reanudación, etc.), que es útil en sí mismo, PowerMTA pasa los nombres a través de SparkPost Signals reportando como “campaign ID”. Ver Guía del Usuario v5.0 sección 12.8 “Tracking a campaign in PowerMTA with a JobID”.

Hay algunas cosas que debes tener en cuenta con respecto a la nomenclatura de trabajos. Mientras que SparkPost (con formato JSON, y escape de JSON) permite caracteres como <ESPACIO>  en los nombres de campaña, los encabezados de correo son más restrictivos. Los caracteres válidos permitidos en el encabezado X-Job  son:

A-Za-z0-9!#$%&'()*+,-./:;<=>?@[\]^_{|}~ 

En otras palabras, los caracteres no permitidos incluyen <ESPACIO>, comillas dobles “  y comillas invertidas `. Si estás acostumbrado a trabajar con nombres X-Job, esto no te sorprenderá, y los nombres de tus campaign ID “simplemente funcionarán” en el informe de SparkPost. Si, como yo, aprendiste SparkPost primero, podrías querer una herramienta para asegurar que tus valores X-Job sean seguros; ver la característica adicional al final de este artículo.

Término PowerMTA

Término SparkPost Signals

VirtualMTA

IP Pool

VirtualMTA Pool

IP Pool (agrupado)

Job Name (X-Job header)

Campaign ID

smtp-source-host

Dirección IP de envío

Dominio Bounce

Identificación del dominio de envío

Dominio del remitente/De

Subaccount / Informe a nivel de dominio

Eventos de FBL (Spam Complaints) y rebotes remotos (fuera de banda)

PowerMTA puede recibir y procesar eventos de FBL (conocidos en SparkPost como eventos de Queja de Spam) y rebotes remotos (conocidos en SparkPost como rebotes fuera de banda, porque la respuesta llega algún tiempo después, en lugar de durante la conversación SMTP).

Hay artículos en el Foro de Soporte de Port25 sobre cómo configurar el Procesador de Rebotes y el Procesador de FBL. Si ya eres usuario de PowerMTA, probablemente ya los tengas.

Aquí está la configuración que hice para una demostración, basada en estos artículos y orientada a alojar PowerMTA en Amazon EC2.

Si estás familiarizado con la configuración de PowerMTA en esta área, puedes omitir esta parte, hasta la siguiente línea horizontal.

PowerMTA puede recibir y procesar eventos de FBL (conocidos en SparkPost como eventos de Queja de Spam) y rebotes remotos (conocidos en SparkPost como rebotes fuera de banda, porque la respuesta llega algún tiempo después, en lugar de durante la conversación SMTP).

Hay artículos en el Foro de Soporte de Port25 sobre cómo configurar el Procesador de Rebotes y el Procesador de FBL. Si ya eres usuario de PowerMTA, probablemente ya los tengas.

Aquí está la configuración que hice para una demostración, basada en estos artículos y orientada a alojar PowerMTA en Amazon EC2.

Si estás familiarizado con la configuración de PowerMTA en esta área, puedes omitir esta parte, hasta la siguiente línea horizontal.

PowerMTA puede recibir y procesar eventos de FBL (conocidos en SparkPost como eventos de Queja de Spam) y rebotes remotos (conocidos en SparkPost como rebotes fuera de banda, porque la respuesta llega algún tiempo después, en lugar de durante la conversación SMTP).

Hay artículos en el Foro de Soporte de Port25 sobre cómo configurar el Procesador de Rebotes y el Procesador de FBL. Si ya eres usuario de PowerMTA, probablemente ya los tengas.

Aquí está la configuración que hice para una demostración, basada en estos artículos y orientada a alojar PowerMTA en Amazon EC2.

Si estás familiarizado con la configuración de PowerMTA en esta área, puedes omitir esta parte, hasta la siguiente línea horizontal.

Configuración de Injection

Usaremos el puerto 587 para mensajes inyectados, que vendrán a través de la Internet pública desde otro host. Necesitamos detener a los malos actores que descubren y abusan de este servicio, por lo que aplicamos autenticación de nombre de usuario/contraseña y TLS opcional, similar a los puntos de inyección SMTP de SparkPost.

Queremos poder enviar mensajes desde fuentes que estén correctamente autenticadas a cualquier destino. También queremos un oyente separado en el puerto 25 para respuestas FBL y rebote remoto que no requieren autenticación.

# IP address(es) and port(s) on which to listen for incoming SMTP connections
smtp-listener 0.0.0.0:587
smtp-listener 0.0.0.0:25

En las siguientes declaraciones <source>, estamos utilizando autenticación de nombre de usuario/contraseña y TLS opcional para defendernos contra la inyección de mensaje no deseado. También establecemos límites de tasa en las conexiones que intentan fallar la contraseña.

Tu configuración podría ser diferente; por ejemplo, si tienes una red privada entre el iniciador y PowerMTA, no necesitarás autenticación de contraseña.

# One source rule for all injection, internal or external. Enforce auth, except for bounces and FBLs #
<source 0/0>
log-connections false
log-commands false    # WARNING: verbose! just for dev
log-data false        # WARNING: even more verbose!
smtp-service true     # allow SMTP service
smtp-max-auth-failure-rate 1/min
allow-unencrypted-plain-auth false
allow-starttls true
rewrite-list mfrom
</source>

<source {auth}>
always-allow-relaying yes   # only if the auth succeeds
default-virtual-mta default
process-x-job true
</source>

La declaración <source {auth}> (ver aquí. v5.0) se aplica una vez que la autenticación ha pasado. Aquí, permite el reenvío hacia adelante, configura el grupo MTA virtual predeterminado para usar, y añade el encabezado X-Job (que será reportado por SparkPost Signals como campaign_id).

La lista de reescritura mapea mensajes inyectados para usar un dominio MAIL FROM específico (también conocido como dominio de rebote o Return-Path:).

# # Rewrite the MAIL FROM address to match the bounce domain #
<rewrite-list mfrom>
mail-from *@pmta.signalsdemo.trymsys.net *@bounces.pmta.signalsdemo.trymsys.net
</rewrite-list>


Luego configuramos nuestra configuración de TLS y nombre de usuario/contraseña SMTP, de acuerdo con recomendaciones actuales.

# # Secure the inbound service with username, password and TLS. SMT 2020-06-15 #
smtp-server-tls-certificate /etc/pmta/pmtasignalsdemo.pem
smtp-server-tls-allow-tlsv1 false
smtp-server-tls-allow-tlsv1.1 false
smtp-server-tls-allow-tlsv1.2 true
smtp-server-tls-allow-tlsv1.3 true

# # SMTP users (authenticated via SMTP AUTH) #
<smtp-user SMTP_Injection>
password ##PUT YOUR PASSWORD HERE##
authentication-method password
</smtp-user>


Podemos verificar que el TLS v1.0 (inseguro, desaprobado) no sea aceptado usando mi herramienta de prueba SMTP favorita, swaks.

swaks --server pmta.signalsdemo.trymsys.net --port 587 \
  --to test@trymsys.net \
  --from any@sparkpost.com \
  --tls \
  --tls-protocol tlsv1


Vemos:

*** TLS startup failed (connect(): error:00000000:lib(0):func(0):reason(0))
*** STARTTLS attempted but failed


Asimismo, para –tls-protocol tlsv1_1.

También vamos a aplicar la firma DKIM en nuestros mensajes salientes, ya que es una buena práctica (seguí estas instrucciones para configurar la clave).

# # DKIM #
domain-key mypmta, pmta.signalsdemo.trymsys.net, /etc/pmta/mypmta.pmta.signalsdemo.trymsys.net.pem

Usaremos el puerto 587 para mensajes inyectados, que vendrán a través de la Internet pública desde otro host. Necesitamos detener a los malos actores que descubren y abusan de este servicio, por lo que aplicamos autenticación de nombre de usuario/contraseña y TLS opcional, similar a los puntos de inyección SMTP de SparkPost.

Queremos poder enviar mensajes desde fuentes que estén correctamente autenticadas a cualquier destino. También queremos un oyente separado en el puerto 25 para respuestas FBL y rebote remoto que no requieren autenticación.

# IP address(es) and port(s) on which to listen for incoming SMTP connections
smtp-listener 0.0.0.0:587
smtp-listener 0.0.0.0:25

En las siguientes declaraciones <source>, estamos utilizando autenticación de nombre de usuario/contraseña y TLS opcional para defendernos contra la inyección de mensaje no deseado. También establecemos límites de tasa en las conexiones que intentan fallar la contraseña.

Tu configuración podría ser diferente; por ejemplo, si tienes una red privada entre el iniciador y PowerMTA, no necesitarás autenticación de contraseña.

# One source rule for all injection, internal or external. Enforce auth, except for bounces and FBLs #
<source 0/0>
log-connections false
log-commands false    # WARNING: verbose! just for dev
log-data false        # WARNING: even more verbose!
smtp-service true     # allow SMTP service
smtp-max-auth-failure-rate 1/min
allow-unencrypted-plain-auth false
allow-starttls true
rewrite-list mfrom
</source>

<source {auth}>
always-allow-relaying yes   # only if the auth succeeds
default-virtual-mta default
process-x-job true
</source>

La declaración <source {auth}> (ver aquí. v5.0) se aplica una vez que la autenticación ha pasado. Aquí, permite el reenvío hacia adelante, configura el grupo MTA virtual predeterminado para usar, y añade el encabezado X-Job (que será reportado por SparkPost Signals como campaign_id).

La lista de reescritura mapea mensajes inyectados para usar un dominio MAIL FROM específico (también conocido como dominio de rebote o Return-Path:).

# # Rewrite the MAIL FROM address to match the bounce domain #
<rewrite-list mfrom>
mail-from *@pmta.signalsdemo.trymsys.net *@bounces.pmta.signalsdemo.trymsys.net
</rewrite-list>


Luego configuramos nuestra configuración de TLS y nombre de usuario/contraseña SMTP, de acuerdo con recomendaciones actuales.

# # Secure the inbound service with username, password and TLS. SMT 2020-06-15 #
smtp-server-tls-certificate /etc/pmta/pmtasignalsdemo.pem
smtp-server-tls-allow-tlsv1 false
smtp-server-tls-allow-tlsv1.1 false
smtp-server-tls-allow-tlsv1.2 true
smtp-server-tls-allow-tlsv1.3 true

# # SMTP users (authenticated via SMTP AUTH) #
<smtp-user SMTP_Injection>
password ##PUT YOUR PASSWORD HERE##
authentication-method password
</smtp-user>


Podemos verificar que el TLS v1.0 (inseguro, desaprobado) no sea aceptado usando mi herramienta de prueba SMTP favorita, swaks.

swaks --server pmta.signalsdemo.trymsys.net --port 587 \
  --to test@trymsys.net \
  --from any@sparkpost.com \
  --tls \
  --tls-protocol tlsv1


Vemos:

*** TLS startup failed (connect(): error:00000000:lib(0):func(0):reason(0))
*** STARTTLS attempted but failed


Asimismo, para –tls-protocol tlsv1_1.

También vamos a aplicar la firma DKIM en nuestros mensajes salientes, ya que es una buena práctica (seguí estas instrucciones para configurar la clave).

# # DKIM #
domain-key mypmta, pmta.signalsdemo.trymsys.net, /etc/pmta/mypmta.pmta.signalsdemo.trymsys.net.pem

Usaremos el puerto 587 para mensajes inyectados, que vendrán a través de la Internet pública desde otro host. Necesitamos detener a los malos actores que descubren y abusan de este servicio, por lo que aplicamos autenticación de nombre de usuario/contraseña y TLS opcional, similar a los puntos de inyección SMTP de SparkPost.

Queremos poder enviar mensajes desde fuentes que estén correctamente autenticadas a cualquier destino. También queremos un oyente separado en el puerto 25 para respuestas FBL y rebote remoto que no requieren autenticación.

# IP address(es) and port(s) on which to listen for incoming SMTP connections
smtp-listener 0.0.0.0:587
smtp-listener 0.0.0.0:25

En las siguientes declaraciones <source>, estamos utilizando autenticación de nombre de usuario/contraseña y TLS opcional para defendernos contra la inyección de mensaje no deseado. También establecemos límites de tasa en las conexiones que intentan fallar la contraseña.

Tu configuración podría ser diferente; por ejemplo, si tienes una red privada entre el iniciador y PowerMTA, no necesitarás autenticación de contraseña.

# One source rule for all injection, internal or external. Enforce auth, except for bounces and FBLs #
<source 0/0>
log-connections false
log-commands false    # WARNING: verbose! just for dev
log-data false        # WARNING: even more verbose!
smtp-service true     # allow SMTP service
smtp-max-auth-failure-rate 1/min
allow-unencrypted-plain-auth false
allow-starttls true
rewrite-list mfrom
</source>

<source {auth}>
always-allow-relaying yes   # only if the auth succeeds
default-virtual-mta default
process-x-job true
</source>

La declaración <source {auth}> (ver aquí. v5.0) se aplica una vez que la autenticación ha pasado. Aquí, permite el reenvío hacia adelante, configura el grupo MTA virtual predeterminado para usar, y añade el encabezado X-Job (que será reportado por SparkPost Signals como campaign_id).

La lista de reescritura mapea mensajes inyectados para usar un dominio MAIL FROM específico (también conocido como dominio de rebote o Return-Path:).

# # Rewrite the MAIL FROM address to match the bounce domain #
<rewrite-list mfrom>
mail-from *@pmta.signalsdemo.trymsys.net *@bounces.pmta.signalsdemo.trymsys.net
</rewrite-list>


Luego configuramos nuestra configuración de TLS y nombre de usuario/contraseña SMTP, de acuerdo con recomendaciones actuales.

# # Secure the inbound service with username, password and TLS. SMT 2020-06-15 #
smtp-server-tls-certificate /etc/pmta/pmtasignalsdemo.pem
smtp-server-tls-allow-tlsv1 false
smtp-server-tls-allow-tlsv1.1 false
smtp-server-tls-allow-tlsv1.2 true
smtp-server-tls-allow-tlsv1.3 true

# # SMTP users (authenticated via SMTP AUTH) #
<smtp-user SMTP_Injection>
password ##PUT YOUR PASSWORD HERE##
authentication-method password
</smtp-user>


Podemos verificar que el TLS v1.0 (inseguro, desaprobado) no sea aceptado usando mi herramienta de prueba SMTP favorita, swaks.

swaks --server pmta.signalsdemo.trymsys.net --port 587 \
  --to test@trymsys.net \
  --from any@sparkpost.com \
  --tls \
  --tls-protocol tlsv1


Vemos:

*** TLS startup failed (connect(): error:00000000:lib(0):func(0):reason(0))
*** STARTTLS attempted but failed


Asimismo, para –tls-protocol tlsv1_1.

También vamos a aplicar la firma DKIM en nuestros mensajes salientes, ya que es una buena práctica (seguí estas instrucciones para configurar la clave).

# # DKIM #
domain-key mypmta, pmta.signalsdemo.trymsys.net, /etc/pmta/mypmta.pmta.signalsdemo.trymsys.net.pem

Configuración y nombramiento de VirtualMTA

PowerMTA VirtualMTAs (y agrupaciones de VirtualMTA) son funciones potentes para gestionar flujos de mensajes, y las funciones de informes de PowerMTA / SparkPost Signals funcionan mejor con estos activos.

# # Route all outgoing traffic through this virtual mta / pool. #
# Declare the delivery IP address here, so that SparkPost signals ingest injection (aka "reception") events
# will carry the correct sending_IP attribute #
<virtual-mta mta1>
    smtp-source-host 172.31.25.101 pmta.signalsdemo.trymsys.net
</virtual-mta>

<virtual-mta-pool default>
    virtual-mta mta1
    <domain *>
        max-smtp-out    20      # max. connections *per domain*
        bounce-after    4d12h   # 4 days, 12 hours
        retry-after     10m     # 10 minutes
        dkim-sign       yes
    </domain>
</virtual-mta-pool>


La configuración de virtual-mta-pool se informa en SparkPost como “IP Pool”, y está disponible como una faceta de informes de SparkPost Signals (el menú desplegable debajo de los gráficos).

Health score dashboard


El Informe Resumido también muestra IP Pool como una faceta de informes “Agrupar por”.

Summary report dashboard


Como se señaló anteriormente en este artículo, la configuración de al menos una dirección smtp-source-host también permite a SparkPost identificar correctamente la dirección IP de envío, para que aparezca en los eventos de Inyección y Entrega, y en el Informe Resumido:

Summary report with the group by filter set to "Sending IP"

Eso es todo lo que necesitas para conseguir una integración básica entre PowerMTA y SparkPost Signals. Puedes encontrar el ejemplo completo del archivo de configuración aquí.

Antes de que te vayas, aquí está la característica adicional que mencioné.

PowerMTA VirtualMTAs (y agrupaciones de VirtualMTA) son funciones potentes para gestionar flujos de mensajes, y las funciones de informes de PowerMTA / SparkPost Signals funcionan mejor con estos activos.

# # Route all outgoing traffic through this virtual mta / pool. #
# Declare the delivery IP address here, so that SparkPost signals ingest injection (aka "reception") events
# will carry the correct sending_IP attribute #
<virtual-mta mta1>
    smtp-source-host 172.31.25.101 pmta.signalsdemo.trymsys.net
</virtual-mta>

<virtual-mta-pool default>
    virtual-mta mta1
    <domain *>
        max-smtp-out    20      # max. connections *per domain*
        bounce-after    4d12h   # 4 days, 12 hours
        retry-after     10m     # 10 minutes
        dkim-sign       yes
    </domain>
</virtual-mta-pool>


La configuración de virtual-mta-pool se informa en SparkPost como “IP Pool”, y está disponible como una faceta de informes de SparkPost Signals (el menú desplegable debajo de los gráficos).

Health score dashboard


El Informe Resumido también muestra IP Pool como una faceta de informes “Agrupar por”.

Summary report dashboard


Como se señaló anteriormente en este artículo, la configuración de al menos una dirección smtp-source-host también permite a SparkPost identificar correctamente la dirección IP de envío, para que aparezca en los eventos de Inyección y Entrega, y en el Informe Resumido:

Summary report with the group by filter set to "Sending IP"

Eso es todo lo que necesitas para conseguir una integración básica entre PowerMTA y SparkPost Signals. Puedes encontrar el ejemplo completo del archivo de configuración aquí.

Antes de que te vayas, aquí está la característica adicional que mencioné.

PowerMTA VirtualMTAs (y agrupaciones de VirtualMTA) son funciones potentes para gestionar flujos de mensajes, y las funciones de informes de PowerMTA / SparkPost Signals funcionan mejor con estos activos.

# # Route all outgoing traffic through this virtual mta / pool. #
# Declare the delivery IP address here, so that SparkPost signals ingest injection (aka "reception") events
# will carry the correct sending_IP attribute #
<virtual-mta mta1>
    smtp-source-host 172.31.25.101 pmta.signalsdemo.trymsys.net
</virtual-mta>

<virtual-mta-pool default>
    virtual-mta mta1
    <domain *>
        max-smtp-out    20      # max. connections *per domain*
        bounce-after    4d12h   # 4 days, 12 hours
        retry-after     10m     # 10 minutes
        dkim-sign       yes
    </domain>
</virtual-mta-pool>


La configuración de virtual-mta-pool se informa en SparkPost como “IP Pool”, y está disponible como una faceta de informes de SparkPost Signals (el menú desplegable debajo de los gráficos).

Health score dashboard


El Informe Resumido también muestra IP Pool como una faceta de informes “Agrupar por”.

Summary report dashboard


Como se señaló anteriormente en este artículo, la configuración de al menos una dirección smtp-source-host también permite a SparkPost identificar correctamente la dirección IP de envío, para que aparezca en los eventos de Inyección y Entrega, y en el Informe Resumido:

Summary report with the group by filter set to "Sending IP"

Eso es todo lo que necesitas para conseguir una integración básica entre PowerMTA y SparkPost Signals. Puedes encontrar el ejemplo completo del archivo de configuración aquí.

Antes de que te vayas, aquí está la característica adicional que mencioné.

Función adicional: comprobación/filtrado de X-Job name

Para asegurar que cualquier cadena de caracteres sea segura para su uso como nombre PowerMTA X-Job, aquí tienes una función simple de Python para mapear cualquier carácter no seguro a un guion bajo “_”

import re

def pmtaSafeJobID(s):
    """
    :param s: str
    :return: str
    Map an arbitrary campaign ID string into allowed chars for PMTA X-Job header.
    See https://download.port25.com/files/UsersGuide-5.0.html#tracking-a-campaign-in-powermta-with-a-jobid
    Specifically disallow <sp> " ` but allow through most other chars.
    """
    # Note have to escape ' - [ ] and double-escape \ - see https://docs.python.org/3/library/re.html
    disallowedChars = '[^A-Za-z0-9!#$%&\'()*+,\-./:;<=>?@$begin:math:display$\\\\\\\\$end:math:display$^_{|}~]'
    return re.sub(disallowedChars, '_', s)

Esto usa expresiones regulares de Python de una manera específica. Declara el conjunto de caracteres no permitidos usando el operador de “complemento de conjunto” ^ en lugar de listar todos los caracteres permitidos. Eso significa que capturamos (y hacemos seguros) caracteres más allá del conjunto usual de 7 bits. Podemos mostrar eso usando este fragmento de prueba:

s='' for i in range(32, 256): s += chr(i) print(pmtaSafeJobID(s))

Dando

!#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^abcdefghijklmnopqrstuvwxyz{|}~_________________________________________________________

Puedes ver que <ESPACIO>, comillas dobles “, y la comilla invertida `, así como todos los caracteres más allá de ~ se mapean a guion bajo.

Para asegurar que cualquier cadena de caracteres sea segura para su uso como nombre PowerMTA X-Job, aquí tienes una función simple de Python para mapear cualquier carácter no seguro a un guion bajo “_”

import re

def pmtaSafeJobID(s):
    """
    :param s: str
    :return: str
    Map an arbitrary campaign ID string into allowed chars for PMTA X-Job header.
    See https://download.port25.com/files/UsersGuide-5.0.html#tracking-a-campaign-in-powermta-with-a-jobid
    Specifically disallow <sp> " ` but allow through most other chars.
    """
    # Note have to escape ' - [ ] and double-escape \ - see https://docs.python.org/3/library/re.html
    disallowedChars = '[^A-Za-z0-9!#$%&\'()*+,\-./:;<=>?@$begin:math:display$\\\\\\\\$end:math:display$^_{|}~]'
    return re.sub(disallowedChars, '_', s)

Esto usa expresiones regulares de Python de una manera específica. Declara el conjunto de caracteres no permitidos usando el operador de “complemento de conjunto” ^ en lugar de listar todos los caracteres permitidos. Eso significa que capturamos (y hacemos seguros) caracteres más allá del conjunto usual de 7 bits. Podemos mostrar eso usando este fragmento de prueba:

s='' for i in range(32, 256): s += chr(i) print(pmtaSafeJobID(s))

Dando

!#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^abcdefghijklmnopqrstuvwxyz{|}~_________________________________________________________

Puedes ver que <ESPACIO>, comillas dobles “, y la comilla invertida `, así como todos los caracteres más allá de ~ se mapean a guion bajo.

Para asegurar que cualquier cadena de caracteres sea segura para su uso como nombre PowerMTA X-Job, aquí tienes una función simple de Python para mapear cualquier carácter no seguro a un guion bajo “_”

import re

def pmtaSafeJobID(s):
    """
    :param s: str
    :return: str
    Map an arbitrary campaign ID string into allowed chars for PMTA X-Job header.
    See https://download.port25.com/files/UsersGuide-5.0.html#tracking-a-campaign-in-powermta-with-a-jobid
    Specifically disallow <sp> " ` but allow through most other chars.
    """
    # Note have to escape ' - [ ] and double-escape \ - see https://docs.python.org/3/library/re.html
    disallowedChars = '[^A-Za-z0-9!#$%&\'()*+,\-./:;<=>?@$begin:math:display$\\\\\\\\$end:math:display$^_{|}~]'
    return re.sub(disallowedChars, '_', s)

Esto usa expresiones regulares de Python de una manera específica. Declara el conjunto de caracteres no permitidos usando el operador de “complemento de conjunto” ^ en lugar de listar todos los caracteres permitidos. Eso significa que capturamos (y hacemos seguros) caracteres más allá del conjunto usual de 7 bits. Podemos mostrar eso usando este fragmento de prueba:

s='' for i in range(32, 256): s += chr(i) print(pmtaSafeJobID(s))

Dando

!#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^abcdefghijklmnopqrstuvwxyz{|}~_________________________________________________________

Puedes ver que <ESPACIO>, comillas dobles “, y la comilla invertida `, así como todos los caracteres más allá de ~ se mapean a guion bajo.

Otras noticias

Leer más de esta categoría

A person is standing at a desk while typing on a laptop.

La plataforma completa AI-native que escala con tu negocio.

© 2025 Bird

A person is standing at a desk while typing on a laptop.

La plataforma completa AI-native que escala con tu negocio.

© 2025 Bird