Implementazione dei segnali per On-Premises: integrazione di PowerMTA

Uccello

30 ago 2019

Email

1 min read

Implementazione dei segnali per On-Premises: integrazione di PowerMTA

Conclusioni principali

    • Scopo: Questa guida spiega come integrare PowerMTA 5.0+ con SparkPost Signals per trasmettere dati sugli eventi e sul coinvolgimento (rimbalzi, aperture, clic, reclami per spam) da MTAs locali direttamente nel livello di analisi di SparkPost.

    • Configurazione principale:

      • Aggiungi enable-signals true e definisci il tuo endpoint di ingestione SparkPost (https://api.sparkpost.com/api/v1/ingest/events o l'equivalente EU).

      • Utilizza una chiave API valida con permesso “Eventi in Entrata: Scrittura”.

      • Specifica customer-id e, facoltativamente, configura domini di tracciamento personalizzati per un miglioramento della recapitabilità.

    • Configurazione del tracciamento: Il tracciamento del coinvolgimento di PowerMTA inietta automaticamente i pixel di apertura e clic nelle email HTML. Puoi disabilitare il tracciamento per link con l'attributo data-msys-clicktrack="0".

    • Reportistica selettiva: I Signals possono essere abilitati a livello globale o limitati a specifici VirtualMTAs, pool o domini mittenti, consentendo un controllo dettagliato dei dati.

    • Test & verifica: Usa il dashboard di integrazione Signals e i log di PowerMTA per confermare l'ingestione degli eventi e monitorare in tempo reale Punteggi di Salute, rimbalzi e metriche di coinvolgimento.

    • Ottimizzazione della recapitabilità:

      • Utilizza nomi significativi per VirtualMTA e Job — questi mappano direttamente a IP Pools e Campaign IDs nei report di SparkPost.

      • Configura DKIM signing, TLS enforcement, e regole di relay adeguate per prevenire iniezioni non autorizzate.

    • Configurazione avanzata: L'articolo include anche snippet pronti all'uso per gestione dei rimbalzi FBL & fuori banda, iniezione SMTP autenticata (porta 587), e codice Python per sanificare gli header X-Job per la compatibilità.

Q&A Highlights

  • Cosa fa effettivamente l'integrazione di Signals?

    Carica automaticamente gli eventi dei messaggi di PowerMTA (iniezione, consegna, rimbalzo, coinvolgimento) nel tuo account SparkPost in modo che tu possa accedere a dashboard come Health Score, report di ritardo, e monitoraggio delle trappole Spam.

  • Perché integrare Signals con un MTA on-prem?

    Molte imprese gestiscono infrastrutture di posta auto-ospitate per motivi di conformità, ma vogliono comunque le capacità di analisi e monitoraggio di SparkPost. Signals colma questa lacuna senza migrare la consegna della posta al cloud.

  • Come posso verificare che gli eventi stiano fluendo verso SparkPost?

    Controlla i log di PowerMTA per Signals: Transferred ... successfully e conferma le voci degli eventi sotto Signals → Events Search in SparkPost.

  • Posso usare il mio dominio di tracciamento?

    Sì — configura un CNAME come track.mycompany.com → pmta.spgo.io (US) o pmta.eu.spgo.io (EU), quindi registralo e verificano in SparkPost per la coerenza del branding e della reputazione.

  • Che dire della privacy dei dati o dell'uso del disco?

    La direttiva min-free-space elimina automaticamente i vecchi file di evento JSON quando lo spazio su disco si esaurisce, prevenendo l'accumulo locale di dati di telemetria.

  • Qual è la "bonus feature" alla fine?

    Un'utilità regex di Python (pmtaSafeJobID) che garantisce che i nomi di campagne/lavori utilizzino solo caratteri validi nel formato dell'intestazione X-Job di PowerMTA, sostituendo i caratteri non sicuri con trattini bassi.

Esaminiamo i dettagli della configurazione di PowerMTA per SparkPost Signals. Avrai bisogno di:

  • Un host per eseguire l'ultima versione di PowerMTA – nuovo o una macchina esistente

  • Un account SparkPost con permessi chiave API per "Incoming Events: Write" come descritto qui

Configureremo PowerMTA per trasmettere eventi al tuo account SparkPost, quindi sarai in grado di utilizzare i seguenti:

Esaminiamo i dettagli della configurazione di PowerMTA per SparkPost Signals. Avrai bisogno di:

  • Un host per eseguire l'ultima versione di PowerMTA – nuovo o una macchina esistente

  • Un account SparkPost con permessi chiave API per "Incoming Events: Write" come descritto qui

Configureremo PowerMTA per trasmettere eventi al tuo account SparkPost, quindi sarai in grado di utilizzare i seguenti:

Esaminiamo i dettagli della configurazione di PowerMTA per SparkPost Signals. Avrai bisogno di:

  • Un host per eseguire l'ultima versione di PowerMTA – nuovo o una macchina esistente

  • Un account SparkPost con permessi chiave API per "Incoming Events: Write" come descritto qui

Configureremo PowerMTA per trasmettere eventi al tuo account SparkPost, quindi sarai in grado di utilizzare i seguenti:

Panoramica dell'installazione e configurazione

Innanzitutto, installa (o aggiorna) a PowerMTA 5.0 r4 o successivo, seguendo le solite istruzioni di installazione v5.0 che sono abbastanza semplici. Successivamente, seguiremo i seguenti passaggi:

  • Configura il connettore PowerMTA a SparkPost Signals

  • Configura il Tracciamento del Coinvolgimento con un dominio di tracciamento personalizzato

  • Seleziona quali flussi di traffico PowerMTA riportare a Signals

  • Testare che i tuoi eventi stiano raggiungendo Signals

  • Rivedere come utilizzare nomi significativi che appaiano bene nei report.

Copreremo anche gli altri aspetti specifici di configurazione di PowerMTA utilizzati nella nostra demo di Signals:

  • Eventi FBL (Reclami di Spam) e rimbalzi remoti (out-of-band)

  • Configurazione dell'Iniezione, incluso DKIM

  • Configurazione FBL e OOB

  • Impostazione e denominazione di VirtualMTA (e come appare nei tuoi report di SparkPost Signals)

Infine, c'è una "funzione bonus" con codice per garantire che i nomi delle tue campagne siano compatibili con le convenzioni di nome PowerMTA X-Job .

Innanzitutto, installa (o aggiorna) a PowerMTA 5.0 r4 o successivo, seguendo le solite istruzioni di installazione v5.0 che sono abbastanza semplici. Successivamente, seguiremo i seguenti passaggi:

  • Configura il connettore PowerMTA a SparkPost Signals

  • Configura il Tracciamento del Coinvolgimento con un dominio di tracciamento personalizzato

  • Seleziona quali flussi di traffico PowerMTA riportare a Signals

  • Testare che i tuoi eventi stiano raggiungendo Signals

  • Rivedere come utilizzare nomi significativi che appaiano bene nei report.

Copreremo anche gli altri aspetti specifici di configurazione di PowerMTA utilizzati nella nostra demo di Signals:

  • Eventi FBL (Reclami di Spam) e rimbalzi remoti (out-of-band)

  • Configurazione dell'Iniezione, incluso DKIM

  • Configurazione FBL e OOB

  • Impostazione e denominazione di VirtualMTA (e come appare nei tuoi report di SparkPost Signals)

Infine, c'è una "funzione bonus" con codice per garantire che i nomi delle tue campagne siano compatibili con le convenzioni di nome PowerMTA X-Job .

Innanzitutto, installa (o aggiorna) a PowerMTA 5.0 r4 o successivo, seguendo le solite istruzioni di installazione v5.0 che sono abbastanza semplici. Successivamente, seguiremo i seguenti passaggi:

  • Configura il connettore PowerMTA a SparkPost Signals

  • Configura il Tracciamento del Coinvolgimento con un dominio di tracciamento personalizzato

  • Seleziona quali flussi di traffico PowerMTA riportare a Signals

  • Testare che i tuoi eventi stiano raggiungendo Signals

  • Rivedere come utilizzare nomi significativi che appaiano bene nei report.

Copreremo anche gli altri aspetti specifici di configurazione di PowerMTA utilizzati nella nostra demo di Signals:

  • Eventi FBL (Reclami di Spam) e rimbalzi remoti (out-of-band)

  • Configurazione dell'Iniezione, incluso DKIM

  • Configurazione FBL e OOB

  • Impostazione e denominazione di VirtualMTA (e come appare nei tuoi report di SparkPost Signals)

Infine, c'è una "funzione bonus" con codice per garantire che i nomi delle tue campagne siano compatibili con le convenzioni di nome PowerMTA X-Job .

FBL e configurazione OOB

Ora .. finalmente .. dichiariamo quali domini specifici sono aperti per risposte remote tramite bounce e FBL. Non vogliamo trasmetterle da nessuna parte (per prevenire attacchi di ritorno), semplicemente processarle 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>

Si può vedere che ho impostato due domini di bounce, mentre mi stavo divertendo a usare/non usare la regola di riscrittura mfrom.

Il dominio FBL è di solito registrato con servizi esterni come Microsoft SNDS; vedere questo articolo per maggiori informazioni. Per questo demo, i FBL arriveranno da Bouncy Sink, quindi non c'è bisogno di registrarsi.

Ora .. finalmente .. dichiariamo quali domini specifici sono aperti per risposte remote tramite bounce e FBL. Non vogliamo trasmetterle da nessuna parte (per prevenire attacchi di ritorno), semplicemente processarle 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>

Si può vedere che ho impostato due domini di bounce, mentre mi stavo divertendo a usare/non usare la regola di riscrittura mfrom.

Il dominio FBL è di solito registrato con servizi esterni come Microsoft SNDS; vedere questo articolo per maggiori informazioni. Per questo demo, i FBL arriveranno da Bouncy Sink, quindi non c'è bisogno di registrarsi.

Ora .. finalmente .. dichiariamo quali domini specifici sono aperti per risposte remote tramite bounce e FBL. Non vogliamo trasmetterle da nessuna parte (per prevenire attacchi di ritorno), semplicemente processarle 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>

Si può vedere che ho impostato due domini di bounce, mentre mi stavo divertendo a usare/non usare la regola di riscrittura mfrom.

Il dominio FBL è di solito registrato con servizi esterni come Microsoft SNDS; vedere questo articolo per maggiori informazioni. Per questo demo, i FBL arriveranno da Bouncy Sink, quindi non c'è bisogno di registrarsi.

Configura PowerMTA connector

La configurazione dei Signals è descritta nella Guida Utente 5.0 sezione 10.1. Qui inizieremo con il "Use Case #2", che abilita i Signals per tutto il traffico da questo host PowerMTA e abilita il monitoraggio dell'engagement di 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


Di seguito cosa fa ogni attributo:

api-key

Questo è unico per il tuo account SparkPost, è il valore che hai ottenuto da SparkPost in precedenza.


upload-url

Questo deve corrispondere all'indirizzo del tuo servizio API SparkPost, sia esso negli Stati Uniti o nell'UE. Per ulteriori informazioni vedi qui. I valori usuali sono:

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

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


log-verbose

Questa direttiva è facoltativa e, quando abilitata, fornisce un po' più di informazioni nel file pmta.log, il che può essere utile durante la configurazione per confermare che tutto funzioni correttamente. Ogni minuto, anche quando non c'è traffico, vedrai:

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


Con il traffico vedrai qualcosa come:

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

Questo indica a PowerMTA la soglia di spazio su disco alla quale dovrebbe iniziare a eliminare i file di eventi JSON di SparkPost più vecchi per fare spazio a nuovi file quando lo spazio su disco si sta esaurendo.


enable-signals

Questo indica a PowerMTA di caricare su Signals, in questo caso globalmente per tutto il traffico (maggiori informazioni qui, per v5.0). Puoi essere più selettivo su quale flusso di traffico caricare, se lo desideri.


Puoi anche contrassegnare un particolare traffico PowerMTA da riferire come appartenente a un subaccount di SparkPost - questo è un altro modo per distinguere un particolare flusso di traffico da un altro.


engagement-tracking, customer-id
La soluzione di Engagement Tracking di PowerMTA predefinisce il dominio di tracciamento per il servizio ospitato di SparkPost negli Stati Uniti. Specifica il tuo ID cliente numerico di SparkPost; ecco le istruzioni per trovarlo.


tracking-domain

Per gli account SparkPost dell'UE, aggiungi la seguente riga:

tracking-domain pmta.eu.spgo.io # questo è l'endpoint per SparkPost EU


Dominio di tracciamento personalizzato

Se preferisci utilizzare il tuo dominio di tracciamento (questo è migliore dal punto di vista della recapitabilità), fai quanto segue:

  • Crea un dominio di tracciamento con il tuo provider DNS creando un record CNAME. Questo di solito sarà un sottodominio del tuo dominio di primo livello, es. 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

Puoi anche usare domini di tracciamento HTTPS, anche se questo è più complesso (vedi i passaggi di configurazione di SparkPost per i domini di tracciamento HTTPS).

  • Registrare il dominio di tracciamento nel tuo account SparkPost, e verificarlo. Attendi qualche minuto prima di provare, per permettere che le modifiche DNS si propaghino attraverso Internet, a seconda del tuo provider DNS.

  • Configura PowerMTA per utilizzare quel dominio invece di quello predefinito, con

tracking-domain yourdomain.com # Metti qui il tuo dominio

Puoi controllare che le tue email inviate abbiano "pixel di apertura" aggiunti e i link avvolti, esaminando l'interno dell'email (in Gmail, usa il menu in alto a destra e scegli "Mostra originale").

Show original option highlighted


Noterai i pixel di apertura all'inizio e alla fine dell'HTML nella email. Ogni link HTML è anche cambiato per avere REF puntante al dominio di tracciamento.

HTML code highlighted


È tutto ciò che serve per far funzionare i Signals di SparkPost con il monitoraggio dell'engagement integrato di PowerMTA.

Prevenzione del tracciamento su link specifici nelle tue email HTML

Puoi impedire a PowerMTA di tracciare link specifici impostando l'attributo personalizzato data-msys-clicktrack a "0"  :

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

PowerMTA non avvolgerà il link. Rimuoverà anche quell'attributo prima di trasmettere il messaggio al tuo destinatario.

La configurazione dei Signals è descritta nella Guida Utente 5.0 sezione 10.1. Qui inizieremo con il "Use Case #2", che abilita i Signals per tutto il traffico da questo host PowerMTA e abilita il monitoraggio dell'engagement di 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


Di seguito cosa fa ogni attributo:

api-key

Questo è unico per il tuo account SparkPost, è il valore che hai ottenuto da SparkPost in precedenza.


upload-url

Questo deve corrispondere all'indirizzo del tuo servizio API SparkPost, sia esso negli Stati Uniti o nell'UE. Per ulteriori informazioni vedi qui. I valori usuali sono:

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

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


log-verbose

Questa direttiva è facoltativa e, quando abilitata, fornisce un po' più di informazioni nel file pmta.log, il che può essere utile durante la configurazione per confermare che tutto funzioni correttamente. Ogni minuto, anche quando non c'è traffico, vedrai:

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


Con il traffico vedrai qualcosa come:

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

Questo indica a PowerMTA la soglia di spazio su disco alla quale dovrebbe iniziare a eliminare i file di eventi JSON di SparkPost più vecchi per fare spazio a nuovi file quando lo spazio su disco si sta esaurendo.


enable-signals

Questo indica a PowerMTA di caricare su Signals, in questo caso globalmente per tutto il traffico (maggiori informazioni qui, per v5.0). Puoi essere più selettivo su quale flusso di traffico caricare, se lo desideri.


Puoi anche contrassegnare un particolare traffico PowerMTA da riferire come appartenente a un subaccount di SparkPost - questo è un altro modo per distinguere un particolare flusso di traffico da un altro.


engagement-tracking, customer-id
La soluzione di Engagement Tracking di PowerMTA predefinisce il dominio di tracciamento per il servizio ospitato di SparkPost negli Stati Uniti. Specifica il tuo ID cliente numerico di SparkPost; ecco le istruzioni per trovarlo.


tracking-domain

Per gli account SparkPost dell'UE, aggiungi la seguente riga:

tracking-domain pmta.eu.spgo.io # questo è l'endpoint per SparkPost EU


Dominio di tracciamento personalizzato

Se preferisci utilizzare il tuo dominio di tracciamento (questo è migliore dal punto di vista della recapitabilità), fai quanto segue:

  • Crea un dominio di tracciamento con il tuo provider DNS creando un record CNAME. Questo di solito sarà un sottodominio del tuo dominio di primo livello, es. 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

Puoi anche usare domini di tracciamento HTTPS, anche se questo è più complesso (vedi i passaggi di configurazione di SparkPost per i domini di tracciamento HTTPS).

  • Registrare il dominio di tracciamento nel tuo account SparkPost, e verificarlo. Attendi qualche minuto prima di provare, per permettere che le modifiche DNS si propaghino attraverso Internet, a seconda del tuo provider DNS.

  • Configura PowerMTA per utilizzare quel dominio invece di quello predefinito, con

tracking-domain yourdomain.com # Metti qui il tuo dominio

Puoi controllare che le tue email inviate abbiano "pixel di apertura" aggiunti e i link avvolti, esaminando l'interno dell'email (in Gmail, usa il menu in alto a destra e scegli "Mostra originale").

Show original option highlighted


Noterai i pixel di apertura all'inizio e alla fine dell'HTML nella email. Ogni link HTML è anche cambiato per avere REF puntante al dominio di tracciamento.

HTML code highlighted


È tutto ciò che serve per far funzionare i Signals di SparkPost con il monitoraggio dell'engagement integrato di PowerMTA.

Prevenzione del tracciamento su link specifici nelle tue email HTML

Puoi impedire a PowerMTA di tracciare link specifici impostando l'attributo personalizzato data-msys-clicktrack a "0"  :

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

PowerMTA non avvolgerà il link. Rimuoverà anche quell'attributo prima di trasmettere il messaggio al tuo destinatario.

La configurazione dei Signals è descritta nella Guida Utente 5.0 sezione 10.1. Qui inizieremo con il "Use Case #2", che abilita i Signals per tutto il traffico da questo host PowerMTA e abilita il monitoraggio dell'engagement di 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


Di seguito cosa fa ogni attributo:

api-key

Questo è unico per il tuo account SparkPost, è il valore che hai ottenuto da SparkPost in precedenza.


upload-url

Questo deve corrispondere all'indirizzo del tuo servizio API SparkPost, sia esso negli Stati Uniti o nell'UE. Per ulteriori informazioni vedi qui. I valori usuali sono:

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

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


log-verbose

Questa direttiva è facoltativa e, quando abilitata, fornisce un po' più di informazioni nel file pmta.log, il che può essere utile durante la configurazione per confermare che tutto funzioni correttamente. Ogni minuto, anche quando non c'è traffico, vedrai:

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


Con il traffico vedrai qualcosa come:

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

Questo indica a PowerMTA la soglia di spazio su disco alla quale dovrebbe iniziare a eliminare i file di eventi JSON di SparkPost più vecchi per fare spazio a nuovi file quando lo spazio su disco si sta esaurendo.


enable-signals

Questo indica a PowerMTA di caricare su Signals, in questo caso globalmente per tutto il traffico (maggiori informazioni qui, per v5.0). Puoi essere più selettivo su quale flusso di traffico caricare, se lo desideri.


Puoi anche contrassegnare un particolare traffico PowerMTA da riferire come appartenente a un subaccount di SparkPost - questo è un altro modo per distinguere un particolare flusso di traffico da un altro.


engagement-tracking, customer-id
La soluzione di Engagement Tracking di PowerMTA predefinisce il dominio di tracciamento per il servizio ospitato di SparkPost negli Stati Uniti. Specifica il tuo ID cliente numerico di SparkPost; ecco le istruzioni per trovarlo.


tracking-domain

Per gli account SparkPost dell'UE, aggiungi la seguente riga:

tracking-domain pmta.eu.spgo.io # questo è l'endpoint per SparkPost EU


Dominio di tracciamento personalizzato

Se preferisci utilizzare il tuo dominio di tracciamento (questo è migliore dal punto di vista della recapitabilità), fai quanto segue:

  • Crea un dominio di tracciamento con il tuo provider DNS creando un record CNAME. Questo di solito sarà un sottodominio del tuo dominio di primo livello, es. 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

Puoi anche usare domini di tracciamento HTTPS, anche se questo è più complesso (vedi i passaggi di configurazione di SparkPost per i domini di tracciamento HTTPS).

  • Registrare il dominio di tracciamento nel tuo account SparkPost, e verificarlo. Attendi qualche minuto prima di provare, per permettere che le modifiche DNS si propaghino attraverso Internet, a seconda del tuo provider DNS.

  • Configura PowerMTA per utilizzare quel dominio invece di quello predefinito, con

tracking-domain yourdomain.com # Metti qui il tuo dominio

Puoi controllare che le tue email inviate abbiano "pixel di apertura" aggiunti e i link avvolti, esaminando l'interno dell'email (in Gmail, usa il menu in alto a destra e scegli "Mostra originale").

Show original option highlighted


Noterai i pixel di apertura all'inizio e alla fine dell'HTML nella email. Ogni link HTML è anche cambiato per avere REF puntante al dominio di tracciamento.

HTML code highlighted


È tutto ciò che serve per far funzionare i Signals di SparkPost con il monitoraggio dell'engagement integrato di PowerMTA.

Prevenzione del tracciamento su link specifici nelle tue email HTML

Puoi impedire a PowerMTA di tracciare link specifici impostando l'attributo personalizzato data-msys-clicktrack a "0"  :

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

PowerMTA non avvolgerà il link. Rimuoverà anche quell'attributo prima di trasmettere il messaggio al tuo destinatario.

Seleziona quali flussi di traffico PowerMTA segnalare a Signals

Puoi selezionare Segnali da attivare:

  • Globalmente (questo è ciò che abbiamo utilizzato nell'esempio sopra)

  • Per alcuni Virtual MTAs e non altri

  • Per alcuni pool di Virtual MTA e non altri

  • Per indirizzi specifici “Sender” o “From” trasmessi da PowerMTA, in combinazione con le selezioni di Virtual MTA / pool di Virtual MTA

Ambito

Cosa viene segnalato a Signals

Quando utilizzarlo

Globale

Tutto il traffico dall'host PowerMTA

Implementazioni semplici dove tutto il traffico dovrebbe alimentare SparkPost Signals.

VirtualMTA

Traffico solo dai VirtualMTAs selezionati

Quando si desiderano visualizzazioni di report separate per diversi IP o tipi di traffico.

Pool VirtualMTA

Traffico dai pool di VirtualMTA selezionati

Quando si raggruppano gli IP in pool e si desidera reportistica a livello di pool.

Dominio Sender / From

Messaggi da domini Sender o From specifici

Quando si necessita di reportistica per cliente o marchio all'interno della stessa infrastruttura.

Questa configurazione è molto potente ed è illustrata attraverso una serie di casi d'uso esemplificativi (v5.0) nella Guida Utente.

Puoi selezionare Segnali da attivare:

  • Globalmente (questo è ciò che abbiamo utilizzato nell'esempio sopra)

  • Per alcuni Virtual MTAs e non altri

  • Per alcuni pool di Virtual MTA e non altri

  • Per indirizzi specifici “Sender” o “From” trasmessi da PowerMTA, in combinazione con le selezioni di Virtual MTA / pool di Virtual MTA

Ambito

Cosa viene segnalato a Signals

Quando utilizzarlo

Globale

Tutto il traffico dall'host PowerMTA

Implementazioni semplici dove tutto il traffico dovrebbe alimentare SparkPost Signals.

VirtualMTA

Traffico solo dai VirtualMTAs selezionati

Quando si desiderano visualizzazioni di report separate per diversi IP o tipi di traffico.

Pool VirtualMTA

Traffico dai pool di VirtualMTA selezionati

Quando si raggruppano gli IP in pool e si desidera reportistica a livello di pool.

Dominio Sender / From

Messaggi da domini Sender o From specifici

Quando si necessita di reportistica per cliente o marchio all'interno della stessa infrastruttura.

Questa configurazione è molto potente ed è illustrata attraverso una serie di casi d'uso esemplificativi (v5.0) nella Guida Utente.

Puoi selezionare Segnali da attivare:

  • Globalmente (questo è ciò che abbiamo utilizzato nell'esempio sopra)

  • Per alcuni Virtual MTAs e non altri

  • Per alcuni pool di Virtual MTA e non altri

  • Per indirizzi specifici “Sender” o “From” trasmessi da PowerMTA, in combinazione con le selezioni di Virtual MTA / pool di Virtual MTA

Ambito

Cosa viene segnalato a Signals

Quando utilizzarlo

Globale

Tutto il traffico dall'host PowerMTA

Implementazioni semplici dove tutto il traffico dovrebbe alimentare SparkPost Signals.

VirtualMTA

Traffico solo dai VirtualMTAs selezionati

Quando si desiderano visualizzazioni di report separate per diversi IP o tipi di traffico.

Pool VirtualMTA

Traffico dai pool di VirtualMTA selezionati

Quando si raggruppano gli IP in pool e si desidera reportistica a livello di pool.

Dominio Sender / From

Messaggi da domini Sender o From specifici

Quando si necessita di reportistica per cliente o marchio all'interno della stessa infrastruttura.

Questa configurazione è molto potente ed è illustrata attraverso una serie di casi d'uso esemplificativi (v5.0) nella Guida Utente.

Testare che i tuoi eventi stiano raggiungendo Signals

Ecco una vista di SparkPost Signals, connesso a PowerMTA. Puoi vedere che il punteggio di salute varia.

Health score dashboard


I nomi delle Campagne sono disponibili come aspetti di reportistica, insieme a Subaccount, IP Pool, Mailbox Provider e Sending Domain.

Oltre a consultare i log di PowerMTA, puoi verificare che i dati degli eventi raggiungono SparkPost esaminando lo schermo di Signals Integration.

Signals integration screen

Nella tua schermata di SparkPost Events Search, dovresti vedere gli eventi comparire entro pochi minuti. Questi includeranno eventi Injection e Delivery, oltre a Bounce, e potenzialmente eventi Out-of-Band Bounce e Reclamo Spam, se hai già configurato PowerMTA per gestirli per te.
Se hai abilitato il tracciamento del coinvolgimento, vedrai anche eventi di open, initial_open e click.

Ecco una vista di SparkPost Signals, connesso a PowerMTA. Puoi vedere che il punteggio di salute varia.

Health score dashboard


I nomi delle Campagne sono disponibili come aspetti di reportistica, insieme a Subaccount, IP Pool, Mailbox Provider e Sending Domain.

Oltre a consultare i log di PowerMTA, puoi verificare che i dati degli eventi raggiungono SparkPost esaminando lo schermo di Signals Integration.

Signals integration screen

Nella tua schermata di SparkPost Events Search, dovresti vedere gli eventi comparire entro pochi minuti. Questi includeranno eventi Injection e Delivery, oltre a Bounce, e potenzialmente eventi Out-of-Band Bounce e Reclamo Spam, se hai già configurato PowerMTA per gestirli per te.
Se hai abilitato il tracciamento del coinvolgimento, vedrai anche eventi di open, initial_open e click.

Ecco una vista di SparkPost Signals, connesso a PowerMTA. Puoi vedere che il punteggio di salute varia.

Health score dashboard


I nomi delle Campagne sono disponibili come aspetti di reportistica, insieme a Subaccount, IP Pool, Mailbox Provider e Sending Domain.

Oltre a consultare i log di PowerMTA, puoi verificare che i dati degli eventi raggiungono SparkPost esaminando lo schermo di Signals Integration.

Signals integration screen

Nella tua schermata di SparkPost Events Search, dovresti vedere gli eventi comparire entro pochi minuti. Questi includeranno eventi Injection e Delivery, oltre a Bounce, e potenzialmente eventi Out-of-Band Bounce e Reclamo Spam, se hai già configurato PowerMTA per gestirli per te.
Se hai abilitato il tracciamento del coinvolgimento, vedrai anche eventi di open, initial_open e click.

Usare nomi significativi che appaiano bene nei report

Impostare i nomi dei pool VirtualMTA di PowerMTA e i nomi dei lavori in modo che siano significativi e leggibili è sicuramente un compito utile da svolgere. Questi appaiono direttamente nei tuoi faccette Signal di SparkPost e nel rapporto di riepilogo.

Come accennato in precedenza, non è necessario creare questi pool nel tuo account SparkPost. SparkPost li rileva dalla configurazione di PowerMTA.

Ecco come i termini di configurazione di PowerMTA si traducano in termini di SparkPost.

Termine PowerMTA Termine Report/Signal SparkPostDominio destinatario

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


Tuttavia, PowerMTA può etichettare VirtualMTAs, Pool MTA virtuali o domini Sender-or-From con un ID sottoconto per scopi di generazione report di SparkPost.

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

Impostare almeno un indirizzo smtp-source-host consente inoltre a SparkPost di identificare correttamente l'indirizzo IP inviante in modo che appaia negli eventi di Iniezione e Consegna, nonché nella visualizzazione del rapporto di riepilogo.

I nomi dei Job sono impostati in PowerMTA tramite un'intestazione nel messaggio iniettato. Oltre ad abilitare il controllo individuale dei lavori (pausa/ripresa ecc.), utile di per sè, PowerMTA passa i nomi al reporting Signal di SparkPost come “ID campagna”. Vedi la Guida dell'Utente v5.0 sezione 12.8 “Tracciare una campagna in PowerMTA con un JobID”.

Ci sono alcune cose di cui essere consapevoli riguardo alla denominazione dei lavori. Mentre SparkPost (con formato JSON, e escaping JSON) consente caratteri come <SPACE> nei nomi delle campagne, le intestazioni email sono più restrittive. I caratteri validi consentiti nell'intestazione X-Job sono:

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

In altre parole, i caratteri non consentiti includono <SPACE>, doppi apici “ e accento grave `. Se sei abituato a lavorare con i nomi X-Job, ciò non ti sorprenderà e i nomi degli ID campagna “funzioneranno semplicemente” nei report di SparkPost. Se, come me, hai appreso prima SparkPost, potresti voler avere uno strumento per garantire che i tuoi valori X-Job siano sicuri; vedere la funzione bonus alla fine di questo articolo.

Termine PowerMTA

Termine Signal di SparkPost

VirtualMTA

Pool IP

Pool VirtualMTA

Pool IP (raggruppato)

Nome Job (intestazione X-Job)

ID Campagna

smtp-source-host

Indirizzo IP Inviante

Dominio Bounce

Identificazione Dominio Mittente

Dominio Mittente/Da

Rapporti a Livello di Sottoconto/Dominio

Impostare i nomi dei pool VirtualMTA di PowerMTA e i nomi dei lavori in modo che siano significativi e leggibili è sicuramente un compito utile da svolgere. Questi appaiono direttamente nei tuoi faccette Signal di SparkPost e nel rapporto di riepilogo.

Come accennato in precedenza, non è necessario creare questi pool nel tuo account SparkPost. SparkPost li rileva dalla configurazione di PowerMTA.

Ecco come i termini di configurazione di PowerMTA si traducano in termini di SparkPost.

Termine PowerMTA Termine Report/Signal SparkPostDominio destinatario

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


Tuttavia, PowerMTA può etichettare VirtualMTAs, Pool MTA virtuali o domini Sender-or-From con un ID sottoconto per scopi di generazione report di SparkPost.

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

Impostare almeno un indirizzo smtp-source-host consente inoltre a SparkPost di identificare correttamente l'indirizzo IP inviante in modo che appaia negli eventi di Iniezione e Consegna, nonché nella visualizzazione del rapporto di riepilogo.

I nomi dei Job sono impostati in PowerMTA tramite un'intestazione nel messaggio iniettato. Oltre ad abilitare il controllo individuale dei lavori (pausa/ripresa ecc.), utile di per sè, PowerMTA passa i nomi al reporting Signal di SparkPost come “ID campagna”. Vedi la Guida dell'Utente v5.0 sezione 12.8 “Tracciare una campagna in PowerMTA con un JobID”.

Ci sono alcune cose di cui essere consapevoli riguardo alla denominazione dei lavori. Mentre SparkPost (con formato JSON, e escaping JSON) consente caratteri come <SPACE> nei nomi delle campagne, le intestazioni email sono più restrittive. I caratteri validi consentiti nell'intestazione X-Job sono:

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

In altre parole, i caratteri non consentiti includono <SPACE>, doppi apici “ e accento grave `. Se sei abituato a lavorare con i nomi X-Job, ciò non ti sorprenderà e i nomi degli ID campagna “funzioneranno semplicemente” nei report di SparkPost. Se, come me, hai appreso prima SparkPost, potresti voler avere uno strumento per garantire che i tuoi valori X-Job siano sicuri; vedere la funzione bonus alla fine di questo articolo.

Termine PowerMTA

Termine Signal di SparkPost

VirtualMTA

Pool IP

Pool VirtualMTA

Pool IP (raggruppato)

Nome Job (intestazione X-Job)

ID Campagna

smtp-source-host

Indirizzo IP Inviante

Dominio Bounce

Identificazione Dominio Mittente

Dominio Mittente/Da

Rapporti a Livello di Sottoconto/Dominio

Impostare i nomi dei pool VirtualMTA di PowerMTA e i nomi dei lavori in modo che siano significativi e leggibili è sicuramente un compito utile da svolgere. Questi appaiono direttamente nei tuoi faccette Signal di SparkPost e nel rapporto di riepilogo.

Come accennato in precedenza, non è necessario creare questi pool nel tuo account SparkPost. SparkPost li rileva dalla configurazione di PowerMTA.

Ecco come i termini di configurazione di PowerMTA si traducano in termini di SparkPost.

Termine PowerMTA Termine Report/Signal SparkPostDominio destinatario

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


Tuttavia, PowerMTA può etichettare VirtualMTAs, Pool MTA virtuali o domini Sender-or-From con un ID sottoconto per scopi di generazione report di SparkPost.

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

Impostare almeno un indirizzo smtp-source-host consente inoltre a SparkPost di identificare correttamente l'indirizzo IP inviante in modo che appaia negli eventi di Iniezione e Consegna, nonché nella visualizzazione del rapporto di riepilogo.

I nomi dei Job sono impostati in PowerMTA tramite un'intestazione nel messaggio iniettato. Oltre ad abilitare il controllo individuale dei lavori (pausa/ripresa ecc.), utile di per sè, PowerMTA passa i nomi al reporting Signal di SparkPost come “ID campagna”. Vedi la Guida dell'Utente v5.0 sezione 12.8 “Tracciare una campagna in PowerMTA con un JobID”.

Ci sono alcune cose di cui essere consapevoli riguardo alla denominazione dei lavori. Mentre SparkPost (con formato JSON, e escaping JSON) consente caratteri come <SPACE> nei nomi delle campagne, le intestazioni email sono più restrittive. I caratteri validi consentiti nell'intestazione X-Job sono:

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

In altre parole, i caratteri non consentiti includono <SPACE>, doppi apici “ e accento grave `. Se sei abituato a lavorare con i nomi X-Job, ciò non ti sorprenderà e i nomi degli ID campagna “funzioneranno semplicemente” nei report di SparkPost. Se, come me, hai appreso prima SparkPost, potresti voler avere uno strumento per garantire che i tuoi valori X-Job siano sicuri; vedere la funzione bonus alla fine di questo articolo.

Termine PowerMTA

Termine Signal di SparkPost

VirtualMTA

Pool IP

Pool VirtualMTA

Pool IP (raggruppato)

Nome Job (intestazione X-Job)

ID Campagna

smtp-source-host

Indirizzo IP Inviante

Dominio Bounce

Identificazione Dominio Mittente

Dominio Mittente/Da

Rapporti a Livello di Sottoconto/Dominio

Eventi FBL (Spam Complaints) e rimbalzi remoti (out-of-band)

PowerMTA può ricevere e processare eventi FBL (noti in SparkPost come eventi di reclamo di spam) e rimbalzi remoti (noti in SparkPost come rimbalzi fuori banda, perché la risposta arriva qualche tempo dopo, piuttosto che durante la conversazione SMTP).

Ci sono articoli nel Port25 Support Forum su come impostare il Bounce Processor e il FBL Processor. Se sei un utente PowerMTA esistente, probabilmente li hai già.

Ecco la configurazione che ho fatto per una demo, basata su questi articoli e orientata all'hosting di PowerMTA in Amazon EC2.

Se hai familiarità con la configurazione di PowerMTA in quest'area, puoi saltare questa parte, fino alla prossima linea orizzontale.

PowerMTA può ricevere e processare eventi FBL (noti in SparkPost come eventi di reclamo di spam) e rimbalzi remoti (noti in SparkPost come rimbalzi fuori banda, perché la risposta arriva qualche tempo dopo, piuttosto che durante la conversazione SMTP).

Ci sono articoli nel Port25 Support Forum su come impostare il Bounce Processor e il FBL Processor. Se sei un utente PowerMTA esistente, probabilmente li hai già.

Ecco la configurazione che ho fatto per una demo, basata su questi articoli e orientata all'hosting di PowerMTA in Amazon EC2.

Se hai familiarità con la configurazione di PowerMTA in quest'area, puoi saltare questa parte, fino alla prossima linea orizzontale.

PowerMTA può ricevere e processare eventi FBL (noti in SparkPost come eventi di reclamo di spam) e rimbalzi remoti (noti in SparkPost come rimbalzi fuori banda, perché la risposta arriva qualche tempo dopo, piuttosto che durante la conversazione SMTP).

Ci sono articoli nel Port25 Support Forum su come impostare il Bounce Processor e il FBL Processor. Se sei un utente PowerMTA esistente, probabilmente li hai già.

Ecco la configurazione che ho fatto per una demo, basata su questi articoli e orientata all'hosting di PowerMTA in Amazon EC2.

Se hai familiarità con la configurazione di PowerMTA in quest'area, puoi saltare questa parte, fino alla prossima linea orizzontale.

Configurazione dell'injection

Utilizzeremo la porta 587 per i messaggi iniettati, che arriveranno su Internet pubblico da un altro host. Dobbiamo impedire ai malintenzionati di scoprire e abusare di questo servizio, quindi applichiamo l'autenticazione username/password e TLS opzionale, simile ai punti di iniezione SMTP di SparkPost.

Vogliamo essere in grado di inviare messaggi da fonti correttamente autenticate a qualsiasi destinazione. Vogliamo anche un ascoltatore separato sulla porta 25 per FBL e risposte rimbalzo remoto che non richiedano autenticazione.

# 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

Nelle seguenti dichiarazioni <source> , utilizziamo l'autenticazione username/password e TLS opzionale per difenderci contro l'iniezione di messaggi fraudolenti. Impostiamo anche limiti di velocità sulle connessioni che tentano password errate.

La tua configurazione potrebbe essere diversa; ad esempio, se hai una rete privata tra l'iniettore e PowerMTA, non avrai bisogno dell'autenticazione della password.

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

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

La dichiarazione <source {auth}> (vedi qui. v5.0) si applica una volta che l'autenticazione è passata. Qui, consente il ritrasmissione, imposta il gruppo di virtual MTA predefinito da usare e aggiunge l'intestazione X-Job (che sarà riportata da SparkPost Signals come campaign_id).

La rewrite-list mappa i messaggi iniettati per utilizzare un dominio MAIL FROM specifico (alias dominio di rimbalzo o Return-Path:).

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


Quindi configuriamo la nostra configurazione TLS e username / password SMTP, secondo le raccomandazioni attuali.

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


Possiamo verificare che il TLS v1.0 (insicuro, deprecato) non sia accettato utilizzando il mio strumento di test SMTP preferito, swaks.

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


Vediamo:

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


Lo stesso vale per –tls-protocol tlsv1_1.

Applichiamo inoltre la firma DKIM sui nostri messaggi in uscita, poiché è una buona pratica (ho seguito queste istruzioni per configurare la chiave).

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

Utilizzeremo la porta 587 per i messaggi iniettati, che arriveranno su Internet pubblico da un altro host. Dobbiamo impedire ai malintenzionati di scoprire e abusare di questo servizio, quindi applichiamo l'autenticazione username/password e TLS opzionale, simile ai punti di iniezione SMTP di SparkPost.

Vogliamo essere in grado di inviare messaggi da fonti correttamente autenticate a qualsiasi destinazione. Vogliamo anche un ascoltatore separato sulla porta 25 per FBL e risposte rimbalzo remoto che non richiedano autenticazione.

# 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

Nelle seguenti dichiarazioni <source> , utilizziamo l'autenticazione username/password e TLS opzionale per difenderci contro l'iniezione di messaggi fraudolenti. Impostiamo anche limiti di velocità sulle connessioni che tentano password errate.

La tua configurazione potrebbe essere diversa; ad esempio, se hai una rete privata tra l'iniettore e PowerMTA, non avrai bisogno dell'autenticazione della password.

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

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

La dichiarazione <source {auth}> (vedi qui. v5.0) si applica una volta che l'autenticazione è passata. Qui, consente il ritrasmissione, imposta il gruppo di virtual MTA predefinito da usare e aggiunge l'intestazione X-Job (che sarà riportata da SparkPost Signals come campaign_id).

La rewrite-list mappa i messaggi iniettati per utilizzare un dominio MAIL FROM specifico (alias dominio di rimbalzo o Return-Path:).

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


Quindi configuriamo la nostra configurazione TLS e username / password SMTP, secondo le raccomandazioni attuali.

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


Possiamo verificare che il TLS v1.0 (insicuro, deprecato) non sia accettato utilizzando il mio strumento di test SMTP preferito, swaks.

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


Vediamo:

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


Lo stesso vale per –tls-protocol tlsv1_1.

Applichiamo inoltre la firma DKIM sui nostri messaggi in uscita, poiché è una buona pratica (ho seguito queste istruzioni per configurare la chiave).

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

Utilizzeremo la porta 587 per i messaggi iniettati, che arriveranno su Internet pubblico da un altro host. Dobbiamo impedire ai malintenzionati di scoprire e abusare di questo servizio, quindi applichiamo l'autenticazione username/password e TLS opzionale, simile ai punti di iniezione SMTP di SparkPost.

Vogliamo essere in grado di inviare messaggi da fonti correttamente autenticate a qualsiasi destinazione. Vogliamo anche un ascoltatore separato sulla porta 25 per FBL e risposte rimbalzo remoto che non richiedano autenticazione.

# 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

Nelle seguenti dichiarazioni <source> , utilizziamo l'autenticazione username/password e TLS opzionale per difenderci contro l'iniezione di messaggi fraudolenti. Impostiamo anche limiti di velocità sulle connessioni che tentano password errate.

La tua configurazione potrebbe essere diversa; ad esempio, se hai una rete privata tra l'iniettore e PowerMTA, non avrai bisogno dell'autenticazione della password.

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

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

La dichiarazione <source {auth}> (vedi qui. v5.0) si applica una volta che l'autenticazione è passata. Qui, consente il ritrasmissione, imposta il gruppo di virtual MTA predefinito da usare e aggiunge l'intestazione X-Job (che sarà riportata da SparkPost Signals come campaign_id).

La rewrite-list mappa i messaggi iniettati per utilizzare un dominio MAIL FROM specifico (alias dominio di rimbalzo o Return-Path:).

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


Quindi configuriamo la nostra configurazione TLS e username / password SMTP, secondo le raccomandazioni attuali.

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


Possiamo verificare che il TLS v1.0 (insicuro, deprecato) non sia accettato utilizzando il mio strumento di test SMTP preferito, swaks.

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


Vediamo:

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


Lo stesso vale per –tls-protocol tlsv1_1.

Applichiamo inoltre la firma DKIM sui nostri messaggi in uscita, poiché è una buona pratica (ho seguito queste istruzioni per configurare la chiave).

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

Configurazione e nominazione di VirtualMTA

PowerMTA VirtualMTAs (e pool di VirtualMTA) sono funzionalità potenti per gestire i flussi di messaggi, e le funzionalità di reportistica PowerMTA / SparkPost Signals funzionano al meglio con queste attive.

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

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


La impostazione virtual-mta-pool viene riportata in SparkPost come “IP Pool” ed è disponibile come una facetta di reportistica SparkPost Signals (il menu a tendina sotto i grafici).

Health score dashboard


Il Summary Report mostra anche IP Pool come una facetta di reportistica “Group By”.

Summary report dashboard


Come notato in precedenza in questo articolo, impostare almeno un indirizzo smtp-source-host consente anche a SparkPost di identificare correttamente l'indirizzo IP di invio, affinché compaia negli eventi di Iniezione e Consegna, e nel Summary Report:

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

È tutto ciò di cui hai bisogno per ottenere un'integrazione di base funzionante tra PowerMTA e SparkPost Signals. Troverai l'esempio di file di configurazione completo qui.

Prima di andare, ecco la funzione bonus che ho menzionato.

PowerMTA VirtualMTAs (e pool di VirtualMTA) sono funzionalità potenti per gestire i flussi di messaggi, e le funzionalità di reportistica PowerMTA / SparkPost Signals funzionano al meglio con queste attive.

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

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


La impostazione virtual-mta-pool viene riportata in SparkPost come “IP Pool” ed è disponibile come una facetta di reportistica SparkPost Signals (il menu a tendina sotto i grafici).

Health score dashboard


Il Summary Report mostra anche IP Pool come una facetta di reportistica “Group By”.

Summary report dashboard


Come notato in precedenza in questo articolo, impostare almeno un indirizzo smtp-source-host consente anche a SparkPost di identificare correttamente l'indirizzo IP di invio, affinché compaia negli eventi di Iniezione e Consegna, e nel Summary Report:

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

È tutto ciò di cui hai bisogno per ottenere un'integrazione di base funzionante tra PowerMTA e SparkPost Signals. Troverai l'esempio di file di configurazione completo qui.

Prima di andare, ecco la funzione bonus che ho menzionato.

PowerMTA VirtualMTAs (e pool di VirtualMTA) sono funzionalità potenti per gestire i flussi di messaggi, e le funzionalità di reportistica PowerMTA / SparkPost Signals funzionano al meglio con queste attive.

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

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


La impostazione virtual-mta-pool viene riportata in SparkPost come “IP Pool” ed è disponibile come una facetta di reportistica SparkPost Signals (il menu a tendina sotto i grafici).

Health score dashboard


Il Summary Report mostra anche IP Pool come una facetta di reportistica “Group By”.

Summary report dashboard


Come notato in precedenza in questo articolo, impostare almeno un indirizzo smtp-source-host consente anche a SparkPost di identificare correttamente l'indirizzo IP di invio, affinché compaia negli eventi di Iniezione e Consegna, e nel Summary Report:

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

È tutto ciò di cui hai bisogno per ottenere un'integrazione di base funzionante tra PowerMTA e SparkPost Signals. Troverai l'esempio di file di configurazione completo qui.

Prima di andare, ecco la funzione bonus che ho menzionato.

Funzione bonus: controllo/filtraggio nome X-Job

Per garantire che qualsiasi stringa di caratteri sia sicura per l'uso come nome X-Job di PowerMTA, ecco una semplice funzione Python per mappare qualsiasi carattere non sicuro su un underscore “_”

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)

Questo utilizza espressioni regolari di Python in modo specifico. Dichiara l'insieme di caratteri non consentiti usando l'operatore di “complemento dell'insieme” ^ piuttosto che elencare tutti i caratteri consentiti. Ciò significa che catturiamo (e rendiamo sicuri) i caratteri oltre al solito set a 7 bit. Possiamo mostrarlo usando questo frammento di test:

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

Restituendo

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

Puoi vedere che <SPACE>, le virgolette doppie “ e l'accento grave `, così come tutti i caratteri oltre ~ sono mappati a underscore.

Per garantire che qualsiasi stringa di caratteri sia sicura per l'uso come nome X-Job di PowerMTA, ecco una semplice funzione Python per mappare qualsiasi carattere non sicuro su un underscore “_”

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)

Questo utilizza espressioni regolari di Python in modo specifico. Dichiara l'insieme di caratteri non consentiti usando l'operatore di “complemento dell'insieme” ^ piuttosto che elencare tutti i caratteri consentiti. Ciò significa che catturiamo (e rendiamo sicuri) i caratteri oltre al solito set a 7 bit. Possiamo mostrarlo usando questo frammento di test:

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

Restituendo

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

Puoi vedere che <SPACE>, le virgolette doppie “ e l'accento grave `, così come tutti i caratteri oltre ~ sono mappati a underscore.

Per garantire che qualsiasi stringa di caratteri sia sicura per l'uso come nome X-Job di PowerMTA, ecco una semplice funzione Python per mappare qualsiasi carattere non sicuro su un underscore “_”

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)

Questo utilizza espressioni regolari di Python in modo specifico. Dichiara l'insieme di caratteri non consentiti usando l'operatore di “complemento dell'insieme” ^ piuttosto che elencare tutti i caratteri consentiti. Ciò significa che catturiamo (e rendiamo sicuri) i caratteri oltre al solito set a 7 bit. Possiamo mostrarlo usando questo frammento di test:

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

Restituendo

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

Puoi vedere che <SPACE>, le virgolette doppie “ e l'accento grave `, così come tutti i caratteri oltre ~ sono mappati a underscore.

Altre notizie

Leggi di più da questa categoria

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

La piattaforma nativa AI completa che si adatta al tuo business.

© 2025 Bird

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

La piattaforma nativa AI completa che si adatta al tuo business.

© 2025 Bird