Implantando Sinais para Ambientes Locais: Integração com PowerMTA
Pássaro
30 de ago. de 2019
1 min read

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 ... successfullye 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) oupmta.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-spaceexclui 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çalhoX-Jobdo 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”).

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.

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”).

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.

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”).

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.

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.

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.

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.

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.

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.

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.

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).

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

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:

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).

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

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:

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).

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

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:

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.



