Reach

Grow

Manage

Automate

Reach

Grow

Manage

Automate

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

Uccello

30 ago 2019

Email

1 min read

Implementazione dei segnali per On-Premises: integrazione di PowerMTA

Immergiamoci nei dettagli di configurazione di PowerMTA per SparkPost Signals.

Immergiamoci nei dettagli della configurazione di PowerMTA per SparkPost Signals. Avrai bisogno di:

  • Un host su cui eseguire l'ultima versione di PowerMTA - sia una nuova macchina che una esistente

  • Un account SparkPost con permesso 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:

Innanzitutto, installa (o aggiorna) PowerMTA 5.0 r4 o successiva, seguendo le istruzioni di installazione abituali v5.0 che sono piuttosto semplici. Poi lavoreremo attraverso i seguenti passaggi:

  • Configura il connettore PowerMTA per SparkPost Signals

  • Configura Engagement Tracking con un dominio di tracking personalizzato

  • Seleziona quali flussi di traffico di PowerMTA riportare a Signals

  • Testare che i tuoi eventi stiano raggiungendo Signals

  • Rivedere come usare nomi significativi che appaiono bene nei report.

Copriamo anche gli altri aspetti specifici di configurazione di PowerPMTA 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 SparkPost Signals)

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

Configura connettore PowerMTA

La configurazione di Signals è descritta nella Guida Utente 5.0 sezione 10.1. Qui inizieremo con "Use Case #2", che abilita Signals per tutto il traffico da questo host PowerMTA e abilita il tracciamento dell'engagement di SparkPost.

# # SparkPost Signals # <signals> api-key ##chiave API di ingestione qui## upload-url https://api.sparkpost.com/api/v1/ingest/events log-verbose true min-free-space 1G engagement-tracking sparkpost # questo attiva il tracciamento di apertura e clic in PowerMTA customer-id 123 # Il tuo numero di account SparkPost qui </signals> enable-signals true

Ecco cosa fa ogni attributo:

api-key

Questa è unica 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, che sia 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 è opzionale e, quando abilitata, fornisce un po' più di informazioni nel file pmta.log, 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 dice a PowerMTA la soglia di spazio su disco al raggiungimento della quale dovrebbe iniziare a eliminare i file evento JSON di SparkPost più vecchi per fare spazio a nuovi file quando lo spazio su disco sta per esaurirsi.

enable-signals

Questo dice a PowerMTA di caricare in Signals, in questo caso a livello globale per tutto il traffico (ulteriori informazioni qui, per v5.0). Puoi essere più selettivo su quali flussi di traffico caricare se lo desideri.

Puoi anche contrassegnare un particolare traffico PowerMTA 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 negli Stati Uniti di SparkPost. Devi specificare il tuo ID cliente numerico SparkPost; qui ci sono istruzioni per trovarlo.

tracking-domain

Per gli account UE di SparkPost, aggiungi la seguente riga:

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

Dominio di tracciamento personalizzato

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

  • Crea un dominio di tracciamento con il tuo provider DNS creando un record CNAME. Questo sarà solitamente un sottodominio del tuo dominio di primo livello, ad esempio track.mycompany.com .

track.mycompany.com CNAME pmta.spgo.io # se hai un account SparkPost US track.mycompany.com CNAME pmta.eu.spgo.io # se hai un account SparkPost EU

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

  • Registra il dominio di tracciamento nel tuo account SparkPost e verificalo. Attendi qualche minuto prima di provare, per permettere alle modifiche DNS di propagarsi attraverso Internet, a seconda del tuo provider DNS.

  • Configura PowerMTA per usare quel dominio invece del predefinito, con

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

Puoi controllare che le email consegnate abbiano i "pixel di apertura" aggiunti e i link avvolti, osservando 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 nell'email. Ogni link HTML viene anche modificato per avere REF che punta al dominio di tracciamento.

HTML code highlighted


Questo è tutto ciò di cui hai bisogno per far funzionare SparkPost Signals con il Tracciamento di Engagement incorporato di PowerMTA.

Prevenire il tracciamento di specifici link nel tuo email HTML

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

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

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

Seleziona quali flussi di traffico PowerMTA riportare a Signals

Puoi selezionare i Signals da essere attivi:

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

  • Per alcuni Virtual MTAs e non altri

  • Per alcuni pool di Virtual MTA e non altri

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

Questa configurazione è molto potente ed è illustrata attraverso una serie di esempi di utilizzo (v5.0) nella Guida Utente.

Puoi selezionare i Signals da essere attivi:

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

  • Per alcuni Virtual MTAs e non altri

  • Per alcuni pool di Virtual MTA e non altri

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

Questa configurazione è molto potente ed è illustrata attraverso una serie di esempi di utilizzo (v5.0) nella Guida Utente.

Puoi selezionare i Signals da essere attivi:

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

  • Per alcuni Virtual MTAs e non altri

  • Per alcuni pool di Virtual MTA e non altri

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

Questa configurazione è molto potente ed è illustrata attraverso una serie di esempi di utilizzo (v5.0) nella Guida Utente.

Testing che i tuoi eventi stanno raggiungendo Signals

Qui c'è una vista di SparkPost Signals, collegata a PowerMTA. Puoi vedere che il punteggio di salute sta variando.

Health score dashboard


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

Oltre a esaminare i log di PowerMTA, puoi verificare che i dati degli eventi stiano raggiungendo SparkPost guardando alla schermata di Integrazione Signals.

Signals integration screen

Nella tua schermata di ricerca eventi SparkPost, dovresti vedere gli eventi apparire entro pochi minuti. Questi includeranno eventi di Injection e Delivery, oltre a Bounce, e potenzialmente Out-of-Band Bounce ed eventi di reclamo di spam, se hai già configurato PowerMTA per gestirli per te.
Se hai abilitato il Tracciamento di Coinvolgimento, vedrai anche eventi di open, initial_open, e click.

Usare nomi significativi che compaiono bene nei report

Impostare i nomi del Pool VirtualMTA di PowerMTA e i nomi dei lavori in modo che siano significativi e leggibili è davvero utile. Questi appaiono direttamente nei tuoi aspetti di SparkPost Signals e nel report di riepilogo.

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

Ecco come i termini di configurazione di PowerMTA si traducono nei termini di SparkPost.

PowerMTA termSparkPost Reports / Signals termRecipient Domain
(parte di dominio del campo “rcpt” nel file di contabilità).Recipient DomainLa parte di dominio dell'intestazione “Sender” o “From” nel messaggio inoltrato da PowerMTA.
(parte di dominio di “orig” nel file di contabilità).Sending DomainVirtualMTA (name)—VirtualMTA Pool (name)
(“vmtaPool” nel file di contabilità)IP Pool (name)smtp-source-host a.b.c.d
(“dlvSourceIp” nel file di contabilità)Sending IP a.b.c.dJob (name)
(“jobId” nel file di contabilità)Campaign ID (name)—Template (name)“Subaccount” non è un concetto nativo di PowerMTA.

Tuttavia, PowerMTA può taggare virtualMTAs, virtual MTA Pools, o i domini Sender-or-From con un ID di subaccount per scopi di reporting su 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 anche a SparkPost di identificare correttamente l'indirizzo IP di invio in modo che appaia negli eventi di Injection e Delivery, così come nella vista del report di riepilogo.

I nomi dei lavori sono impostati in PowerMTA tramite un'intestazione nel messaggio iniettato. Oltre a consentire il controllo individuale dei lavori (pausa/riprendi ecc.) che è utile in sé, PowerMTA trasmette i nomi attraverso al reporting di SparkPost Signals come “campaign ID”. Vedi Guida Utente v5.0 sezione 12.8 “Tracking a campaign in PowerMTA with a JobID”.

Ci sono alcune cose da tenere a mente riguardo alla denominazione dei lavori. Mentre SparkPost (con formato JSON e escape JSON) permette caratteri come <SPACE>  nei nomi delle campagne, le intestazioni delle mail sono più restrittive. I caratteri validi ammessi nell'intestazione X-Job  sono:

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

In altre parole, i caratteri non ammessi includono <SPACE>, le virgolette doppie “  e l'apostrofo `. Se sei abituato a lavorare con i nomi X-Job, questo non ti sorprenderà, e i nomi degli ID di campagna funzioneranno “perfettamente” nel reporting di SparkPost. Se come me, hai imparato prima SparkPost, potresti volere uno strumento per garantire che i tuoi valori X-Job siano sicuri; vedi la funzionalità bonus alla fine di questo articolo.

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

PowerMTA può ricevere e elaborare eventi FBL (noti in SparkPost come eventi di reclamo di spam) e bounce remoti (noti in SparkPost come bounce out-of-band, poiché la risposta arriva un po' di tempo dopo, anziché 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 verso l'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 Injection

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

Vogliamo poter inviare messaggi da fonti adeguatamente autenticate a qualsiasi destinazione. Vogliamo anche un ascoltatore separato sulla porta 25 per le risposte FBL e i rimbalzi remoti che non richiedono autenticazione.

# # Indirizzo(i) IP e porta(e) su cui ascoltare le connessioni SMTP in entrata # 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 dall'iniezione di messaggi non autorizzati. Impostiamo anche limiti di velocità sulle connessioni che effettuano tentativi di password falliti.

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

# Una regola di origine per tutta l'iniezione, interna o esterna. Imporre l'autenticazione, tranne che per i bounce e gli FBL # <source 0/0> log-connections false log-commands false # AVVISO: dettagliato! solo per dev log-data false # AVVISO: ancora più dettagliato! smtp-service true # consentire il servizio SMTP 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 # solo se l'autenticazione riesce default-virtual-mta default process-x-job true </source>

La dichiarazione <source {auth}> (vedi qui. v5.0) si applica una volta superata l'autenticazione. Qui consente il relaying in avanti, configura il gruppo MTA virtuale predefinito da utilizzare e aggiunge l'intestazione X-Job (che sarà riportata da SparkPost Signals come campaign_id).

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

# # Riscrivi l'indirizzo MAIL FROM per corrispondere al dominio di rimbalzo # <rewrite-list mfrom> mail-from *@pmta.signalsdemo.trymsys.net *@bounces.pmta.signalsdemo.trymsys.net </rewrite-list>

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

# # Proteggi il servizio in entrata con username, password e 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 # # Utenti SMTP (autenticati tramite SMTP AUTH) # <smtp-user SMTP_Injection> password ##INSERISCI LA TUA PASSWORD QUI## authentication-method password </smtp-user>

Possiamo verificare che il TLS v1.0 (insicuro, obsoleto) 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:

*** Avvio TLS fallito (connect(): error:00000000:lib(0):func(0):reason(0)) *** STARTTLS tentato ma fallito

Stessa cosa per –tls-protocol tlsv1_1.

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

# # DKIM # chiave-dominio mypmta, pmta.signalsdemo.trymsys.net, /etc/pmta/mypmta.pmta.signalsdemo.trymsys.net.pem

FBL e OOB configuration

Ora .. finalmente .. dichiariamo quali specifici domini sono aperti per i rimbalzi remoti e le risposte FBL. Non vogliamo inoltrarli altrove (per prevenire attacchi di backscatter), ma solo processare internamente quelle risposte.

# # Abilita l'elaborazione di Bounce e FBL su domini specifici # 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>

Puoi vedere che ho impostato due domini di rimbalzo, poiché stavo cercando di usare/non usare la regola di riscrittura mfrom.

Il dominio FBL è solitamente registrato con servizi esterni come Microsoft SNDS; vedi questo articolo per ulteriori informazioni. Per questa demo, gli FBL arriveranno dal Bouncy Sink, quindi non c'è bisogno di registrarsi.

Test della funzione di ascolto SMTP

È importante testare che il tuo listener SMTP richieda l'autorizzazione per qualsiasi destinazione generale, rifiutando qualsiasi messaggio che non sia specificamente indirizzato ai domini FBL e remote-bounce.

swaks --server pmta.signalsdemo.trymsys.net --port 25 --to test@strange.pmta.signalsdemo.trymsys.net --from any@sparkpost.com

La risposta, come previsto, mostra che il relay è negato:

550 5.7.1 relay negato per il destinatario in "RCPT TO:<test@strange.pmta.signalsdemo.trymsys.net>

(Fine della descrizione dell'impostazione demo).

Configurazione e nominazione di VirtualMTA

PowerMTA VirtualMTAs (e pool di VirtualMTA) sono funzionalità potenti per gestire flussi di messaggi, e le funzionalità di reporting di PowerMTA / SparkPost Signals funzionano al meglio con questi attivi.

# # Instrada tutto il traffico in uscita attraverso questo virtual mta / pool. # Dichiara l'indirizzo IP di consegna qui, in modo che gli eventi di iniezione (aka "reception") di SparkPost segnali # portino l'attributo sending_IP corretto # <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. connessioni *per dominio*         bounce-after    4d12h    # 4 giorni, 12 ore         retry-after     10m      # 10 minuti         dkim-sign       sì     </domain> </virtual-mta-pool>

La configurazione del virtual-mta-pool è riportata in SparkPost come “IP Pool” ed è disponibile come un aspetto di reportistica SparkPost Signals (il menu a discesa sotto i grafici).

Health score dashboard


Il Rapporto di Sintesi mostra anche IP Pool come un aspetto di reportistica “Group By”.

Summary report dashboard


Come indicato all'inizio di questo articolo, impostare almeno un indirizzo smtp-source-host consente a SparkPost di identificare correttamente l'indirizzo IP di invio, in modo che venga visualizzato negli eventi di Iniezione e Consegna e nel Rapporto di Sintesi:

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

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

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 a un trattino di sottolineatura “_”

import re def pmtaSafeJobID(s):    """    :param s: str    :return: str    Mappa una stringa ID di campagna arbitraria nei caratteri consentiti per l'intestazione PMTA X-Job.    Vedi https://download.port25.com/files/UsersGuide-5.0.html#tracking-a-campaign-in-powermta-with-a-jobid    Specifica di escludere <sp> " ` ma consentire la maggior parte degli altri caratteri.    """    # Nota: bisogna sfuggire ' - [ ] e doppio-escapare \ - vedi https://docs.python.org/3/library/re.html    disallowedChars = '[^A-Za-z0-9!#$%&\'()*+,\-./:;<=>?@\[\\\\\]^_{|}~]'    return re.sub(disallowedChars, '_', s)

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

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

Risultando

_!_#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^__abcdefghijkl mnopqrstuvwxyz{|}~___________________________________________________________ ______________________________________________________________________

Puoi vedere che <SPACE>, i doppi apici “ e l'accento grave `, così come tutti i caratteri oltre ~, sono mappati su un trattino di sottolineatura.

Connettiamoci con un esperto di Bird.
Scopri tutta la potenza del Bird in 30 minuti.

Inviando, accetti che Bird possa contattarti riguardo ai nostri prodotti e servizi.

Puoi annullare l'iscrizione in qualsiasi momento. Consulta la Informativa sulla Privacy di Bird per i dettagli sul trattamento dei dati.

Azienda

Newsletter

Rimani aggiornato con Bird attraverso aggiornamenti settimanali nella tua inbox.

Connettiamoci con un esperto di Bird.
Scopri tutta la potenza del Bird in 30 minuti.

Inviando, accetti che Bird possa contattarti riguardo ai nostri prodotti e servizi.

Puoi annullare l'iscrizione in qualsiasi momento. Consulta la Informativa sulla Privacy di Bird per i dettagli sul trattamento dei dati.

Azienda

Newsletter

Rimani aggiornato con Bird attraverso aggiornamenti settimanali nella tua inbox.

Connettiamoci con un esperto di Bird.
Scopri tutta la potenza del Bird in 30 minuti.

Inviando, accetti che Bird possa contattarti riguardo ai nostri prodotti e servizi.

Puoi annullare l'iscrizione in qualsiasi momento. Consulta la Informativa sulla Privacy di Bird per i dettagli sul trattamento dei dati.

R

Raggiungi

G

Grow

M

Manage

A

Automate

Azienda

Newsletter

Rimani aggiornato con Bird attraverso aggiornamenti settimanali nella tua inbox.