Bereitstellung von Signals für On-Premises: PowerMTA-Integration
Bird
30.08.2019
1 min read

Wichtige Erkenntnisse
Zweck: Dieser Leitfaden erklärt, wie PowerMTA 5.0+ in SparkPost Signals integriert wird, um Ereignis- und Engagement-Daten (Bounces, Öffnungen, Klicks, Spam-Beschwerden) von lokalen MTAs direkt in die SparkPost-Analyseschicht zu streamen.
Kernkonfiguration:
Fügen Sie enable-signals true hinzu und definieren Sie Ihren SparkPost ingest endpoint (https://api.sparkpost.com/api/v1/ingest/events oder das EU-Äquivalent).
Verwenden Sie einen gültigen API-Schlüssel mit der Berechtigung „Eingehende Ereignisse: Schreiben“.
Geben Sie customer-id an und richten Sie optional benutzerdefinierte Tracking-Domains für eine verbesserte Zustellbarkeit ein.
Tracking-Einrichtung: PowerMTAs Engagement Tracking fügt automatisch Öffnungs- und Klick-Pixel in HTML-E-Mails ein. Sie können das Tracking pro Link mit dem Attribut data-msys-clicktrack="0" deaktivieren.
Selektive Berichterstattung: Signals kann global aktiviert oder auf bestimmte VirtualMTAs, Pools oder Absenderdomains beschränkt werden, um eine feingranulare Datenkontrolle zu ermöglichen.
Testen & Verifizierung: Verwenden Sie das Signals Integration Dashboard und die PowerMTA-Protokolle, um die Ereignisaufnahme zu bestätigen und in Echtzeit zu verfolgen: Health Scores, Bounces und Engagement Metriken.
Zustellbarkeitsoptimierung:
Verwenden Sie aussagekräftige VirtualMTA- und Job-Namen — diese werden direkt in IP Pools und Campaign IDs in den SparkPost-Berichten abgebildet.
Konfigurieren Sie DKIM-Signierung, TLS-Durchsetzung und geeignete Relay-Regeln, um unbefugte Injektionen zu verhindern.
Erweiterte Einrichtung: Der Artikel enthält auch einsatzbereite Snippets für FBL & Out-of-Band-Bounce-Bearbeitung, authentifizierte SMTP-Injektion (Port 587) und Python-Code, um X-Job-Header für die Kompatibilität zu bereinigen.
Q&A Highlights
Was macht die Signals-Integration eigentlich?
Es lädt automatisch PowerMTA's Nachrichtenereignisse (Injection, Zustellung, Bounce, Engagement) in Ihr SparkPost-Konto hoch, sodass Sie auf Dashboards wie Health Score, Delay-Berichte und Spam Trap Monitoring zugreifen können.
Warum Signals mit einem On-prem MTA integrieren?
Viele Unternehmen betreiben selbst gehostete Mail-Infrastrukturen aus Compliance-Gründen, möchten aber dennoch die Analyse- und Überwachungsfunktionen von SparkPost nutzen. Signals überbrückt diese Lücke, ohne die Mail-Zustellung in die Cloud zu migrieren.
Wie kann ich überprüfen, ob die Ereignisse zu SparkPost fließen?
Überprüfen Sie die PowerMTA-Protokolle auf
Signals: Transferred ... successfullyund bestätigen Sie die Ereigniseinträge unter Signals → Events Search in SparkPost.Kann ich meine eigene Tracking-Domain verwenden?
Ja — konfigurieren Sie ein CNAME wie
track.mycompany.com → pmta.spgo.io(US) oderpmta.eu.spgo.io(EU), dann registrieren und verifizieren Sie es in SparkPost für Marken- und Reputationskonsistenz.Was ist mit Datenschutz oder Festplattennutzung?
Die Direktive
min-free-spacelöscht automatisch alte JSON-Ereignisdateien, wenn der Speicherplatz knapp wird, und verhindert so die lokale Ansammlung von Telemetriedaten.Was ist das „bonus feature“ am Ende?
Ein Python Regex-Dienstprogramm (
pmtaSafeJobID), das sicherstellt, dass Kampagnen-/Aufgabennamen nur gültige Zeichen im PowerMTAX-JobHeader-Format verwenden, wobei unsichere Zeichen durch Unterstriche ersetzt werden.
Lassen Sie uns in die Details der Einrichtung von PowerMTA für SparkPost Signals eintauchen.
Lassen Sie uns in die Details der Einrichtung von PowerMTA für SparkPost Signals eintauchen. Sie benötigen:
Einen Host, um die neueste Version von PowerMTA auszuführen – entweder eine neue oder eine vorhandene Maschine
Ein SparkPost-Konto mit API-Schlüsselberechtigung für „Incoming Events: Write“ wie hier beschrieben
Wir richten PowerMTA ein, um Ereignisse an Ihr SparkPost-Konto zu streamen, dann können Sie Folgendes verwenden:
Zusammenfassungsbericht
Bounce Bericht
Accepted Bericht
Delayed Bericht
Zuerst installieren (oder aktualisieren) Sie auf PowerMTA 5.0 r4 oder neuer, indem Sie den üblichen v5.0-Installationsanweisungen folgen, die ziemlich einfach sind. Dann arbeiten wir die folgenden Schritte durch:
Konfigurieren Sie den PowerMTA-Connector zu SparkPost Signals
Richten Sie Engagement Tracking mit einer benutzerdefinierten Tracking-Domain ein
Wählen Sie, welche PowerMTA-Datenströme an Signals gemeldet werden sollen
Testen, ob Ihre Ereignisse bei Signals ankommen
Überprüfen, wie Sie aussagekräftige Namen verwenden, die in Berichten gut sichtbar sind.
Wir werden auch andere spezifische PowerPMTA-Einrichtungsaspekte abdecken, die in unserer Signals-Demo verwendet werden:
FBL-Ereignisse (Spam-Beschwerden) und Remote- (Out-of-Band-) Bounces
Injektionskonfiguration, einschließlich DKIM
FBL- und OOB-Konfiguration
VirtualMTA-Einrichtung und Benennung (und wie dies in Ihren SparkPost Signals-Berichten erscheint)
Schließlich gibt es ein „Bonusfeature“ mit Code, um sicherzustellen, dass Ihre Kampagnennamen mit PowerMTA X-Job-Namenskonventionen kompatibel sind.
Konfigurieren Sie PowerMTA connector
Die Signals-Konfiguration wird im 5.0 Benutzerhandbuch Abschnitt 10.1 beschrieben. Hier beginnen wir mit „Anwendungsfall #2“, der Signals für den gesamten Datenverkehr von diesem PowerMTA-Host aktiviert und das SparkPost-Engagement-Tracking ermöglicht.
Hier ist, was jedes Attribut tut:
api-key
Dies ist einzigartig für Ihr SparkPost-Konto, es ist der Wert, den Sie zuvor von SparkPost erhalten haben.
upload-url
Dies muss mit der Adresse Ihres SparkPost-API-Dienstes übereinstimmen, egal ob es sich um die USA oder die EU handelt. Für weitere Informationen siehe hier. Die üblichen Werte sind:
SparkPost (USA): https://api.sparkpost.com/api/v1/ingest/events
SparkPost EU: https://api.eu.sparkpost.com/api/v1/ingest/events
log-verbose
Diese Direktive ist optional und gibt bei Aktivierung etwas mehr Informationen in der pmta.log-Datei, was während der Einrichtung nützlich sein kann, um zu bestätigen, dass alles korrekt funktioniert. Jede Minute, auch wenn kein Datenverkehr vorhanden ist, sehen Sie:
2019-07-26 11:47:57 Signals: Discovered 0 files
Bei Datenverkehr sehen Sie etwas wie:
min-free-space
Dies teilt PowerMTA den Speicherplatzschwellenwert mit, bei dem die ältesten SparkPost-JSON-Ereignisdateien gelöscht werden, um Platz für neue Dateien zu schaffen, wenn der Speicherplatz knapp wird.
enable-signals
Dies teilt PowerMTA mit, dass es an Signals hochladen soll, in diesem Fall global für den gesamten Datenverkehr (mehr Informationen hier, für v5.0). Sie können selektiver sein, welche Datenverkehrsströme hochgeladen werden sollen, wenn Sie möchten.
Sie können auch bestimmte PowerMTA-Datenverkehrsströme als zu einem SparkPost-Subaccount gehörend kennzeichnen – dies ist eine weitere Möglichkeit, einen bestimmten Datenverkehrsstrom von einem anderen zu unterscheiden.
engagement-tracking, customer-id
PowerMTAs Engagement-Tracking-Lösung verwendet standardmäßig die Tracking-Domain für den SparkPost US-gehosteten Dienst. Sie geben Ihre numerische SparkPost-Kundennummer an; hier sind Anweisungen zum Auffinden dieser.
tracking-domain
Für SparkPost EU-Konten fügen Sie die folgende Zeile hinzu:
tracking-domain pmta.eu.spgo.io # dies ist der Endpunkt für SparkPost EU
Benutzerdefinierte Tracking-Domain
Wenn Sie lieber Ihre eigene Tracking-Domain verwenden möchten (dies ist besser aus Zustellbarkeitsgründen), gehen Sie wie folgt vor:
Erstellen Sie eine Tracking-Domain bei Ihrem DNS-Anbieter, indem Sie einen CNAME-Eintrag erstellen. Dieser wird normalerweise eine Subdomain Ihrer Top-Level-Domain sein, z. B. track.mycompany.com .
Sie können auch HTTPS-Tracking-Domains verwenden, obwohl dies komplexer ist (siehe die SparkPost-Konfigurationsschritte für HTTPS-Tracking-Domains).
Registrieren Sie die Tracking-Domain in Ihrem SparkPost-Konto und verifizieren Sie diese. Warten Sie ein paar Minuten, bevor Sie dies versuchen, um Ihren DNS-Änderungen Zeit zu geben, um sich im Internet zu verbreiten, je nach Ihrem DNS-Anbieter.
Konfigurieren Sie PowerMTA, um diese Domain anstelle der Standard-Domain zu verwenden, mit
tracking-domain yourdomain.com # Setzen Sie hier Ihre eigene Domain ein
Sie können überprüfen, dass Ihre zugestellten E-Mails „Open-Pixels“ hinzugefügt und die Links umschlossen sind, indem Sie die Interna der E-Mail untersuchen (in Gmail verwenden Sie das Menü oben rechts und wählen „Original anzeigen“).

Sie werden die Open-Pixels am Anfang und Ende des HTMLs in der E-Mail bemerken. Jeder HTML-Link wird auch so geändert, dass REF auf die Tracking-Domain verweist.

Das ist alles, was Sie brauchen, um SparkPost Signals mit dem integrierten Engagement-Tracking von PowerMTA zum Laufen zu bringen.
Spezifische Links in Ihrer HTML-E-Mail von der Nachverfolgung ausnehmen
Sie können verhindern, dass PowerMTA bestimmte Links nachverfolgt, indem Sie das benutzerdefinierte Attribut data-msys-clicktrack auf „0“ setzen:
<a href="#" data-msys-clicktrack="0">Example</a>
PowerMTA wird den Link nicht umschließen. Es wird dieses Attribut auch vor der Übertragung der Nachricht an Ihren Empfänger entfernen.
Wählen Sie aus, welche PowerMTA Traffic-Streams an Signals gemeldet werden sollen
Testen, ob Ihre Events Signals erreichen
Hier ist eine Ansicht von SparkPost Signals, verbunden mit PowerMTA. Sie können sehen, dass der Gesundheitswert variiert.

Die Kampagnennamen sind als Berichtsfacetten verfügbar, zusammen mit Subaccount, IP-Pool, Mailbox Provider und sendender Domain.
Zusätzlich zum Betrachten der PowerMTA-Protokolle können Sie überprüfen, ob die Ereignisdaten SparkPost erreichen, indem Sie sich den Signals-Integrationsbildschirm ansehen.

Auf Ihrem SparkPost-Events-Suchbildschirm sollten Sie innerhalb weniger Minuten Ereignisse sehen. Diese werden Injektion und Zustellereignisse beinhalten, ebenso wie Bounces und möglicherweise Out-of-Band-Bounces und Spam-Beschwerdeereignisse, falls Sie PowerMTA bereits dafür konfiguriert haben.
Wenn Sie das Engagement-Tracking aktiviert haben, werden Sie auch open, initial_open und click Ereignisse sehen.
Verwendung aussagekräftiger Namen, die in Berichten gut angezeigt werden
Das Einrichten von bedeutungsvollen und menschenlesbaren Namen für die PowerMTA VirtualMTA-Pools und Job-Namen ist lohnenswert. Diese erscheinen direkt in Ihren SparkPost Signals Facetten und im Zusammenfassungsbericht.
Wie bereits erwähnt, müssen Sie diese Pools nicht in Ihrem SparkPost-Konto erstellen. SparkPost übernimmt sie aus Ihrer PowerMTA-Konfiguration.
So übersetzen sich PowerMTA-Konfigurationsbegriffe in SparkPost-Begriffe.
PowerMTA BegriffSparkPost Berichte / Signals BegriffEmpfänger Domain
PowerMTA kann jedoch virtuelle MTAs, Virtual MTA Pools oder Sender-or-From Domains mit einer Subaccount-ID für SparkPost-Berichtszwecke taggen.
Das Einrichten von mindestens einer smtp-source-host Adresse ermöglicht es SparkPost außerdem, die sendende IP-Adresse korrekt zu identifizieren, sodass diese in Injection- und Zustellungsereignissen sowie in der Zusammenfassungsberichtsanzeige erscheint.
Job-Namen werden in PowerMTA über einen Header in der eingehenden Nachricht festgelegt. Neben der Aktivierung der individuellen Job-Kontrolle (Pause/Wiederaufnahme etc.), was an sich nützlich ist, leitet PowerMTA die Namen als „Campaign ID“ an die SparkPost Signals-Berichterstattung weiter. Siehe Benutzerhandbuch v5.0 Abschnitt 12.8 „Tracking a campaign in PowerMTA with a JobID“.
Es gibt einige Dinge, die in Bezug auf die Job-Benennung zu beachten sind. Während SparkPost (mit JSON-Format und JSON-Escaping) Zeichen wie <SPACE> in Kampagnennamen zulässt, sind Mail-Header restriktiver. Gültige Zeichen im X-Job-Header sind:
A-Za-z0-9!#$%&'()*+,-./:;<=>?@[\]^_{|}~
Mit anderen Worten: nicht erlaubte Zeichen sind <SPACE>, Anführungszeichen „ und Backtick `. Wenn Sie es gewohnt sind, mit X-Job-Namen zu arbeiten, überrascht dies nicht, und Ihre Campaign ID-Namen werden in SparkPost-Berichten „einfach funktionieren“. Wenn Sie, wie ich, zuerst SparkPost gelernt haben, möchten Sie vielleicht ein Tool, das sicherstellt, dass Ihre X-Job-Werte sicher sind; siehe die Bonusfunktion am Ende dieses Artikels.
FBL-Ereignisse (Spam Complaints) und externe (out-of-band) Bounces
PowerMTA kann FBL-Ereignisse (bei SparkPost als Spam-Beschwerden bekannt) und Remote-Bounces (bei SparkPost als Out-of-Band-Bounces bekannt, da die Antwort erst einige Zeit später zurückkommt und nicht während der SMTP-Konversation) empfangen und verarbeiten.
Es gibt Artikel im Port25-Support-Forum, wie man den Bounce-Processor und den FBL-Processor einrichtet. Wenn Sie ein bestehender PowerMTA-Benutzer sind, haben Sie diese wahrscheinlich bereits.
Hier ist die Konfiguration, die ich für eine Demo gemacht habe, basierend auf diesen Artikeln und ausgerichtet auf das Hosting von PowerMTA in Amazon EC2.
Wenn Sie mit der Konfiguration von PowerMTA in diesem Bereich vertraut sind, können Sie diesen Teil überspringen und zur nächsten horizontalen Linie gehen.
Injection-Konfiguration
Wir werden Port 587 für injizierte Nachrichten verwenden, die über das öffentliche Internet von einem anderen Host kommen. Wir müssen verhindern, dass bösartige Akteure diesen Dienst entdecken und missbrauchen, daher setzen wir die Authentifizierung mit Benutzername/Passwort sowie optionales TLS ein, ähnlich wie bei den SparkPost SMTP-Injektionsendpunkten.
Wir möchten in der Lage sein, Nachrichten von Quellen, die ordnungsgemäß authentifiziert sind, an jedes Ziel zu senden. Wir möchten außerdem einen separaten Listener auf Port 25 für Feedback Loops (FBL) und Rückantworten auf Bounces, die keine Authentifizierung erfordern.
In den folgenden <source>-Deklarationen verwenden wir die Authentifizierung mit Benutzername/Passwort und optionales TLS, um uns gegen bösartige Nachrichteninjektionen zu verteidigen. Wir setzen auch Ratenlimits für Verbindungen, die fehlerhafte Passwortversuche machen.
Ihre Einrichtung könnte anders sein; beispielsweise, wenn Sie ein privates Netzwerk zwischen Injector und PowerMTA haben, benötigen Sie keine Passwortauthentifizierung.
Die <source {auth}>-Deklaration (siehe hier. v5.0) greift, sobald die Authentifizierung bestanden wurde. Hier erlaubt sie das Weiterleiten, richtet die Standard-MTA-Gruppe ein und fügt den X-Job-Header hinzu (der von SparkPost Signals als campaign_id gemeldet wird).
Die Rewrite-Liste ordnet injizierten Nachrichten die Verwendung einer spezifischen MAIL FROM-Domain zu (alias Bounce-Domain oder Return-Path:).
Dann konfigurieren wir unsere TLS-Konfiguration und den SMTP-Benutzername / Passwort gemäß den aktuellen Empfehlungen.
Wir können überprüfen, dass das (unsichere, veraltete) TLS v1.0 mithilfe meines bevorzugten SMTP-Testtools swaks nicht akzeptiert wird.
Wir sehen:
Ebenso für –tls-protocol tlsv1_1.
Lassen Sie uns auch DKIM-Signierung auf unseren ausgehenden Nachrichten anwenden, da dies eine gute Praxis ist (ich bin diesen Anweisungen gefolgt, um den Schlüssel einzurichten).
FBL und OOB-Konfiguration
Jetzt .. endlich .. geben wir an, welche spezifischen Domains für Fern-Bounce- und FBL-Antworten offen sind. Wir möchten diese nicht irgendwo weiterleiten (um Backscatter-Angriffe zu verhindern), sondern diese Antworten intern verarbeiten.
Sie können sehen, dass ich zwei Bounce-Domains eingerichtet habe, als ich mit der Verwendung/nicht Verwendung der mfrom-Umschreiberegel spielte.
Die FBL-Domain wird normalerweise bei externen Diensten wie Microsoft SNDS registriert; sehen Sie diesen Artikel für weitere Informationen. Für diese Demo kommen die FBLs vom Bouncy Sink, daher ist keine Registrierung erforderlich.
Testen des SMTP-Listeners
Es ist wichtig zu testen, dass Ihr SMTP-Listener eine Autorisierung für allgemeine Ziele erfordert und alle Nachrichten ablehnt, die nicht speziell an die FBL- und Remote-Bounce-Domains adressiert sind.
Wie erwartet zeigt die Antwort, dass das Relaying verweigert wird:
550 5.7.1 relaying denied for recipient in "RCPT TO:<test@strange.pmta.signalsdemo.trymsys.net>
(Ende der Demo-Einrichtungsbeschreibung).
VirtualMTA Einrichtung und Benennung
PowerMTA VirtualMTAs (und VirtualMTA-Pools) sind leistungsstarke Funktionen zur Verwaltung von Nachrichtenströmen, und die PowerMTA/SparkPost Signals Berichtsmerkmale funktionieren am besten, wenn diese aktiv sind.
Die Einstellung virtual-mta-pool wird in SparkPost als „IP Pool“ berichtet und steht als SparkPost Signals Berichtsmerkmal zur Verfügung (das Dropdown-Menü unterhalb der Diagramme).

Der Zusammenfassungsbericht zeigt auch IP Pool als ein „Group By“ Berichtsmerkmal.

Wie bereits früher in diesem Artikel erwähnt, ermöglicht das Einrichten von mindestens einer smtp-source-host Adresse auch SparkPost, die sendende IP-Adresse korrekt zu identifizieren, damit diese bei Injection- und Delivery-Ereignissen sowie im Zusammenfassungsbericht angezeigt wird:

Das ist alles, was Sie brauchen, um eine grundlegende Integration zwischen PowerMTA und SparkPost Signals zum Laufen zu bringen. Sie finden das vollständige Konfigurationsdatei-Beispiel hier.
Bevor Sie gehen, hier ist das Bonus-Feature, das ich erwähnt habe.
Bonusfunktion: X-Job Namensprüfung/-filterung
Um sicherzustellen, dass jede Zeichenkette sicher für die Verwendung als PowerMTA X-Job Name ist, hier ist eine einfache Python-Funktion, die unsichere Zeichen auf einen Unterstrich „_“ abbildet.
Dies verwendet Python Reguläre Ausdrücke in einer speziellen Weise. Es deklariert die Menge der unerlaubten Zeichen mit dem „Mengenkomplement“-Operator ^ anstatt alle erlaubten Zeichen aufzulisten. Das bedeutet, dass wir Zeichen über den üblichen 7-Bit-Satz hinaus erfassen (und sicher machen). Wir können das mit diesem Testfragment zeigen:
s='' for i in range(32, 256): s += chr(i) print(pmtaSafeJobID(s))
Gibt folgendes aus
Sie können sehen, dass <SPACE>, Anführungszeichen “, und Backtick ` sowie alle Zeichen jenseits von ~ auf Unterstrich abgebildet sind.



