Implementazione dei segnali per On-Premises: integrazione di PowerMTA
Uccello
30 ago 2019
1 min read

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 ... successfullye 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) opmta.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-spaceelimina 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'intestazioneX-Jobdi PowerMTA, sostituendo i caratteri non sicuri con trattini bassi.
Immergiamoci nei dettagli di configurazione di PowerMTA per SparkPost Signals.
Esaminiamo i dettagli della configurazione di PowerMTA per SparkPost Signals. Avrai bisogno di:
Un host su cui eseguire l'ultima versione di PowerMTA – sia una macchina nuova che una esistente
Un account SparkPost con permessi di chiave API per “Incoming Events: Write” come descritto qui
Imposteremo PowerMTA per inviare eventi al tuo account SparkPost, quindi potrai utilizzare quanto segue:
Innanzitutto, installa (o aggiorna) PowerMTA 5.0 r4 o successiva, seguendo le istruzioni di installazione della versione 5.0 abituali, che sono piuttosto semplici. Poi, lavoreremo attraverso i seguenti passaggi:
Configura il connettore PowerMTA per SparkPost Signals
Imposta il monitoraggio degli impegni con un dominio di tracciamento personalizzato
Seleziona quali flussi di traffico PowerMTA riportare a Signals
Testare che i tuoi eventi raggiungano Signals
Rivedi come utilizzare nomi significativi che si mostrano bene nei report.
Tratteremo anche altri aspetti specifici della configurazione PowerPMTA utilizzati nella nostra demo di Signals:
Eventi FBL (Reclami di spam) e rimbalzi remoti (out-of-band)
Configurazione dell’inject, compreso DKIM
Configurazione FBL e OOB
Configurazione e denominazione di VirtualMTA (e come questo appare nei report di SparkPost Signals)
Infine, c'è una “funzione bonus” con codice per garantire che i nomi delle campagne siano compatibili con le convenzioni di nome di PowerMTA X-Job .
Configura connettore PowerMTA
La configurazione di Signals è descritta nella sezione 10.1 della Guida utente 5.0. 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.
Di seguito è descritto cosa fa ciascun 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 servizio API SparkPost, sia che si tratti degli Stati Uniti o dell'UE. Per ulteriori informazioni vedere 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, 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 traffico, vedrai qualcosa come:
min-free-space
Questo indica a PowerMTA la soglia di spazio su disco alla quale deve iniziare a eliminare i file di eventi JSON SparkPost più vecchi per fare spazio a nuovi file quando lo spazio su disco sta per esaurirsi.
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 quali flussi di traffico caricare se lo desideri.
Puoi anche contrassegnare un particolare traffico PowerMTA come appartenente a un subaccount 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 preimposta il dominio di tracciamento per il servizio ospitato da SparkPost negli Stati Uniti. Devi specificare il tuo ID cliente numerico SparkPost; ecco le istruzioni per trovarlo.
tracking-domain
Per gli account SparkPost UE, aggiungi la seguente riga:
tracking-domain pmta.eu.spgo.io # this is the endpoint for SparkPost EU
Dominio di tracciamento personalizzato
Se preferisci utilizzare il tuo dominio di tracciamento (è meglio dal punto di vista della deliverability), procedi come 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 .
Puoi anche utilizzare domini di tracciamento HTTPS, anche se è più complesso (vedi i passaggi di configurazione SparkPost per i domini di tracciamento HTTPS).
Registra il dominio di tracciamento nel tuo account SparkPost e verificalo. Attendi qualche minuto prima di provarlo, per consentire alle tue modifiche DNS di propagarsi attraverso Internet, a seconda del tuo provider DNS.
Configura PowerMTA per utilizzare quel dominio al posto del predefinito, con
tracking-domain yourdomain.com # Put your own domain here
Puoi controllare che le tue email consegnate abbiano dei “open pixel” aggiunti e i link incapsulati, esaminando gli interni della mail (in Gmail, usa il menu in alto a destra e scegli “Mostra originale”).

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

È tutto ciò che devi fare per far funzionare SparkPost Signals con il tracciamento dell'engagement integrato di PowerMTA.
Evitare che specifici link nella tua email HTML vengano tracciati
Puoi evitare che PowerMTA tracci determinati link, impostando l'attributo personalizzato data-msys-clicktrack a “0” :
<a href="#" data-msys-clicktrack="0">Example</a>
PowerMTA non incapsulerà il link. Rimuoverà anche quell'attributo prima di trasmettere il messaggio al tuo destinatario.
Seleziona quali flussi di traffico PowerMTA riportare a Signals
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.

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.

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 delle Pool VirtualMTA di PowerMTA e i nomi dei lavori affinché siano significativi e facilmente leggibili è sicuramente un'operazione che vale la pena fare. Questi appaiono direttamente nelle vostre faccette di SparkPost Signals e nel rapporto riepilogativo.
Come menzionato in precedenza, non è necessario creare queste pool nel vostro account SparkPost. SparkPost le acquisisce dalla configurazione di PowerMTA.
Ecco come i termini di configurazione di PowerMTA si traducono in termini SparkPost.
Termine PowerMTA Segnala/Segnala termeDominio destinatario
Tuttavia, PowerMTA può etichettare virtualMTAs, Pool virtuali MTA, o domini Sender-or-From con un ID subaccount per scopi di reportistica SparkPost.
Impostare almeno un indirizzo smtp-source-host consente anche a SparkPost di identificare correttamente l'indirizzo IP del mittente in modo che appaia sugli eventi di Injection e Delivery, così come nella vista del rapporto riepilogativo.
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 di per sé, PowerMTA passa i nomi a SparkPost Signals reporting come “ID campagna”. 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 la denominazione dei lavori. Mentre SparkPost (con formato JSON e escape JSON) consente caratteri come <SPACE> nei nomi delle campagne, le intestazioni delle e-mail 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>, virgolette doppie “ e accento grave `. Se sei abituato a lavorare con i nomi X-Job, questo non sarà sorprendente e i nomi ID della tua campagna funzioneranno semplicemente nei rapporti SparkPost. Se come me, hai imparato SparkPost prima, potresti desiderare uno strumento per assicurarti che i tuoi valori X-Job siano sicuri; vedi la funzione 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 su Internet pubblico da un altro host. Dobbiamo impedire che attori malevoli scoprano e abusino di questo servizio, quindi applichiamo l'autenticazione con nome utente/password e TLS opzionale, simile agli endpoint 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 di rimbalzo remoto che non richiedono autenticazione.
Nelle seguenti dichiarazioni <source>, utilizziamo l'autenticazione con nome utente/password e TLS opzionale per difenderci dall'iniezione di messaggi non autorizzati. Impostiamo inoltre 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'iniettore e PowerMTA, non sarà necessaria l'autenticazione con password.
La dichiarazione <source {auth}> (vedi qui. v5.0) si applica una volta che l'autenticazione è passata. Qui, permette il reinoltro, imposta il gruppo MTA virtuale predefinito da usare e aggiunge l'intestazione X-Job (che verrà riportata da SparkPost Signals come campaign_id).
La rewrite-list mappa i messaggi iniettati per utilizzare un dominio specifico MAIL FROM (alias dominio di rimbalzo o Return-Path:).
Configuriamo quindi la nostra configurazione TLS e nome utente/password SMTP, secondo le raccomandazioni attuali.
Possiamo verificare che il TLS v1.0 (insicuro, deprecato) non sia accettato utilizzando il mio strumento di test SMTP preferito, swaks.
Vediamo:
Analogamente per –tls-protocol tlsv1_1.
Applichiamo anche la firma DKIM sui nostri messaggi in uscita, poiché è una buona prassi (ho seguito queste istruzioni per impostare la chiave).
FBL e OOB configuration
Ora .. finalmente .. dichiariamo quali domini specifici sono aperti per risposte remote di bounce e FBL. Non vogliamo ritrasmetterli ovunque (per prevenire attacchi di backscatter), solo elaborare internamente quelle risposte.
Puoi vedere che ho impostato due domini di bounce, mentre stavo sperimentando con l'utilizzo/non utilizzo della 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 proverranno 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 tutti i messaggi che non sono specificamente indirizzati ai domini FBL e di rimbalzo remoto.
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 del setup di demo).
Configurazione e nominazione di VirtualMTA
Le PowerMTA VirtualMTAs (e le pool VirtualMTA) sono funzionalità potenti per gestire i flussi di messaggi, e le funzionalità di reportistica di PowerMTA / SparkPost Signals funzionano meglio con queste attive.
L'impostazione virtual-mta-pool è riportata in SparkPost come "IP Pool", ed è disponibile come aspetto di reportistica di SparkPost Signals (il menu a tendina sotto i grafici).

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

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, in modo che appaia sugli eventi di iniezione e consegna, e nel Summary Report:

È tutto ciò che serve per ottenere un'integrazione di base tra PowerMTA e SparkPost Signals. Troverai l'esempio completo del file di configurazione 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 PowerMTA X-Job , ecco una semplice funzione Python per mappare qualsiasi carattere non sicuro a un carattere di sottolineatura “_”
Questo utilizza le espressioni regolari di Python in un modo specifico. Dichiara il set di caratteri non consentiti usando l’operatore di “complemento del set” ^ piuttosto che elencare tutti i caratteri consentiti. Ciò significa che intercettiamo (e rendiamo sicuri) caratteri oltre il set a 7 bit abituale. Possiamo dimostrarlo usando questo frammento di test:
s='' for i in range(32, 256): s += chr(i) print(pmtaSafeJobID(s))
Risultante in
Puoi vedere che <SPACE>, doppi apici “, e backtick `, nonché tutti i caratteri oltre ~ sono mappati a underscore.



