Implantando Sinais para Ambientes Locais: Integração com PowerMTA

Pássaro

30 de ago. de 2019

Email

1 min read

Implantando Sinais para Ambientes Locais: Integração com PowerMTA

Principais Conclusões

    • Objetivo: Este guia explica como integrar PowerMTA 5.0+ com SparkPost Signals para transmitir dados de eventos e engajamento (devoluções, aberturas, cliques, reclamações de spam) de MTAs locais diretamente para a camada de análise do SparkPost.

    • Configuração principal:

      • Adicione enable-signals true e defina seu endpoint de ingestão do SparkPost (https://api.sparkpost.com/api/v1/ingest/events ou o equivalente da UE).

      • Use uma chave de API válida com permissão “Eventos de Entrada: Escrita”.

      • Especifique o customer-id e, opcionalmente, crie domínios de rastreamento personalizados para melhorar a entregabilidade.

    • Configuração de rastreamento: O Rastreamento de Engajamento do PowerMTA injeta automaticamente pixels de abertura e clique em emails HTML. Você pode desativar o rastreamento por link com o atributo data-msys-clicktrack="0".

    • Relatório seletivo: Os Signals podem ser ativados globalmente ou limitados a certos VirtualMTAs, pools ou domínios de remetentes, permitindo um controle de dados detalhado.

    • Teste & verificação: Use o painel de Integração de Signals e os logs do PowerMTA para confirmar a ingestão de eventos e rastrear Scores de Saúde, devoluções e métricas de engajamento em tempo real.

    • Ajuste de entregabilidade:

      • Use nomes significativos para VirtualMTA e Job — estes mapeiam diretamente para Pools de IP e IDs de Campanha nos relatórios do SparkPost.

      • Configure assinatura DKIM, aplicação de TLS e regras de revezamento apropriadas para evitar injeções não autorizadas.

    • Configuração avançada: O artigo também inclui trechos prontos para uso para manipulação de FBL e bounce fora de banda, injeção SMTP autenticada (porta 587) e código Python para sanitizar cabeçalhos X-Job para compatibilidade.

Destaques de Perguntas e Respostas

  • O que a integração do Signals realmente faz?

    Ele automaticamente carrega os eventos de mensagem do PowerMTA (injeção, entrega, devolução, engajamento) na sua conta do SparkPost para que você possa acessar painéis como Pontuação de Saúde, relatórios de Atraso e Monitoramento de Armadilhas de Spam.

  • Por que integrar Signals com um MTA local?

    Muitas empresas mantêm infraestrutura de e-mail auto-hospedada por razões de conformidade, mas ainda desejam as capacidades de análise e monitoramento do SparkPost. Signals fecha essa lacuna sem migrar a entrega de e-mails para a nuvem.

  • Como posso verificar se os eventos estão chegando ao SparkPost?

    Verifique os logs do PowerMTA por Signals: Transferred ... successfully e confirme as entradas de eventos em Signals → Events Search no SparkPost.

  • Posso usar meu próprio domínio de rastreamento?

    Sim — configure um CNAME como track.mycompany.com → pmta.spgo.io (EUA) ou pmta.eu.spgo.io (UE), em seguida, registre e verifique-o no SparkPost para consistência de marca e reputação.

  • E quanto à privacidade dos dados ou ao uso do disco?

    A diretiva min-free-space exclui automaticamente arquivos de evento JSON antigos quando o espaço em disco está baixo, prevenindo o acúmulo local de dados de telemetria.

  • Qual é o "recurso adicional" no final?

    Uma utilidade de regex Python (pmtaSafeJobID) que garante que nomes de campanha/trabalho usem apenas caracteres válidos no formato de cabeçalho X-Job do PowerMTA, substituindo caracteres inseguros por sublinhados.

Vamos mergulhar nos detalhes de como configurar o PowerMTA para SparkPost Signals. Você vai precisar de:

  • Um host para rodar a versão mais recente do PowerMTA – seja novo ou uma máquina existente

  • Uma conta SparkPost com permissão de chave API para "Eventos de Entrada: Escrita" conforme descrito aqui

Vamos configurar o PowerMTA para transmitir eventos para a sua conta SparkPost, então você poderá usar o seguinte:

Vamos mergulhar nos detalhes de como configurar o PowerMTA para SparkPost Signals. Você vai precisar de:

  • Um host para rodar a versão mais recente do PowerMTA – seja novo ou uma máquina existente

  • Uma conta SparkPost com permissão de chave API para "Eventos de Entrada: Escrita" conforme descrito aqui

Vamos configurar o PowerMTA para transmitir eventos para a sua conta SparkPost, então você poderá usar o seguinte:

Vamos mergulhar nos detalhes de como configurar o PowerMTA para SparkPost Signals. Você vai precisar de:

  • Um host para rodar a versão mais recente do PowerMTA – seja novo ou uma máquina existente

  • Uma conta SparkPost com permissão de chave API para "Eventos de Entrada: Escrita" conforme descrito aqui

Vamos configurar o PowerMTA para transmitir eventos para a sua conta SparkPost, então você poderá usar o seguinte:

Visão geral de instalação e configuração

Primeiro, instale (ou atualize) para PowerMTA 5.0 r4 ou superior, seguindo as instruções de instalação habituais do v5.0 que são bem diretas. Em seguida, vamos trabalhar nos seguintes passos:

  • Configurar o conector PowerMTA para SparkPost Signals

  • Configurar o Rastreamento de Engajamento com um domínio de rastreamento personalizado

  • Selecionar quais fluxos de tráfego do PowerMTA relatar ao Signals

  • Testar se seus eventos estão chegando ao Signals

  • Rever como usar nomes significativos que aparecem bem nos relatórios.

Também abordaremos outros aspectos específicos da configuração do PowerMTA usados em nossa demonstração do Signals:

  • Eventos FBL (Reclamações de Spam) e reprovados remotos (out-of-band)

  • Configuração de injeção, incluindo DKIM

  • Configuração de FBL e OOB

  • Configuração e nomeação do VirtualMTA (e como isso aparece em seus relatórios do SparkPost Signals)

Finalmente, há um “recurso bônus” com código para garantir que os nomes de suas campanhas sejam compatíveis com as convenções de nome do PowerMTA X-Job .

Primeiro, instale (ou atualize) para PowerMTA 5.0 r4 ou superior, seguindo as instruções de instalação habituais do v5.0 que são bem diretas. Em seguida, vamos trabalhar nos seguintes passos:

  • Configurar o conector PowerMTA para SparkPost Signals

  • Configurar o Rastreamento de Engajamento com um domínio de rastreamento personalizado

  • Selecionar quais fluxos de tráfego do PowerMTA relatar ao Signals

  • Testar se seus eventos estão chegando ao Signals

  • Rever como usar nomes significativos que aparecem bem nos relatórios.

Também abordaremos outros aspectos específicos da configuração do PowerMTA usados em nossa demonstração do Signals:

  • Eventos FBL (Reclamações de Spam) e reprovados remotos (out-of-band)

  • Configuração de injeção, incluindo DKIM

  • Configuração de FBL e OOB

  • Configuração e nomeação do VirtualMTA (e como isso aparece em seus relatórios do SparkPost Signals)

Finalmente, há um “recurso bônus” com código para garantir que os nomes de suas campanhas sejam compatíveis com as convenções de nome do PowerMTA X-Job .

Primeiro, instale (ou atualize) para PowerMTA 5.0 r4 ou superior, seguindo as instruções de instalação habituais do v5.0 que são bem diretas. Em seguida, vamos trabalhar nos seguintes passos:

  • Configurar o conector PowerMTA para SparkPost Signals

  • Configurar o Rastreamento de Engajamento com um domínio de rastreamento personalizado

  • Selecionar quais fluxos de tráfego do PowerMTA relatar ao Signals

  • Testar se seus eventos estão chegando ao Signals

  • Rever como usar nomes significativos que aparecem bem nos relatórios.

Também abordaremos outros aspectos específicos da configuração do PowerMTA usados em nossa demonstração do Signals:

  • Eventos FBL (Reclamações de Spam) e reprovados remotos (out-of-band)

  • Configuração de injeção, incluindo DKIM

  • Configuração de FBL e OOB

  • Configuração e nomeação do VirtualMTA (e como isso aparece em seus relatórios do SparkPost Signals)

Finalmente, há um “recurso bônus” com código para garantir que os nomes de suas campanhas sejam compatíveis com as convenções de nome do PowerMTA X-Job .

Configuração FBL e OOB

Agora .. finalmente .. declaramos quais domínios específicos estão abertos para respostas de bounce remoto e FBL. Não queremos retransmitir isso em nenhum lugar (para evitar ataques de backscatter), apenas processar essas respostas internamente.

# # 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>

Você pode ver que eu configurei dois domínios de bounce, enquanto brincava com a regra de reescrita mfrom .

O domínio FBL geralmente é registrado em serviços externos, como Microsoft SNDS; veja este artigo para mais informações. Para esta demonstração, os FBLs virão do Bouncy Sink, então não é necessário registrar.

Agora .. finalmente .. declaramos quais domínios específicos estão abertos para respostas de bounce remoto e FBL. Não queremos retransmitir isso em nenhum lugar (para evitar ataques de backscatter), apenas processar essas respostas internamente.

# # 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>

Você pode ver que eu configurei dois domínios de bounce, enquanto brincava com a regra de reescrita mfrom .

O domínio FBL geralmente é registrado em serviços externos, como Microsoft SNDS; veja este artigo para mais informações. Para esta demonstração, os FBLs virão do Bouncy Sink, então não é necessário registrar.

Agora .. finalmente .. declaramos quais domínios específicos estão abertos para respostas de bounce remoto e FBL. Não queremos retransmitir isso em nenhum lugar (para evitar ataques de backscatter), apenas processar essas respostas internamente.

# # 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>

Você pode ver que eu configurei dois domínios de bounce, enquanto brincava com a regra de reescrita mfrom .

O domínio FBL geralmente é registrado em serviços externos, como Microsoft SNDS; veja este artigo para mais informações. Para esta demonstração, os FBLs virão do Bouncy Sink, então não é necessário registrar.

Configurar conector PowerMTA

A configuração do Signals é descrita na seção 10.1 do Guia do Usuário 5.0. Aqui, começaremos com "Caso de Uso #2", que habilita os Signals para todo o tráfego deste host PowerMTA e habilita o rastreamento de engajamento do 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


Aqui está o que cada atributo faz:

api-key

Isso é exclusivo para sua conta SparkPost, é o valor que você obteve do SparkPost anteriormente.


upload-url

Isso precisa corresponder ao endereço do seu serviço API do SparkPost, seja nos EUA ou na UE. Para mais informações, veja aqui. Os valores habituais são:

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

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


log-verbose

Esta diretiva é opcional e, quando habilitada, fornece um pouco mais de informações no arquivo pmta.log, o que pode ser útil durante a configuração para confirmar que tudo está funcionando corretamente. A cada minuto, mesmo quando não há tráfego, você verá:

2019-07-26 11:47:57 Signals: Descobriu 0 arquivos


Com o tráfego, você verá 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

Isso informa ao PowerMTA o limite de espaço em disco no qual ele deve começar a excluir os arquivos de eventos JSON do SparkPost mais antigos para liberar espaço para novos arquivos quando o espaço em disco estiver baixo.


enable-signals

Isso informa ao PowerMTA para enviar para Signals, neste caso globalmente para todo o tráfego (mais informações aqui, para v5.0). Você pode ser mais seletivo sobre quais fluxos de tráfego enviar, se desejar.


Você também pode marcar um tráfego específico do PowerMTA para ser relatado como pertencente a um subconta do SparkPost – esta é uma outra forma de distinguir um fluxo de tráfego particular de outro.


engagement-tracking, customer-id
A solução de Rastreamento de Engajamento do PowerMTA tem como padrão o domínio de rastreamento para o serviço hospedado nos EUA do SparkPost. Você especifica seu ID de cliente numérico do SparkPost; aqui estão instruções para encontrá-lo.


tracking-domain

Para contas SparkPost UE, adicione a seguinte linha:

tracking-domain pmta.eu.spgo.io # este é o endpoint para SparkPost UE


Domínio de rastreamento personalizado

Se você preferir usar seu próprio domínio de rastreamento (isso é melhor do ponto de vista de entregabilidade), faça o seguinte:

  • Crie um domínio de rastreamento com seu provedor de DNS criando um registro CNAME. Isso geralmente será um subdomínio do seu domínio de nível superior, ex. 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

Você também pode usar domínios de rastreamento HTTPS, embora isso seja mais complicado (veja os passos de configuração do SparkPost para domínios de rastreamento HTTPS).

  • Registre o domínio de rastreamento na sua conta do SparkPost e verifique-o. Espere alguns minutos antes de tentar isso, para permitir que suas mudanças de DNS se propaguem pela Internet, dependendo do seu provedor de DNS.

  • Configure o PowerMTA para usar esse domínio em vez do padrão, com

tracking-domain seudominio.com # Coloque seu próprio domínio aqui

Você pode verificar se seus emails entregues têm “pixels de abertura” adicionados e os links formatados, olhando as informações do email (no Gmail, use o menu no canto superior direito e escolha “Mostrar Original”).

Show original option highlighted


Você notará os pixels de abertura no início e no final do HTML no email. Cada link HTML também é alterado para ter REF  apontando para o domínio de rastreamento.

HTML code highlighted


Isso é tudo o que você precisa para fazer o SparkPost Signals funcionar com o rastreamento de engajamento integrado do PowerMTA.

Prevenindo links específicos em seu email HTML de serem rastreados

Você pode impedir que o PowerMTA rastreie links específicos, definindo o atributo personalizado data-msys-clicktrack  para “0”  :

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

O PowerMTA não envolverá o link. Ele também removerá esse atributo antes de transmitir a mensagem ao seu destinatário.

A configuração do Signals é descrita na seção 10.1 do Guia do Usuário 5.0. Aqui, começaremos com "Caso de Uso #2", que habilita os Signals para todo o tráfego deste host PowerMTA e habilita o rastreamento de engajamento do 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


Aqui está o que cada atributo faz:

api-key

Isso é exclusivo para sua conta SparkPost, é o valor que você obteve do SparkPost anteriormente.


upload-url

Isso precisa corresponder ao endereço do seu serviço API do SparkPost, seja nos EUA ou na UE. Para mais informações, veja aqui. Os valores habituais são:

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

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


log-verbose

Esta diretiva é opcional e, quando habilitada, fornece um pouco mais de informações no arquivo pmta.log, o que pode ser útil durante a configuração para confirmar que tudo está funcionando corretamente. A cada minuto, mesmo quando não há tráfego, você verá:

2019-07-26 11:47:57 Signals: Descobriu 0 arquivos


Com o tráfego, você verá 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

Isso informa ao PowerMTA o limite de espaço em disco no qual ele deve começar a excluir os arquivos de eventos JSON do SparkPost mais antigos para liberar espaço para novos arquivos quando o espaço em disco estiver baixo.


enable-signals

Isso informa ao PowerMTA para enviar para Signals, neste caso globalmente para todo o tráfego (mais informações aqui, para v5.0). Você pode ser mais seletivo sobre quais fluxos de tráfego enviar, se desejar.


Você também pode marcar um tráfego específico do PowerMTA para ser relatado como pertencente a um subconta do SparkPost – esta é uma outra forma de distinguir um fluxo de tráfego particular de outro.


engagement-tracking, customer-id
A solução de Rastreamento de Engajamento do PowerMTA tem como padrão o domínio de rastreamento para o serviço hospedado nos EUA do SparkPost. Você especifica seu ID de cliente numérico do SparkPost; aqui estão instruções para encontrá-lo.


tracking-domain

Para contas SparkPost UE, adicione a seguinte linha:

tracking-domain pmta.eu.spgo.io # este é o endpoint para SparkPost UE


Domínio de rastreamento personalizado

Se você preferir usar seu próprio domínio de rastreamento (isso é melhor do ponto de vista de entregabilidade), faça o seguinte:

  • Crie um domínio de rastreamento com seu provedor de DNS criando um registro CNAME. Isso geralmente será um subdomínio do seu domínio de nível superior, ex. 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

Você também pode usar domínios de rastreamento HTTPS, embora isso seja mais complicado (veja os passos de configuração do SparkPost para domínios de rastreamento HTTPS).

  • Registre o domínio de rastreamento na sua conta do SparkPost e verifique-o. Espere alguns minutos antes de tentar isso, para permitir que suas mudanças de DNS se propaguem pela Internet, dependendo do seu provedor de DNS.

  • Configure o PowerMTA para usar esse domínio em vez do padrão, com

tracking-domain seudominio.com # Coloque seu próprio domínio aqui

Você pode verificar se seus emails entregues têm “pixels de abertura” adicionados e os links formatados, olhando as informações do email (no Gmail, use o menu no canto superior direito e escolha “Mostrar Original”).

Show original option highlighted


Você notará os pixels de abertura no início e no final do HTML no email. Cada link HTML também é alterado para ter REF  apontando para o domínio de rastreamento.

HTML code highlighted


Isso é tudo o que você precisa para fazer o SparkPost Signals funcionar com o rastreamento de engajamento integrado do PowerMTA.

Prevenindo links específicos em seu email HTML de serem rastreados

Você pode impedir que o PowerMTA rastreie links específicos, definindo o atributo personalizado data-msys-clicktrack  para “0”  :

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

O PowerMTA não envolverá o link. Ele também removerá esse atributo antes de transmitir a mensagem ao seu destinatário.

A configuração do Signals é descrita na seção 10.1 do Guia do Usuário 5.0. Aqui, começaremos com "Caso de Uso #2", que habilita os Signals para todo o tráfego deste host PowerMTA e habilita o rastreamento de engajamento do 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


Aqui está o que cada atributo faz:

api-key

Isso é exclusivo para sua conta SparkPost, é o valor que você obteve do SparkPost anteriormente.


upload-url

Isso precisa corresponder ao endereço do seu serviço API do SparkPost, seja nos EUA ou na UE. Para mais informações, veja aqui. Os valores habituais são:

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

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


log-verbose

Esta diretiva é opcional e, quando habilitada, fornece um pouco mais de informações no arquivo pmta.log, o que pode ser útil durante a configuração para confirmar que tudo está funcionando corretamente. A cada minuto, mesmo quando não há tráfego, você verá:

2019-07-26 11:47:57 Signals: Descobriu 0 arquivos


Com o tráfego, você verá 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

Isso informa ao PowerMTA o limite de espaço em disco no qual ele deve começar a excluir os arquivos de eventos JSON do SparkPost mais antigos para liberar espaço para novos arquivos quando o espaço em disco estiver baixo.


enable-signals

Isso informa ao PowerMTA para enviar para Signals, neste caso globalmente para todo o tráfego (mais informações aqui, para v5.0). Você pode ser mais seletivo sobre quais fluxos de tráfego enviar, se desejar.


Você também pode marcar um tráfego específico do PowerMTA para ser relatado como pertencente a um subconta do SparkPost – esta é uma outra forma de distinguir um fluxo de tráfego particular de outro.


engagement-tracking, customer-id
A solução de Rastreamento de Engajamento do PowerMTA tem como padrão o domínio de rastreamento para o serviço hospedado nos EUA do SparkPost. Você especifica seu ID de cliente numérico do SparkPost; aqui estão instruções para encontrá-lo.


tracking-domain

Para contas SparkPost UE, adicione a seguinte linha:

tracking-domain pmta.eu.spgo.io # este é o endpoint para SparkPost UE


Domínio de rastreamento personalizado

Se você preferir usar seu próprio domínio de rastreamento (isso é melhor do ponto de vista de entregabilidade), faça o seguinte:

  • Crie um domínio de rastreamento com seu provedor de DNS criando um registro CNAME. Isso geralmente será um subdomínio do seu domínio de nível superior, ex. 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

Você também pode usar domínios de rastreamento HTTPS, embora isso seja mais complicado (veja os passos de configuração do SparkPost para domínios de rastreamento HTTPS).

  • Registre o domínio de rastreamento na sua conta do SparkPost e verifique-o. Espere alguns minutos antes de tentar isso, para permitir que suas mudanças de DNS se propaguem pela Internet, dependendo do seu provedor de DNS.

  • Configure o PowerMTA para usar esse domínio em vez do padrão, com

tracking-domain seudominio.com # Coloque seu próprio domínio aqui

Você pode verificar se seus emails entregues têm “pixels de abertura” adicionados e os links formatados, olhando as informações do email (no Gmail, use o menu no canto superior direito e escolha “Mostrar Original”).

Show original option highlighted


Você notará os pixels de abertura no início e no final do HTML no email. Cada link HTML também é alterado para ter REF  apontando para o domínio de rastreamento.

HTML code highlighted


Isso é tudo o que você precisa para fazer o SparkPost Signals funcionar com o rastreamento de engajamento integrado do PowerMTA.

Prevenindo links específicos em seu email HTML de serem rastreados

Você pode impedir que o PowerMTA rastreie links específicos, definindo o atributo personalizado data-msys-clicktrack  para “0”  :

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

O PowerMTA não envolverá o link. Ele também removerá esse atributo antes de transmitir a mensagem ao seu destinatário.

Selecione quais fluxos de tráfego do PowerMTA relatar ao Signals

Você pode selecionar Sinais para estar ativos:

  • Globalmente (é isso que usamos no exemplo acima)

  • Para alguns MTAs Virtuais e não para outros

  • Para alguns pools de MTA Virtuais e não para outros

  • Para endereços específicos de “Remetente” ou “De” que são retransmitidos pelo PowerMTA, em combinação com as seleções de MTA Virtual / pool de MTA Virtual

Escopo

O que é relatado aos Sinais

Quando usá-lo

Global

Todo o tráfego do host PowerMTA

Implantações simples onde todo o tráfego deve ser enviado para o SparkPost Signals.

VirtualMTA

Tráfego apenas de MTAs Virtuais selecionados

Quando você quer visões de relatórios separadas para diferentes IPs ou tipos de tráfego.

Pools de VirtualMTA

Tráfego de pools de MTA Virtuais selecionados

Quando você agrupa IPs em pools e deseja relatórios em nível de pool.

Remetente / domínio De

Mensagens de remetentes específicos ou domínios De

Quando você precisa de relatórios por cliente ou por marca dentro da mesma infraestrutura.

Essa configuração é muito poderosa e é ilustrada por meio de uma série de casos de uso de exemplo (v5.0) no Guia do Usuário.

Você pode selecionar Sinais para estar ativos:

  • Globalmente (é isso que usamos no exemplo acima)

  • Para alguns MTAs Virtuais e não para outros

  • Para alguns pools de MTA Virtuais e não para outros

  • Para endereços específicos de “Remetente” ou “De” que são retransmitidos pelo PowerMTA, em combinação com as seleções de MTA Virtual / pool de MTA Virtual

Escopo

O que é relatado aos Sinais

Quando usá-lo

Global

Todo o tráfego do host PowerMTA

Implantações simples onde todo o tráfego deve ser enviado para o SparkPost Signals.

VirtualMTA

Tráfego apenas de MTAs Virtuais selecionados

Quando você quer visões de relatórios separadas para diferentes IPs ou tipos de tráfego.

Pools de VirtualMTA

Tráfego de pools de MTA Virtuais selecionados

Quando você agrupa IPs em pools e deseja relatórios em nível de pool.

Remetente / domínio De

Mensagens de remetentes específicos ou domínios De

Quando você precisa de relatórios por cliente ou por marca dentro da mesma infraestrutura.

Essa configuração é muito poderosa e é ilustrada por meio de uma série de casos de uso de exemplo (v5.0) no Guia do Usuário.

Você pode selecionar Sinais para estar ativos:

  • Globalmente (é isso que usamos no exemplo acima)

  • Para alguns MTAs Virtuais e não para outros

  • Para alguns pools de MTA Virtuais e não para outros

  • Para endereços específicos de “Remetente” ou “De” que são retransmitidos pelo PowerMTA, em combinação com as seleções de MTA Virtual / pool de MTA Virtual

Escopo

O que é relatado aos Sinais

Quando usá-lo

Global

Todo o tráfego do host PowerMTA

Implantações simples onde todo o tráfego deve ser enviado para o SparkPost Signals.

VirtualMTA

Tráfego apenas de MTAs Virtuais selecionados

Quando você quer visões de relatórios separadas para diferentes IPs ou tipos de tráfego.

Pools de VirtualMTA

Tráfego de pools de MTA Virtuais selecionados

Quando você agrupa IPs em pools e deseja relatórios em nível de pool.

Remetente / domínio De

Mensagens de remetentes específicos ou domínios De

Quando você precisa de relatórios por cliente ou por marca dentro da mesma infraestrutura.

Essa configuração é muito poderosa e é ilustrada por meio de uma série de casos de uso de exemplo (v5.0) no Guia do Usuário.

Testando se seus eventos estão chegando ao Signals

Aqui está uma visão do SparkPost Signals, conectado ao PowerMTA. Você pode ver que o escore de saúde está variando.

Health score dashboard


Os nomes das campanhas estão disponíveis como facetas de relatório, junto com Subconta, Pool de IP, Provedor de Caixa Postal e Domínio de Envio.

Além de olhar os logs do PowerMTA, você pode verificar se os dados de eventos estão chegando ao SparkPost olhando para a tela de Integração de Signals.

Signals integration screen

Na sua tela de Busca de Eventos do SparkPost, você deve ver os eventos aparecerem dentro de poucos minutos. Estes incluirão eventos de Injeção e Entrega, bem como eventos de Rejeição e, potencialmente, eventos de Rejeição Fora de Banda e Reclamação de Spam, se você já configurou o PowerMTA para lidar com isso para você.
Se você tiver o Rastreamento de Engajamento ativado, você também verá eventos de abertura , abertura_inicial e clique .

Aqui está uma visão do SparkPost Signals, conectado ao PowerMTA. Você pode ver que o escore de saúde está variando.

Health score dashboard


Os nomes das campanhas estão disponíveis como facetas de relatório, junto com Subconta, Pool de IP, Provedor de Caixa Postal e Domínio de Envio.

Além de olhar os logs do PowerMTA, você pode verificar se os dados de eventos estão chegando ao SparkPost olhando para a tela de Integração de Signals.

Signals integration screen

Na sua tela de Busca de Eventos do SparkPost, você deve ver os eventos aparecerem dentro de poucos minutos. Estes incluirão eventos de Injeção e Entrega, bem como eventos de Rejeição e, potencialmente, eventos de Rejeição Fora de Banda e Reclamação de Spam, se você já configurou o PowerMTA para lidar com isso para você.
Se você tiver o Rastreamento de Engajamento ativado, você também verá eventos de abertura , abertura_inicial e clique .

Aqui está uma visão do SparkPost Signals, conectado ao PowerMTA. Você pode ver que o escore de saúde está variando.

Health score dashboard


Os nomes das campanhas estão disponíveis como facetas de relatório, junto com Subconta, Pool de IP, Provedor de Caixa Postal e Domínio de Envio.

Além de olhar os logs do PowerMTA, você pode verificar se os dados de eventos estão chegando ao SparkPost olhando para a tela de Integração de Signals.

Signals integration screen

Na sua tela de Busca de Eventos do SparkPost, você deve ver os eventos aparecerem dentro de poucos minutos. Estes incluirão eventos de Injeção e Entrega, bem como eventos de Rejeição e, potencialmente, eventos de Rejeição Fora de Banda e Reclamação de Spam, se você já configurou o PowerMTA para lidar com isso para você.
Se você tiver o Rastreamento de Engajamento ativado, você também verá eventos de abertura , abertura_inicial e clique .

Usando nomes significativos que se destacam bem em relatórios

Configurar os nomes do Pool VirtualMTA e os nomes dos Jobs do PowerMTA para serem significativos e legíveis por humanos vale bem a pena. Eles aparecem diretamente nas suas facetas do SparkPost Signals e no relatório de Resumo.

Como mencionado anteriormente, você não precisa criar esses pools na sua conta do SparkPost. O SparkPost os captura da sua configuração do PowerMTA.

Aqui está como os termos de configuração do PowerMTA se traduzem para os termos do SparkPost.

Termo PowerMTA Termo do SparkPost Reports / SignalsDomínio do Destinatário

(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


No entanto, o PowerMTA pode marcar virtualMTAs, Pools de MTA virtuais ou domínios Sender-or-From com um ID de subconta para fins de relatórios do SparkPost.

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

Configurar pelo menos um endereço smtp-source-host também permite ao SparkPost identificar corretamente o endereço IP de envio, de forma que ele apareça nos eventos de Injeção e Entrega, assim como na visão do relatório de Resumo.

Os nomes dos Jobs são definidos no PowerMTA via um cabeçalho na mensagem injetada. Além de permitir o controle individual do job (pausar/recomeçar etc), o que é útil em si, o PowerMTA passa os nomes para a reportagem do SparkPost Signals como “ID da campanha”. Veja o Guia do Usuário seção 12.8 “Rastreando uma campanha no PowerMTA com um JobID”.

Existem algumas coisas a serem levadas em conta em relação à nomeação de jobs. Enquanto o SparkPost (com formato JSON e escaping JSON) permite caracteres como <SPACE>  em nomes de campanha, os cabeçalhos de e-mail são mais restritivos. Os caracteres válidos permitidos no cabeçalho X-Job  são:

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

Em outras palavras, os caracteres não permitidos incluem <SPACE>, aspas duplas “  e acento grave `. Se você está acostumado a trabalhar com nomes de X-Job, isso não será surpreendente, e seus nomes de ID de campanha “simplesmente funcionarão” na reportagem do SparkPost. Se como eu, você aprendeu primeiro sobre o SparkPost, pode querer uma ferramenta para garantir que seus valores de X-Job estejam seguros; veja o recurso bônus no final deste artigo.

Termo PowerMTA

Termo do SparkPost Signals

VirtualMTA

Pool de IP

Pool VirtualMTA

Pool de IP (agrupado)

Nome do Job (cabeçalho X-Job)

ID da Campanha

smtp-source-host

Endereço IP de Envio

Domínio Bounce

Identificação do Domínio de Envio

Domínio Remetente/De

Relatórios de Subconta / No nível do Domínio

Configurar os nomes do Pool VirtualMTA e os nomes dos Jobs do PowerMTA para serem significativos e legíveis por humanos vale bem a pena. Eles aparecem diretamente nas suas facetas do SparkPost Signals e no relatório de Resumo.

Como mencionado anteriormente, você não precisa criar esses pools na sua conta do SparkPost. O SparkPost os captura da sua configuração do PowerMTA.

Aqui está como os termos de configuração do PowerMTA se traduzem para os termos do SparkPost.

Termo PowerMTA Termo do SparkPost Reports / SignalsDomínio do Destinatário

(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


No entanto, o PowerMTA pode marcar virtualMTAs, Pools de MTA virtuais ou domínios Sender-or-From com um ID de subconta para fins de relatórios do SparkPost.

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

Configurar pelo menos um endereço smtp-source-host também permite ao SparkPost identificar corretamente o endereço IP de envio, de forma que ele apareça nos eventos de Injeção e Entrega, assim como na visão do relatório de Resumo.

Os nomes dos Jobs são definidos no PowerMTA via um cabeçalho na mensagem injetada. Além de permitir o controle individual do job (pausar/recomeçar etc), o que é útil em si, o PowerMTA passa os nomes para a reportagem do SparkPost Signals como “ID da campanha”. Veja o Guia do Usuário seção 12.8 “Rastreando uma campanha no PowerMTA com um JobID”.

Existem algumas coisas a serem levadas em conta em relação à nomeação de jobs. Enquanto o SparkPost (com formato JSON e escaping JSON) permite caracteres como <SPACE>  em nomes de campanha, os cabeçalhos de e-mail são mais restritivos. Os caracteres válidos permitidos no cabeçalho X-Job  são:

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

Em outras palavras, os caracteres não permitidos incluem <SPACE>, aspas duplas “  e acento grave `. Se você está acostumado a trabalhar com nomes de X-Job, isso não será surpreendente, e seus nomes de ID de campanha “simplesmente funcionarão” na reportagem do SparkPost. Se como eu, você aprendeu primeiro sobre o SparkPost, pode querer uma ferramenta para garantir que seus valores de X-Job estejam seguros; veja o recurso bônus no final deste artigo.

Termo PowerMTA

Termo do SparkPost Signals

VirtualMTA

Pool de IP

Pool VirtualMTA

Pool de IP (agrupado)

Nome do Job (cabeçalho X-Job)

ID da Campanha

smtp-source-host

Endereço IP de Envio

Domínio Bounce

Identificação do Domínio de Envio

Domínio Remetente/De

Relatórios de Subconta / No nível do Domínio

Configurar os nomes do Pool VirtualMTA e os nomes dos Jobs do PowerMTA para serem significativos e legíveis por humanos vale bem a pena. Eles aparecem diretamente nas suas facetas do SparkPost Signals e no relatório de Resumo.

Como mencionado anteriormente, você não precisa criar esses pools na sua conta do SparkPost. O SparkPost os captura da sua configuração do PowerMTA.

Aqui está como os termos de configuração do PowerMTA se traduzem para os termos do SparkPost.

Termo PowerMTA Termo do SparkPost Reports / SignalsDomínio do Destinatário

(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


No entanto, o PowerMTA pode marcar virtualMTAs, Pools de MTA virtuais ou domínios Sender-or-From com um ID de subconta para fins de relatórios do SparkPost.

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

Configurar pelo menos um endereço smtp-source-host também permite ao SparkPost identificar corretamente o endereço IP de envio, de forma que ele apareça nos eventos de Injeção e Entrega, assim como na visão do relatório de Resumo.

Os nomes dos Jobs são definidos no PowerMTA via um cabeçalho na mensagem injetada. Além de permitir o controle individual do job (pausar/recomeçar etc), o que é útil em si, o PowerMTA passa os nomes para a reportagem do SparkPost Signals como “ID da campanha”. Veja o Guia do Usuário seção 12.8 “Rastreando uma campanha no PowerMTA com um JobID”.

Existem algumas coisas a serem levadas em conta em relação à nomeação de jobs. Enquanto o SparkPost (com formato JSON e escaping JSON) permite caracteres como <SPACE>  em nomes de campanha, os cabeçalhos de e-mail são mais restritivos. Os caracteres válidos permitidos no cabeçalho X-Job  são:

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

Em outras palavras, os caracteres não permitidos incluem <SPACE>, aspas duplas “  e acento grave `. Se você está acostumado a trabalhar com nomes de X-Job, isso não será surpreendente, e seus nomes de ID de campanha “simplesmente funcionarão” na reportagem do SparkPost. Se como eu, você aprendeu primeiro sobre o SparkPost, pode querer uma ferramenta para garantir que seus valores de X-Job estejam seguros; veja o recurso bônus no final deste artigo.

Termo PowerMTA

Termo do SparkPost Signals

VirtualMTA

Pool de IP

Pool VirtualMTA

Pool de IP (agrupado)

Nome do Job (cabeçalho X-Job)

ID da Campanha

smtp-source-host

Endereço IP de Envio

Domínio Bounce

Identificação do Domínio de Envio

Domínio Remetente/De

Relatórios de Subconta / No nível do Domínio

Eventos FBL (Reclamações de Spam) e falhas remotas (fora de banda)

O PowerMTA pode receber e processar eventos FBL (conhecidos no SparkPost como eventos de Reclamação de Spam) e rejeições remotas (conhecidas no SparkPost como rejeições fora de banda, porque a resposta chega algum tempo depois, em vez de durante a conversa SMTP).

Existem artigos no Fórum de Suporte da Port25 sobre como configurar o Processador de Rejeições e o Processador FBL. Se você já é um usuário do PowerMTA, provavelmente já os possui.

Aqui está a configuração que eu fiz para uma demonstração, baseada nesses artigos e orientada para hospedar o PowerMTA na Amazon EC2.

Se você está familiarizado com a configuração do PowerMTA nesta área, pode pular esta parte, até a próxima linha horizontal.

O PowerMTA pode receber e processar eventos FBL (conhecidos no SparkPost como eventos de Reclamação de Spam) e rejeições remotas (conhecidas no SparkPost como rejeições fora de banda, porque a resposta chega algum tempo depois, em vez de durante a conversa SMTP).

Existem artigos no Fórum de Suporte da Port25 sobre como configurar o Processador de Rejeições e o Processador FBL. Se você já é um usuário do PowerMTA, provavelmente já os possui.

Aqui está a configuração que eu fiz para uma demonstração, baseada nesses artigos e orientada para hospedar o PowerMTA na Amazon EC2.

Se você está familiarizado com a configuração do PowerMTA nesta área, pode pular esta parte, até a próxima linha horizontal.

O PowerMTA pode receber e processar eventos FBL (conhecidos no SparkPost como eventos de Reclamação de Spam) e rejeições remotas (conhecidas no SparkPost como rejeições fora de banda, porque a resposta chega algum tempo depois, em vez de durante a conversa SMTP).

Existem artigos no Fórum de Suporte da Port25 sobre como configurar o Processador de Rejeições e o Processador FBL. Se você já é um usuário do PowerMTA, provavelmente já os possui.

Aqui está a configuração que eu fiz para uma demonstração, baseada nesses artigos e orientada para hospedar o PowerMTA na Amazon EC2.

Se você está familiarizado com a configuração do PowerMTA nesta área, pode pular esta parte, até a próxima linha horizontal.

Configuração de injeção

Nós usaremos a porta 587 para mensagens injetadas, que virão pela Internet pública de outro host. Precisamos impedir que maus atores descubram e abusem desse serviço, então aplicamos autenticação por nome de usuário/senha e TLS opcional, semelhante aos endpoints de injeção SMTP do SparkPost.

Queremos ser capazes de enviar mensagens de fontes que estão devidamente autenticadas para qualquer destino. Também queremos um listener separado na porta 25 para respostas de FBL e de retorno remoto que não exigem autenticação.

# 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

Nas seguintes declarações <source> , estamos usando autenticação por nome de usuário/senha e TLS opcional para nos defender contra injeções de mensagens fraudulentas. Também definimos limites de taxa em conexões que fazem tentativas de senha falhadas.

Sua configuração pode ser diferente; por exemplo, se você tiver uma rede privada entre o injetor e o PowerMTA, você não precisará de autenticação por senha.

# 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>

A declaração <source {auth}> (veja aqui. v5.0) se aplica uma vez que a autenticação tenha sido aprovada. Aqui, ela permite o encaminhamento contínuo, configura o grupo de MTA virtual padrão a ser usado e adiciona o cabeçalho X-Job (que será relatado pelo SparkPost Signals como campaign_id).

A lista de reescrita mapeia mensagens injetadas para usar um domínio MAIL FROM específico (também conhecido como domínio de retorno ou 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>


Então configuramos nossa configuração TLS e nome de usuário / senha SMTP, de acordo com as recomendações atuais.

# # 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 o (inseguro, obsoleto) TLS v1.0 não é aceito usando minha ferramenta de teste 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


Da mesma forma para –tls-protocol tlsv1_1.

Vamos também aplicar a assinatura DKIM em nossas mensagens de saída, pois é uma boa prática (eu segui essas instruções para configurar a chave).

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

Nós usaremos a porta 587 para mensagens injetadas, que virão pela Internet pública de outro host. Precisamos impedir que maus atores descubram e abusem desse serviço, então aplicamos autenticação por nome de usuário/senha e TLS opcional, semelhante aos endpoints de injeção SMTP do SparkPost.

Queremos ser capazes de enviar mensagens de fontes que estão devidamente autenticadas para qualquer destino. Também queremos um listener separado na porta 25 para respostas de FBL e de retorno remoto que não exigem autenticação.

# 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

Nas seguintes declarações <source> , estamos usando autenticação por nome de usuário/senha e TLS opcional para nos defender contra injeções de mensagens fraudulentas. Também definimos limites de taxa em conexões que fazem tentativas de senha falhadas.

Sua configuração pode ser diferente; por exemplo, se você tiver uma rede privada entre o injetor e o PowerMTA, você não precisará de autenticação por senha.

# 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>

A declaração <source {auth}> (veja aqui. v5.0) se aplica uma vez que a autenticação tenha sido aprovada. Aqui, ela permite o encaminhamento contínuo, configura o grupo de MTA virtual padrão a ser usado e adiciona o cabeçalho X-Job (que será relatado pelo SparkPost Signals como campaign_id).

A lista de reescrita mapeia mensagens injetadas para usar um domínio MAIL FROM específico (também conhecido como domínio de retorno ou 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>


Então configuramos nossa configuração TLS e nome de usuário / senha SMTP, de acordo com as recomendações atuais.

# # 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 o (inseguro, obsoleto) TLS v1.0 não é aceito usando minha ferramenta de teste 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


Da mesma forma para –tls-protocol tlsv1_1.

Vamos também aplicar a assinatura DKIM em nossas mensagens de saída, pois é uma boa prática (eu segui essas instruções para configurar a chave).

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

Nós usaremos a porta 587 para mensagens injetadas, que virão pela Internet pública de outro host. Precisamos impedir que maus atores descubram e abusem desse serviço, então aplicamos autenticação por nome de usuário/senha e TLS opcional, semelhante aos endpoints de injeção SMTP do SparkPost.

Queremos ser capazes de enviar mensagens de fontes que estão devidamente autenticadas para qualquer destino. Também queremos um listener separado na porta 25 para respostas de FBL e de retorno remoto que não exigem autenticação.

# 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

Nas seguintes declarações <source> , estamos usando autenticação por nome de usuário/senha e TLS opcional para nos defender contra injeções de mensagens fraudulentas. Também definimos limites de taxa em conexões que fazem tentativas de senha falhadas.

Sua configuração pode ser diferente; por exemplo, se você tiver uma rede privada entre o injetor e o PowerMTA, você não precisará de autenticação por senha.

# 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>

A declaração <source {auth}> (veja aqui. v5.0) se aplica uma vez que a autenticação tenha sido aprovada. Aqui, ela permite o encaminhamento contínuo, configura o grupo de MTA virtual padrão a ser usado e adiciona o cabeçalho X-Job (que será relatado pelo SparkPost Signals como campaign_id).

A lista de reescrita mapeia mensagens injetadas para usar um domínio MAIL FROM específico (também conhecido como domínio de retorno ou 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>


Então configuramos nossa configuração TLS e nome de usuário / senha SMTP, de acordo com as recomendações atuais.

# # 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 o (inseguro, obsoleto) TLS v1.0 não é aceito usando minha ferramenta de teste 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


Da mesma forma para –tls-protocol tlsv1_1.

Vamos também aplicar a assinatura DKIM em nossas mensagens de saída, pois é uma boa prática (eu segui essas instruções para configurar a chave).

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

Configuração e nomenclatura do VirtualMTA

PowerMTA VirtualMTAs (e pools de VirtualMTA) são recursos poderosos para gerenciar fluxos de mensagens, e os recursos de relatórios do PowerMTA / SparkPost Signals funcionam melhor com estes ativos.

# # 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>


A configuração virtual-mta-pool é relatada no SparkPost como “IP Pool”, e está disponível como um fator de relatório do SparkPost Signals (o menu suspenso abaixo dos gráficos).

Health score dashboard


O Relatório Resumo também mostra IP Pool como um fator de relatório “Agrupar Por”.

Summary report dashboard


Como mencionado anteriormente neste artigo, configurar pelo menos um endereço smtp-source-host também permite que o SparkPost identifique corretamente o endereço IP de envio, de forma que ele apareça nos eventos de Injeção e Entrega, e no Relatório Resumo:

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

Isso é tudo o que você precisa para fazer uma integração básica funcionar entre o PowerMTA e o SparkPost Signals. Você encontrará o exemplo do arquivo de configuração completo aqui.

Antes de você ir, aqui está o recurso bônus que mencionei.

PowerMTA VirtualMTAs (e pools de VirtualMTA) são recursos poderosos para gerenciar fluxos de mensagens, e os recursos de relatórios do PowerMTA / SparkPost Signals funcionam melhor com estes ativos.

# # 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>


A configuração virtual-mta-pool é relatada no SparkPost como “IP Pool”, e está disponível como um fator de relatório do SparkPost Signals (o menu suspenso abaixo dos gráficos).

Health score dashboard


O Relatório Resumo também mostra IP Pool como um fator de relatório “Agrupar Por”.

Summary report dashboard


Como mencionado anteriormente neste artigo, configurar pelo menos um endereço smtp-source-host também permite que o SparkPost identifique corretamente o endereço IP de envio, de forma que ele apareça nos eventos de Injeção e Entrega, e no Relatório Resumo:

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

Isso é tudo o que você precisa para fazer uma integração básica funcionar entre o PowerMTA e o SparkPost Signals. Você encontrará o exemplo do arquivo de configuração completo aqui.

Antes de você ir, aqui está o recurso bônus que mencionei.

PowerMTA VirtualMTAs (e pools de VirtualMTA) são recursos poderosos para gerenciar fluxos de mensagens, e os recursos de relatórios do PowerMTA / SparkPost Signals funcionam melhor com estes ativos.

# # 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>


A configuração virtual-mta-pool é relatada no SparkPost como “IP Pool”, e está disponível como um fator de relatório do SparkPost Signals (o menu suspenso abaixo dos gráficos).

Health score dashboard


O Relatório Resumo também mostra IP Pool como um fator de relatório “Agrupar Por”.

Summary report dashboard


Como mencionado anteriormente neste artigo, configurar pelo menos um endereço smtp-source-host também permite que o SparkPost identifique corretamente o endereço IP de envio, de forma que ele apareça nos eventos de Injeção e Entrega, e no Relatório Resumo:

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

Isso é tudo o que você precisa para fazer uma integração básica funcionar entre o PowerMTA e o SparkPost Signals. Você encontrará o exemplo do arquivo de configuração completo aqui.

Antes de você ir, aqui está o recurso bônus que mencionei.

Recurso bônus: Verificação/filtragem do nome do X-Job

Para garantir que qualquer string de caracteres seja segura para uso como um nome de PowerMTA X-Job  , aqui está uma função simples em Python para mapear quaisquer caracteres inseguros para um sublinhado “_”

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)

Isso usa expressões regulares Python de uma maneira específica. Declara o conjunto de caracteres não permitidos usando o operador “complemento de conjunto” ^ em vez de listar todos os caracteres permitidos. Isso significa que capturamos (e tornamos seguros) caracteres além do habitual conjunto de 7 bits. Podemos mostrar isso usando este fragmento de teste:

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

Dando

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

Você pode ver que <SPACE>, aspas duplas “, e crase `, bem como todos os caracteres além de ~ são mapeados para sublinhado.

Para garantir que qualquer string de caracteres seja segura para uso como um nome de PowerMTA X-Job  , aqui está uma função simples em Python para mapear quaisquer caracteres inseguros para um sublinhado “_”

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)

Isso usa expressões regulares Python de uma maneira específica. Declara o conjunto de caracteres não permitidos usando o operador “complemento de conjunto” ^ em vez de listar todos os caracteres permitidos. Isso significa que capturamos (e tornamos seguros) caracteres além do habitual conjunto de 7 bits. Podemos mostrar isso usando este fragmento de teste:

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

Dando

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

Você pode ver que <SPACE>, aspas duplas “, e crase `, bem como todos os caracteres além de ~ são mapeados para sublinhado.

Para garantir que qualquer string de caracteres seja segura para uso como um nome de PowerMTA X-Job  , aqui está uma função simples em Python para mapear quaisquer caracteres inseguros para um sublinhado “_”

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)

Isso usa expressões regulares Python de uma maneira específica. Declara o conjunto de caracteres não permitidos usando o operador “complemento de conjunto” ^ em vez de listar todos os caracteres permitidos. Isso significa que capturamos (e tornamos seguros) caracteres além do habitual conjunto de 7 bits. Podemos mostrar isso usando este fragmento de teste:

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

Dando

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

Você pode ver que <SPACE>, aspas duplas “, e crase `, bem como todos os caracteres além de ~ são mapeados para sublinhado.

Outras notícias

Leia mais desta categoria

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

A plataforma completa nativa de IA que escalará com o seu negócio.

© 2025 Pássaro

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

A plataforma completa nativa de IA que escalará com o seu negócio.

© 2025 Pássaro