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. Sie benötigen:
Einen Host, um die neueste Version von PowerMTA auszuführen – entweder neu oder eine vorhandene Maschine
Ein SparkPost-Konto mit API-Schlüsselberechtigung für „Incoming Events: Write“ wie hier beschrieben
Wir werden PowerMTA einrichten, um Ereignisse zu Ihrem SparkPost-Konto zu streamen, dann können Sie Folgendes verwenden:
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 neu oder eine vorhandene Maschine
Ein SparkPost-Konto mit API-Schlüsselberechtigung für „Incoming Events: Write“ wie hier beschrieben
Wir werden PowerMTA einrichten, um Ereignisse zu Ihrem SparkPost-Konto zu streamen, dann können Sie Folgendes verwenden:
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 neu oder eine vorhandene Maschine
Ein SparkPost-Konto mit API-Schlüsselberechtigung für „Incoming Events: Write“ wie hier beschrieben
Wir werden PowerMTA einrichten, um Ereignisse zu Ihrem SparkPost-Konto zu streamen, dann können Sie Folgendes verwenden:
Installation und Konfiguration Übersicht
Zuerst installieren (oder aktualisieren) Sie auf PowerMTA 5.0 r4 oder später, indem Sie den üblichen v5.0 Installationsanweisungen folgen, die ziemlich unkompliziert sind. Dann gehen wir die folgenden Schritte durch:
Konfigurieren Sie den PowerMTA-Connector für SparkPost Signals
Richten Sie das Engagement-Tracking mit einer benutzerdefinierten Tracking-Domäne ein
Wählen Sie aus, welche PowerMTA-Traffic-Streams an Signals gemeldet werden sollen
Testen Sie, ob Ihre Ereignisse Signals erreichen
Überprüfen Sie, wie Sie aussagekräftige Namen verwenden können, die im Reporting gut angezeigt werden.
Wir werden auch die anderen spezifischen PowerMTA-Einrichtungsaspekte behandeln, die in unserem Signals-Demo verwendet werden:
FBL-Ereignisse (Spam-Beschwerden) und Remote-Abpraller (out-of-band)
Injektion-Konfiguration, einschließlich DKIM
FBL- und OOB-Konfiguration
VirtualMTA-Einrichtung und Benennung (und wie dies in Ihren SparkPost Signals-Berichten erscheint)
Schließlich gibt es eine „Bonusfunktion“ mit Code, um sicherzustellen, dass Ihre Kampagnennamen mit den PowerMTA X-Job Namenskonventionen kompatibel sind.
Zuerst installieren (oder aktualisieren) Sie auf PowerMTA 5.0 r4 oder später, indem Sie den üblichen v5.0 Installationsanweisungen folgen, die ziemlich unkompliziert sind. Dann gehen wir die folgenden Schritte durch:
Konfigurieren Sie den PowerMTA-Connector für SparkPost Signals
Richten Sie das Engagement-Tracking mit einer benutzerdefinierten Tracking-Domäne ein
Wählen Sie aus, welche PowerMTA-Traffic-Streams an Signals gemeldet werden sollen
Testen Sie, ob Ihre Ereignisse Signals erreichen
Überprüfen Sie, wie Sie aussagekräftige Namen verwenden können, die im Reporting gut angezeigt werden.
Wir werden auch die anderen spezifischen PowerMTA-Einrichtungsaspekte behandeln, die in unserem Signals-Demo verwendet werden:
FBL-Ereignisse (Spam-Beschwerden) und Remote-Abpraller (out-of-band)
Injektion-Konfiguration, einschließlich DKIM
FBL- und OOB-Konfiguration
VirtualMTA-Einrichtung und Benennung (und wie dies in Ihren SparkPost Signals-Berichten erscheint)
Schließlich gibt es eine „Bonusfunktion“ mit Code, um sicherzustellen, dass Ihre Kampagnennamen mit den PowerMTA X-Job Namenskonventionen kompatibel sind.
Zuerst installieren (oder aktualisieren) Sie auf PowerMTA 5.0 r4 oder später, indem Sie den üblichen v5.0 Installationsanweisungen folgen, die ziemlich unkompliziert sind. Dann gehen wir die folgenden Schritte durch:
Konfigurieren Sie den PowerMTA-Connector für SparkPost Signals
Richten Sie das Engagement-Tracking mit einer benutzerdefinierten Tracking-Domäne ein
Wählen Sie aus, welche PowerMTA-Traffic-Streams an Signals gemeldet werden sollen
Testen Sie, ob Ihre Ereignisse Signals erreichen
Überprüfen Sie, wie Sie aussagekräftige Namen verwenden können, die im Reporting gut angezeigt werden.
Wir werden auch die anderen spezifischen PowerMTA-Einrichtungsaspekte behandeln, die in unserem Signals-Demo verwendet werden:
FBL-Ereignisse (Spam-Beschwerden) und Remote-Abpraller (out-of-band)
Injektion-Konfiguration, einschließlich DKIM
FBL- und OOB-Konfiguration
VirtualMTA-Einrichtung und Benennung (und wie dies in Ihren SparkPost Signals-Berichten erscheint)
Schließlich gibt es eine „Bonusfunktion“ mit Code, um sicherzustellen, dass Ihre Kampagnennamen mit den PowerMTA X-Job Namenskonventionen kompatibel sind.
FBL und OOB-Konfiguration
Jetzt .. endlich .. geben wir an, welche spezifischen Domains für Remote-Bounce und FBL-Antworten offen sind. Wir möchten diese nirgendwo weiterleiten (um Backscatter-Angriffe zu verhindern), sondern diese Antworten intern verarbeiten.
# # 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>
Sie können sehen, dass ich zwei Bounce-Domains eingerichtet habe, während ich mit der Verwendung/nicht Verwendung der mfrom Rewrite-Regel experimentierte.
Die FBL-Domain wird normalerweise bei externen Diensten wie Microsoft SNDS registriert; Informationen finden Sie in diesem Artikel. Für dieses Demo kommen die FBLs aus dem Bouncy Sink, es besteht also keine Notwendigkeit zur Registrierung.
Jetzt .. endlich .. geben wir an, welche spezifischen Domains für Remote-Bounce und FBL-Antworten offen sind. Wir möchten diese nirgendwo weiterleiten (um Backscatter-Angriffe zu verhindern), sondern diese Antworten intern verarbeiten.
# # 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>
Sie können sehen, dass ich zwei Bounce-Domains eingerichtet habe, während ich mit der Verwendung/nicht Verwendung der mfrom Rewrite-Regel experimentierte.
Die FBL-Domain wird normalerweise bei externen Diensten wie Microsoft SNDS registriert; Informationen finden Sie in diesem Artikel. Für dieses Demo kommen die FBLs aus dem Bouncy Sink, es besteht also keine Notwendigkeit zur Registrierung.
Jetzt .. endlich .. geben wir an, welche spezifischen Domains für Remote-Bounce und FBL-Antworten offen sind. Wir möchten diese nirgendwo weiterleiten (um Backscatter-Angriffe zu verhindern), sondern diese Antworten intern verarbeiten.
# # 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>
Sie können sehen, dass ich zwei Bounce-Domains eingerichtet habe, während ich mit der Verwendung/nicht Verwendung der mfrom Rewrite-Regel experimentierte.
Die FBL-Domain wird normalerweise bei externen Diensten wie Microsoft SNDS registriert; Informationen finden Sie in diesem Artikel. Für dieses Demo kommen die FBLs aus dem Bouncy Sink, es besteht also keine Notwendigkeit zur Registrierung.
Konfigurieren Sie PowerMTA Connector
Die Signale Konfiguration wird im 5.0 Benutzerhandbuch Abschnitt 10.1 beschrieben. Hier beginnen wir mit „Anwendungsfall #2“, der Signale für den gesamten Datenverkehr dieses PowerMTA-Hosts aktiviert und SparkPost-Beteiligungsverfolgung aktiviert.
# # 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
Das macht jedes Attribut:
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. Weitere Informationen finden Sie 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 wenn aktiviert, gibt sie ein wenig 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 es keinen Verkehr gibt, sehen Sie:
2019-07-26 11:47:57 Signals: Discovered 0 files
Bei Verkehr sehen Sie etwas wie:
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
Dies teilt PowerMTA mit, ab welchem Speicherplatzschwellenwert es beginnen soll, die ältesten SparkPost JSON-Ereignisdateien zu löschen, um Platz für neue Dateien zu schaffen, wenn der Speicherplatz knapp wird.
enable-signals
Dies teilt PowerMTA mit, dass es an Signale hochladen soll, in diesem Fall global für den gesamten Datenverkehr (weitere Informationen hier, für v5.0). Sie können selektiver sein, welche Datenströme Sie hochladen möchten.
Sie können auch bestimmten PowerMTA-Datenverkehr als zu einem SparkPost-Unterkonto zugehörig melden – dies ist eine weitere Möglichkeit, einen bestimmten Datenstrom von einem anderen zu unterscheiden.
engagement-tracking, customer-id
Die Beteiligungsverfolgungslösung von PowerMTA verwendet standardmäßig die Tracking-Domain für den in den USA gehosteten SparkPost-Dienst. Sie geben Ihre numerische SparkPost-Kunden-ID an; hier sind Anleitungen zum Finden dafür.
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 es vorziehen, Ihre eigene Tracking-Domain zu verwenden (dies ist besser aus Sicht der Zustellbarkeit), tun Sie Folgendes:
Erstellen Sie eine Tracking-Domain bei Ihrem DNS-Anbieter, indem Sie einen CNAME-Eintrag erstellen. Dies wird normalerweise eine Subdomain Ihrer Top-Level-Domain sein, z.B. 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
Sie können auch HTTPS-Tracking-Domains verwenden, obwohl dies aufwändiger 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 Ihrer DNS-Änderungen Gelegenheit zur Verbreitung im Internet zu geben, abhängig von 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
Sie können überprüfen, ob Ihren gesendeten E-Mails „Open-Pixel“ hinzugefügt wurden und die Links umgewandelt wurden, indem Sie die Interna der E-Mail betrachten (in Gmail, verwenden Sie das Menü oben rechts und wählen Sie „Original anzeigen“).

Sie werden die Open-Pixel am Anfang und Ende des HTMLs in der E-Mail bemerken. Jeder HTML-Link wird ebenfalls geändert, um einen REF zu haben, der auf die Tracking-Domain zeigt.

Das ist alles, was Sie benötigen, um SparkPost Signals mit PowerMTAs eingebautem Engagement-Tracking zum Laufen zu bringen.
Verhindern, dass bestimmte Links in Ihrer HTML-E-Mail nachverfolgt werden
Sie können verhindern, dass PowerMTA bestimmte Links verfolgt, indem Sie das benutzerdefinierte Attribut data-msys-clicktrack auf „0“ setzen:
<a href="#" data-msys-clicktrack="0">Beispiel</a>
PowerMTA wird den Link nicht umwandeln und das Attribut entfernen, bevor die Nachricht an den Empfänger übertragen wird.
Die Signale Konfiguration wird im 5.0 Benutzerhandbuch Abschnitt 10.1 beschrieben. Hier beginnen wir mit „Anwendungsfall #2“, der Signale für den gesamten Datenverkehr dieses PowerMTA-Hosts aktiviert und SparkPost-Beteiligungsverfolgung aktiviert.
# # 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
Das macht jedes Attribut:
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. Weitere Informationen finden Sie 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 wenn aktiviert, gibt sie ein wenig 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 es keinen Verkehr gibt, sehen Sie:
2019-07-26 11:47:57 Signals: Discovered 0 files
Bei Verkehr sehen Sie etwas wie:
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
Dies teilt PowerMTA mit, ab welchem Speicherplatzschwellenwert es beginnen soll, die ältesten SparkPost JSON-Ereignisdateien zu löschen, um Platz für neue Dateien zu schaffen, wenn der Speicherplatz knapp wird.
enable-signals
Dies teilt PowerMTA mit, dass es an Signale hochladen soll, in diesem Fall global für den gesamten Datenverkehr (weitere Informationen hier, für v5.0). Sie können selektiver sein, welche Datenströme Sie hochladen möchten.
Sie können auch bestimmten PowerMTA-Datenverkehr als zu einem SparkPost-Unterkonto zugehörig melden – dies ist eine weitere Möglichkeit, einen bestimmten Datenstrom von einem anderen zu unterscheiden.
engagement-tracking, customer-id
Die Beteiligungsverfolgungslösung von PowerMTA verwendet standardmäßig die Tracking-Domain für den in den USA gehosteten SparkPost-Dienst. Sie geben Ihre numerische SparkPost-Kunden-ID an; hier sind Anleitungen zum Finden dafür.
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 es vorziehen, Ihre eigene Tracking-Domain zu verwenden (dies ist besser aus Sicht der Zustellbarkeit), tun Sie Folgendes:
Erstellen Sie eine Tracking-Domain bei Ihrem DNS-Anbieter, indem Sie einen CNAME-Eintrag erstellen. Dies wird normalerweise eine Subdomain Ihrer Top-Level-Domain sein, z.B. 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
Sie können auch HTTPS-Tracking-Domains verwenden, obwohl dies aufwändiger 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 Ihrer DNS-Änderungen Gelegenheit zur Verbreitung im Internet zu geben, abhängig von 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
Sie können überprüfen, ob Ihren gesendeten E-Mails „Open-Pixel“ hinzugefügt wurden und die Links umgewandelt wurden, indem Sie die Interna der E-Mail betrachten (in Gmail, verwenden Sie das Menü oben rechts und wählen Sie „Original anzeigen“).

Sie werden die Open-Pixel am Anfang und Ende des HTMLs in der E-Mail bemerken. Jeder HTML-Link wird ebenfalls geändert, um einen REF zu haben, der auf die Tracking-Domain zeigt.

Das ist alles, was Sie benötigen, um SparkPost Signals mit PowerMTAs eingebautem Engagement-Tracking zum Laufen zu bringen.
Verhindern, dass bestimmte Links in Ihrer HTML-E-Mail nachverfolgt werden
Sie können verhindern, dass PowerMTA bestimmte Links verfolgt, indem Sie das benutzerdefinierte Attribut data-msys-clicktrack auf „0“ setzen:
<a href="#" data-msys-clicktrack="0">Beispiel</a>
PowerMTA wird den Link nicht umwandeln und das Attribut entfernen, bevor die Nachricht an den Empfänger übertragen wird.
Die Signale Konfiguration wird im 5.0 Benutzerhandbuch Abschnitt 10.1 beschrieben. Hier beginnen wir mit „Anwendungsfall #2“, der Signale für den gesamten Datenverkehr dieses PowerMTA-Hosts aktiviert und SparkPost-Beteiligungsverfolgung aktiviert.
# # 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
Das macht jedes Attribut:
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. Weitere Informationen finden Sie 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 wenn aktiviert, gibt sie ein wenig 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 es keinen Verkehr gibt, sehen Sie:
2019-07-26 11:47:57 Signals: Discovered 0 files
Bei Verkehr sehen Sie etwas wie:
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
Dies teilt PowerMTA mit, ab welchem Speicherplatzschwellenwert es beginnen soll, die ältesten SparkPost JSON-Ereignisdateien zu löschen, um Platz für neue Dateien zu schaffen, wenn der Speicherplatz knapp wird.
enable-signals
Dies teilt PowerMTA mit, dass es an Signale hochladen soll, in diesem Fall global für den gesamten Datenverkehr (weitere Informationen hier, für v5.0). Sie können selektiver sein, welche Datenströme Sie hochladen möchten.
Sie können auch bestimmten PowerMTA-Datenverkehr als zu einem SparkPost-Unterkonto zugehörig melden – dies ist eine weitere Möglichkeit, einen bestimmten Datenstrom von einem anderen zu unterscheiden.
engagement-tracking, customer-id
Die Beteiligungsverfolgungslösung von PowerMTA verwendet standardmäßig die Tracking-Domain für den in den USA gehosteten SparkPost-Dienst. Sie geben Ihre numerische SparkPost-Kunden-ID an; hier sind Anleitungen zum Finden dafür.
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 es vorziehen, Ihre eigene Tracking-Domain zu verwenden (dies ist besser aus Sicht der Zustellbarkeit), tun Sie Folgendes:
Erstellen Sie eine Tracking-Domain bei Ihrem DNS-Anbieter, indem Sie einen CNAME-Eintrag erstellen. Dies wird normalerweise eine Subdomain Ihrer Top-Level-Domain sein, z.B. 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
Sie können auch HTTPS-Tracking-Domains verwenden, obwohl dies aufwändiger 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 Ihrer DNS-Änderungen Gelegenheit zur Verbreitung im Internet zu geben, abhängig von 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
Sie können überprüfen, ob Ihren gesendeten E-Mails „Open-Pixel“ hinzugefügt wurden und die Links umgewandelt wurden, indem Sie die Interna der E-Mail betrachten (in Gmail, verwenden Sie das Menü oben rechts und wählen Sie „Original anzeigen“).

Sie werden die Open-Pixel am Anfang und Ende des HTMLs in der E-Mail bemerken. Jeder HTML-Link wird ebenfalls geändert, um einen REF zu haben, der auf die Tracking-Domain zeigt.

Das ist alles, was Sie benötigen, um SparkPost Signals mit PowerMTAs eingebautem Engagement-Tracking zum Laufen zu bringen.
Verhindern, dass bestimmte Links in Ihrer HTML-E-Mail nachverfolgt werden
Sie können verhindern, dass PowerMTA bestimmte Links verfolgt, indem Sie das benutzerdefinierte Attribut data-msys-clicktrack auf „0“ setzen:
<a href="#" data-msys-clicktrack="0">Beispiel</a>
PowerMTA wird den Link nicht umwandeln und das Attribut entfernen, bevor die Nachricht an den Empfänger übertragen wird.
Wählen Sie aus, welche PowerMTA-Datenströme an Signals gemeldet werden sollen
Sie können wählen, dass Signale aktiv sind:
Global (dies ist, was wir im obigen Beispiel verwendet haben)
Für einige virtuelle MTAs und nicht für andere
Für einige virtuelle MTA-Pools und nicht für andere
Für bestimmte „Sender“ oder „From“ Adressen, die von PowerMTA weitergeleitet werden, in Kombination mit den virtuellen MTA / virtuellen MTA-Pool-Auswahlen
Umfang | Was an Signale gemeldet wird | Wann es zu verwenden ist |
|---|---|---|
Global | Alle Datenverkehr vom PowerMTA-Host | Einfache Bereitstellungen, bei denen alle Daten in SparkPost Signale einfließen sollten. |
VirtualMTA | Datenverkehr nur von ausgewählten VirtualMTAs | Wenn Sie separate Berichtsansichten für verschiedene IPs oder Datenverkehrsarten wünschen. |
VirtualMTA Pool | Datenverkehr aus ausgewählten VirtualMTA-Pools | Wenn Sie IPs in Pools gruppieren und eine Pool-Ebene-Berichterstattung wünschen. |
Absender / Von-Domain | Nachrichten von bestimmten Absender- oder Von-Domains | Wenn Sie Berichte pro Kunde oder pro Marke innerhalb derselben Infrastruktur benötigen. |
Diese Konfiguration ist sehr leistungsfähig und wird durch eine Reihe von Beispiel-Anwendungsfällen (v5.0) im Benutzerhandbuch veranschaulicht.
Sie können wählen, dass Signale aktiv sind:
Global (dies ist, was wir im obigen Beispiel verwendet haben)
Für einige virtuelle MTAs und nicht für andere
Für einige virtuelle MTA-Pools und nicht für andere
Für bestimmte „Sender“ oder „From“ Adressen, die von PowerMTA weitergeleitet werden, in Kombination mit den virtuellen MTA / virtuellen MTA-Pool-Auswahlen
Umfang | Was an Signale gemeldet wird | Wann es zu verwenden ist |
|---|---|---|
Global | Alle Datenverkehr vom PowerMTA-Host | Einfache Bereitstellungen, bei denen alle Daten in SparkPost Signale einfließen sollten. |
VirtualMTA | Datenverkehr nur von ausgewählten VirtualMTAs | Wenn Sie separate Berichtsansichten für verschiedene IPs oder Datenverkehrsarten wünschen. |
VirtualMTA Pool | Datenverkehr aus ausgewählten VirtualMTA-Pools | Wenn Sie IPs in Pools gruppieren und eine Pool-Ebene-Berichterstattung wünschen. |
Absender / Von-Domain | Nachrichten von bestimmten Absender- oder Von-Domains | Wenn Sie Berichte pro Kunde oder pro Marke innerhalb derselben Infrastruktur benötigen. |
Diese Konfiguration ist sehr leistungsfähig und wird durch eine Reihe von Beispiel-Anwendungsfällen (v5.0) im Benutzerhandbuch veranschaulicht.
Sie können wählen, dass Signale aktiv sind:
Global (dies ist, was wir im obigen Beispiel verwendet haben)
Für einige virtuelle MTAs und nicht für andere
Für einige virtuelle MTA-Pools und nicht für andere
Für bestimmte „Sender“ oder „From“ Adressen, die von PowerMTA weitergeleitet werden, in Kombination mit den virtuellen MTA / virtuellen MTA-Pool-Auswahlen
Umfang | Was an Signale gemeldet wird | Wann es zu verwenden ist |
|---|---|---|
Global | Alle Datenverkehr vom PowerMTA-Host | Einfache Bereitstellungen, bei denen alle Daten in SparkPost Signale einfließen sollten. |
VirtualMTA | Datenverkehr nur von ausgewählten VirtualMTAs | Wenn Sie separate Berichtsansichten für verschiedene IPs oder Datenverkehrsarten wünschen. |
VirtualMTA Pool | Datenverkehr aus ausgewählten VirtualMTA-Pools | Wenn Sie IPs in Pools gruppieren und eine Pool-Ebene-Berichterstattung wünschen. |
Absender / Von-Domain | Nachrichten von bestimmten Absender- oder Von-Domains | Wenn Sie Berichte pro Kunde oder pro Marke innerhalb derselben Infrastruktur benötigen. |
Diese Konfiguration ist sehr leistungsfähig und wird durch eine Reihe von Beispiel-Anwendungsfällen (v5.0) im Benutzerhandbuch veranschaulicht.
Testen, ob Ihre Ereignisse Signals erreichen
Hier ist eine Ansicht von SparkPost Signals, verbunden mit PowerMTA. Sie können sehen, dass sich der Gesundheitswert ändert.

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

In Ihrem SparkPost-Event-Suchbildschirm sollten Sie sehen, dass Ereignisse innerhalb weniger Minuten erscheinen. Diese umfassen Injection- und Delivery-Ereignisse sowie Bounce und möglicherweise Out-of-Band Bounce und Spam-Beschwerdeereignisse, wenn Sie PowerMTA bereits so konfiguriert haben, dass es diese für Sie handhabt.
Wenn Sie Engagement-Tracking aktiviert haben, sehen Sie auch open, initial_open und click Ereignisse.
Hier ist eine Ansicht von SparkPost Signals, verbunden mit PowerMTA. Sie können sehen, dass sich der Gesundheitswert ändert.

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

In Ihrem SparkPost-Event-Suchbildschirm sollten Sie sehen, dass Ereignisse innerhalb weniger Minuten erscheinen. Diese umfassen Injection- und Delivery-Ereignisse sowie Bounce und möglicherweise Out-of-Band Bounce und Spam-Beschwerdeereignisse, wenn Sie PowerMTA bereits so konfiguriert haben, dass es diese für Sie handhabt.
Wenn Sie Engagement-Tracking aktiviert haben, sehen Sie auch open, initial_open und click Ereignisse.
Hier ist eine Ansicht von SparkPost Signals, verbunden mit PowerMTA. Sie können sehen, dass sich der Gesundheitswert ändert.

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

In Ihrem SparkPost-Event-Suchbildschirm sollten Sie sehen, dass Ereignisse innerhalb weniger Minuten erscheinen. Diese umfassen Injection- und Delivery-Ereignisse sowie Bounce und möglicherweise Out-of-Band Bounce und Spam-Beschwerdeereignisse, wenn Sie PowerMTA bereits so konfiguriert haben, dass es diese für Sie handhabt.
Wenn Sie Engagement-Tracking aktiviert haben, sehen Sie auch open, initial_open und click Ereignisse.
Verwendung von aussagekräftigen Namen, die in Berichten gut sichtbar sind
Das Einrichten der PowerMTA VirtualMTA Pool-Namen und Jobnamen, damit sie sinnvoll und menschenlesbar sind, lohnt sich. 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 Begriff SparkPost Berichte / Signals BegriffEmpfänger-Domain
(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
PowerMTA kann jedoch virtuelle MTAs, virtuelle MTA-Pools oder Sender-oder-From-Domains mit einer Subaccount-ID für SparkPost-Berichts-Zwecke versehen.
Subaccount ID (number) FBL (event) Spam Complaint (event) Remote Bounce (event) Out-of-Band bounce (event)
Das Einrichten von mindestens einer smtp-source-host-Adresse ermöglicht es SparkPost auch, die sendende IP-Adresse korrekt zu identifizieren, sodass sie bei Injektions- und Zustellungsereignissen sowie in der Zusammenfassungsberichtansicht angezeigt wird.
Jobnamen werden in PowerMTA über eine Kopfzeile in der eingespeisten Nachricht festgelegt. Neben der Möglichkeit zur individuellen Jobkontrolle (Pause/Resume etc.), die an sich schon nützlich ist, übermittelt PowerMTA die Namen als „Kampagnen-ID“ an die SparkPost Signals-Berichterstattung weiter. Siehe Benutzerhandbuch v5.0 Abschnitt 12.8 „Verfolgen einer Kampagne in PowerMTA mit einer JobID“.
Es gibt ein paar Dinge, die im Zusammenhang mit der Benennung von Jobs beachtet werden sollten. Während SparkPost (mit JSON-Format und JSON-Escape) Zeichen wie <SPACE> in Kampagnennamen erlaubt, sind Mail-Header restriktiver. Gültige Zeichen, die im X-Job-Header erlaubt sind, sind:
A-Za-z0-9!#$%&'()*+,-./:;<=>?@[\]^_{|}~
Mit anderen Worten, nicht erlaubte Zeichen umfassen <SPACE>, doppelte Anführungszeichen “ und Backtick `. Wenn Sie daran gewöhnt sind, mit X-Job-Namen zu arbeiten, wird Sie das nicht überraschen, und Ihre Kampagnen-ID-Namen werden in der SparkPost-Berichterstattung „einfach funktionieren“. Wenn Sie wie ich SparkPost zuerst gelernt haben, möchten Sie vielleicht ein Tool, um sicherzustellen, dass Ihre X-Job-Werte sicher sind; siehe das Bonus-Feature am Ende dieses Artikels.
PowerMTA Begriff | SparkPost Signals Begriff |
|---|---|
VirtualMTA | IP Pool |
VirtualMTA Pool | IP Pool (gruppiert) |
Job Name (X-Job-Header) | Kampagnen-ID |
smtp-source-host | Sendende IP-Adresse |
Absender-Domain | Sendedomain-Identifikation |
Sender/From Domain | Subaccount / Domain-Ebene-Berichterstattung |
Das Einrichten der PowerMTA VirtualMTA Pool-Namen und Jobnamen, damit sie sinnvoll und menschenlesbar sind, lohnt sich. 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 Begriff SparkPost Berichte / Signals BegriffEmpfänger-Domain
(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
PowerMTA kann jedoch virtuelle MTAs, virtuelle MTA-Pools oder Sender-oder-From-Domains mit einer Subaccount-ID für SparkPost-Berichts-Zwecke versehen.
Subaccount ID (number) FBL (event) Spam Complaint (event) Remote Bounce (event) Out-of-Band bounce (event)
Das Einrichten von mindestens einer smtp-source-host-Adresse ermöglicht es SparkPost auch, die sendende IP-Adresse korrekt zu identifizieren, sodass sie bei Injektions- und Zustellungsereignissen sowie in der Zusammenfassungsberichtansicht angezeigt wird.
Jobnamen werden in PowerMTA über eine Kopfzeile in der eingespeisten Nachricht festgelegt. Neben der Möglichkeit zur individuellen Jobkontrolle (Pause/Resume etc.), die an sich schon nützlich ist, übermittelt PowerMTA die Namen als „Kampagnen-ID“ an die SparkPost Signals-Berichterstattung weiter. Siehe Benutzerhandbuch v5.0 Abschnitt 12.8 „Verfolgen einer Kampagne in PowerMTA mit einer JobID“.
Es gibt ein paar Dinge, die im Zusammenhang mit der Benennung von Jobs beachtet werden sollten. Während SparkPost (mit JSON-Format und JSON-Escape) Zeichen wie <SPACE> in Kampagnennamen erlaubt, sind Mail-Header restriktiver. Gültige Zeichen, die im X-Job-Header erlaubt sind, sind:
A-Za-z0-9!#$%&'()*+,-./:;<=>?@[\]^_{|}~
Mit anderen Worten, nicht erlaubte Zeichen umfassen <SPACE>, doppelte Anführungszeichen “ und Backtick `. Wenn Sie daran gewöhnt sind, mit X-Job-Namen zu arbeiten, wird Sie das nicht überraschen, und Ihre Kampagnen-ID-Namen werden in der SparkPost-Berichterstattung „einfach funktionieren“. Wenn Sie wie ich SparkPost zuerst gelernt haben, möchten Sie vielleicht ein Tool, um sicherzustellen, dass Ihre X-Job-Werte sicher sind; siehe das Bonus-Feature am Ende dieses Artikels.
PowerMTA Begriff | SparkPost Signals Begriff |
|---|---|
VirtualMTA | IP Pool |
VirtualMTA Pool | IP Pool (gruppiert) |
Job Name (X-Job-Header) | Kampagnen-ID |
smtp-source-host | Sendende IP-Adresse |
Absender-Domain | Sendedomain-Identifikation |
Sender/From Domain | Subaccount / Domain-Ebene-Berichterstattung |
Das Einrichten der PowerMTA VirtualMTA Pool-Namen und Jobnamen, damit sie sinnvoll und menschenlesbar sind, lohnt sich. 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 Begriff SparkPost Berichte / Signals BegriffEmpfänger-Domain
(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
PowerMTA kann jedoch virtuelle MTAs, virtuelle MTA-Pools oder Sender-oder-From-Domains mit einer Subaccount-ID für SparkPost-Berichts-Zwecke versehen.
Subaccount ID (number) FBL (event) Spam Complaint (event) Remote Bounce (event) Out-of-Band bounce (event)
Das Einrichten von mindestens einer smtp-source-host-Adresse ermöglicht es SparkPost auch, die sendende IP-Adresse korrekt zu identifizieren, sodass sie bei Injektions- und Zustellungsereignissen sowie in der Zusammenfassungsberichtansicht angezeigt wird.
Jobnamen werden in PowerMTA über eine Kopfzeile in der eingespeisten Nachricht festgelegt. Neben der Möglichkeit zur individuellen Jobkontrolle (Pause/Resume etc.), die an sich schon nützlich ist, übermittelt PowerMTA die Namen als „Kampagnen-ID“ an die SparkPost Signals-Berichterstattung weiter. Siehe Benutzerhandbuch v5.0 Abschnitt 12.8 „Verfolgen einer Kampagne in PowerMTA mit einer JobID“.
Es gibt ein paar Dinge, die im Zusammenhang mit der Benennung von Jobs beachtet werden sollten. Während SparkPost (mit JSON-Format und JSON-Escape) Zeichen wie <SPACE> in Kampagnennamen erlaubt, sind Mail-Header restriktiver. Gültige Zeichen, die im X-Job-Header erlaubt sind, sind:
A-Za-z0-9!#$%&'()*+,-./:;<=>?@[\]^_{|}~
Mit anderen Worten, nicht erlaubte Zeichen umfassen <SPACE>, doppelte Anführungszeichen “ und Backtick `. Wenn Sie daran gewöhnt sind, mit X-Job-Namen zu arbeiten, wird Sie das nicht überraschen, und Ihre Kampagnen-ID-Namen werden in der SparkPost-Berichterstattung „einfach funktionieren“. Wenn Sie wie ich SparkPost zuerst gelernt haben, möchten Sie vielleicht ein Tool, um sicherzustellen, dass Ihre X-Job-Werte sicher sind; siehe das Bonus-Feature am Ende dieses Artikels.
PowerMTA Begriff | SparkPost Signals Begriff |
|---|---|
VirtualMTA | IP Pool |
VirtualMTA Pool | IP Pool (gruppiert) |
Job Name (X-Job-Header) | Kampagnen-ID |
smtp-source-host | Sendende IP-Adresse |
Absender-Domain | Sendedomain-Identifikation |
Sender/From Domain | Subaccount / Domain-Ebene-Berichterstattung |
FBL Ereignisse (Spam-Beschwerden) und remote (außerhalb des Bandes) Bounces
PowerMTA kann FBL-Ereignisse empfangen und verarbeiten (in SparkPost als Spam-Beschwerdeereignisse bekannt) sowie Remote-Bounces (in SparkPost als Out-of-Band-Bounces bekannt, da die Antwort einige Zeit später kommt, anstatt während der SMTP-Konversation).
Im Port25 Support Forum gibt es Artikel darüber, wie man den Bounce Processor und den FBL Processor einrichtet. Wenn Sie bereits ein PowerMTA-Nutzer sind, haben Sie diese wahrscheinlich schon.
Hier ist die Konfiguration, die ich für eine Demo basierend auf diesen Artikeln erstellt habe, und sie ist darauf ausgelegt, PowerMTA in Amazon EC2 zu hosten.
Wenn Sie mit der PowerMTA-Konfiguration in diesem Bereich vertraut sind, können Sie diesen Teil überspringen und zur nächsten horizontalen Linie übergehen.
PowerMTA kann FBL-Ereignisse empfangen und verarbeiten (in SparkPost als Spam-Beschwerdeereignisse bekannt) sowie Remote-Bounces (in SparkPost als Out-of-Band-Bounces bekannt, da die Antwort einige Zeit später kommt, anstatt während der SMTP-Konversation).
Im Port25 Support Forum gibt es Artikel darüber, wie man den Bounce Processor und den FBL Processor einrichtet. Wenn Sie bereits ein PowerMTA-Nutzer sind, haben Sie diese wahrscheinlich schon.
Hier ist die Konfiguration, die ich für eine Demo basierend auf diesen Artikeln erstellt habe, und sie ist darauf ausgelegt, PowerMTA in Amazon EC2 zu hosten.
Wenn Sie mit der PowerMTA-Konfiguration in diesem Bereich vertraut sind, können Sie diesen Teil überspringen und zur nächsten horizontalen Linie übergehen.
PowerMTA kann FBL-Ereignisse empfangen und verarbeiten (in SparkPost als Spam-Beschwerdeereignisse bekannt) sowie Remote-Bounces (in SparkPost als Out-of-Band-Bounces bekannt, da die Antwort einige Zeit später kommt, anstatt während der SMTP-Konversation).
Im Port25 Support Forum gibt es Artikel darüber, wie man den Bounce Processor und den FBL Processor einrichtet. Wenn Sie bereits ein PowerMTA-Nutzer sind, haben Sie diese wahrscheinlich schon.
Hier ist die Konfiguration, die ich für eine Demo basierend auf diesen Artikeln erstellt habe, und sie ist darauf ausgelegt, PowerMTA in Amazon EC2 zu hosten.
Wenn Sie mit der PowerMTA-Konfiguration in diesem Bereich vertraut sind, können Sie diesen Teil überspringen und zur nächsten horizontalen Linie übergehen.
Injektionskonfiguration
Wir verwenden Port 587 für eingespritzte Nachrichten, die über das öffentliche Internet von einem anderen Host kommen. Wir müssen verhindern, dass schlechte Akteure diesen Dienst entdecken und missbrauchen, deshalb wenden wir Benutzernamen/Passwort-Authentifizierung und optional TLS an, ähnlich wie bei den SparkPost SMTP-Injection-Endpunkten.
Wir möchten in der Lage sein, Nachrichten von Quellen zu senden, die ordnungsgemäß authentifiziert sind, an beliebige Ziele. Wir möchten auch einen separaten Listener auf Port 25 für FBL und Remote-Bounce-Antworten, die keine Authentifizierung erfordern.
# 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
In den folgenden <source> Deklarationen verwenden wir Benutzernamen/Passwort-Authentifizierung und optional TLS, um uns gegen schädliche Nachrichten-Injektion zu verteidigen. Wir setzen auch Ratenbegrenzungen für Verbindungen, die fehlerhafte Passwortversuche machen.
Ihre Konfiguration könnte anders sein; zum Beispiel, wenn Sie ein privates Netzwerk zwischen Injector und PowerMTA haben, brauchen Sie keine Passwort-Authentifizierung.
# 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>
Die <source {auth}> Deklaration (siehe hier. v5.0) gilt, nachdem die Authentifizierung bestanden wurde. Hier ermöglicht sie Weiterleitung, richtet die Standard-Virtual-MTA-Gruppe ein und fügt den X-Job-Header hinzu (was von SparkPost Signals als campaign_id berichtet wird).
Die Rewrite-Liste ordnet eingespritzte Nachrichten zu, um eine spezifische MAIL FROM-Domain (auch bekannt als Bounce-Domain oder Return-Path:) zu verwenden.
# # 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>
Dann richten wir unsere TLS-Konfiguration und SMTP-Benutzername/Passwort gemäß der aktuellen Empfehlungen ein.
# # 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>
Wir können überprüfen, dass das (unsichere, veraltete) TLS v1.0 nicht akzeptiert wird, indem wir mein bevorzugtes SMTP-Testtool verwenden, swaks.
swaks --server pmta.signalsdemo.trymsys.net --port 587 \ --to test@trymsys.net \ --from any@sparkpost.com \ --tls \ --tls-protocol tlsv1
Wir sehen:
*** TLS startup failed (connect(): error:00000000:lib(0):func(0):reason(0)) *** STARTTLS attempted but failed
Ebenso für –tls-protocol tlsv1_1.
Lassen Sie uns auch DKIM-Signierung auf unseren ausgehenden Nachrichten anwenden, da es eine gute Praxis ist (ich folgte diesen Anweisungen zur Einrichtung des Schlüssels).
# # DKIM # domain-key mypmta, pmta.signalsdemo.trymsys.net, /etc/pmta/mypmta.pmta.signalsdemo.trymsys.net.pem
Wir verwenden Port 587 für eingespritzte Nachrichten, die über das öffentliche Internet von einem anderen Host kommen. Wir müssen verhindern, dass schlechte Akteure diesen Dienst entdecken und missbrauchen, deshalb wenden wir Benutzernamen/Passwort-Authentifizierung und optional TLS an, ähnlich wie bei den SparkPost SMTP-Injection-Endpunkten.
Wir möchten in der Lage sein, Nachrichten von Quellen zu senden, die ordnungsgemäß authentifiziert sind, an beliebige Ziele. Wir möchten auch einen separaten Listener auf Port 25 für FBL und Remote-Bounce-Antworten, die keine Authentifizierung erfordern.
# 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
In den folgenden <source> Deklarationen verwenden wir Benutzernamen/Passwort-Authentifizierung und optional TLS, um uns gegen schädliche Nachrichten-Injektion zu verteidigen. Wir setzen auch Ratenbegrenzungen für Verbindungen, die fehlerhafte Passwortversuche machen.
Ihre Konfiguration könnte anders sein; zum Beispiel, wenn Sie ein privates Netzwerk zwischen Injector und PowerMTA haben, brauchen Sie keine Passwort-Authentifizierung.
# 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>
Die <source {auth}> Deklaration (siehe hier. v5.0) gilt, nachdem die Authentifizierung bestanden wurde. Hier ermöglicht sie Weiterleitung, richtet die Standard-Virtual-MTA-Gruppe ein und fügt den X-Job-Header hinzu (was von SparkPost Signals als campaign_id berichtet wird).
Die Rewrite-Liste ordnet eingespritzte Nachrichten zu, um eine spezifische MAIL FROM-Domain (auch bekannt als Bounce-Domain oder Return-Path:) zu verwenden.
# # 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>
Dann richten wir unsere TLS-Konfiguration und SMTP-Benutzername/Passwort gemäß der aktuellen Empfehlungen ein.
# # 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>
Wir können überprüfen, dass das (unsichere, veraltete) TLS v1.0 nicht akzeptiert wird, indem wir mein bevorzugtes SMTP-Testtool verwenden, swaks.
swaks --server pmta.signalsdemo.trymsys.net --port 587 \ --to test@trymsys.net \ --from any@sparkpost.com \ --tls \ --tls-protocol tlsv1
Wir sehen:
*** TLS startup failed (connect(): error:00000000:lib(0):func(0):reason(0)) *** STARTTLS attempted but failed
Ebenso für –tls-protocol tlsv1_1.
Lassen Sie uns auch DKIM-Signierung auf unseren ausgehenden Nachrichten anwenden, da es eine gute Praxis ist (ich folgte diesen Anweisungen zur Einrichtung des Schlüssels).
# # DKIM # domain-key mypmta, pmta.signalsdemo.trymsys.net, /etc/pmta/mypmta.pmta.signalsdemo.trymsys.net.pem
Wir verwenden Port 587 für eingespritzte Nachrichten, die über das öffentliche Internet von einem anderen Host kommen. Wir müssen verhindern, dass schlechte Akteure diesen Dienst entdecken und missbrauchen, deshalb wenden wir Benutzernamen/Passwort-Authentifizierung und optional TLS an, ähnlich wie bei den SparkPost SMTP-Injection-Endpunkten.
Wir möchten in der Lage sein, Nachrichten von Quellen zu senden, die ordnungsgemäß authentifiziert sind, an beliebige Ziele. Wir möchten auch einen separaten Listener auf Port 25 für FBL und Remote-Bounce-Antworten, die keine Authentifizierung erfordern.
# 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
In den folgenden <source> Deklarationen verwenden wir Benutzernamen/Passwort-Authentifizierung und optional TLS, um uns gegen schädliche Nachrichten-Injektion zu verteidigen. Wir setzen auch Ratenbegrenzungen für Verbindungen, die fehlerhafte Passwortversuche machen.
Ihre Konfiguration könnte anders sein; zum Beispiel, wenn Sie ein privates Netzwerk zwischen Injector und PowerMTA haben, brauchen Sie keine Passwort-Authentifizierung.
# 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>
Die <source {auth}> Deklaration (siehe hier. v5.0) gilt, nachdem die Authentifizierung bestanden wurde. Hier ermöglicht sie Weiterleitung, richtet die Standard-Virtual-MTA-Gruppe ein und fügt den X-Job-Header hinzu (was von SparkPost Signals als campaign_id berichtet wird).
Die Rewrite-Liste ordnet eingespritzte Nachrichten zu, um eine spezifische MAIL FROM-Domain (auch bekannt als Bounce-Domain oder Return-Path:) zu verwenden.
# # 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>
Dann richten wir unsere TLS-Konfiguration und SMTP-Benutzername/Passwort gemäß der aktuellen Empfehlungen ein.
# # 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>
Wir können überprüfen, dass das (unsichere, veraltete) TLS v1.0 nicht akzeptiert wird, indem wir mein bevorzugtes SMTP-Testtool verwenden, swaks.
swaks --server pmta.signalsdemo.trymsys.net --port 587 \ --to test@trymsys.net \ --from any@sparkpost.com \ --tls \ --tls-protocol tlsv1
Wir sehen:
*** TLS startup failed (connect(): error:00000000:lib(0):func(0):reason(0)) *** STARTTLS attempted but failed
Ebenso für –tls-protocol tlsv1_1.
Lassen Sie uns auch DKIM-Signierung auf unseren ausgehenden Nachrichten anwenden, da es eine gute Praxis ist (ich folgte diesen Anweisungen zur Einrichtung des Schlüssels).
# # DKIM # domain-key mypmta, pmta.signalsdemo.trymsys.net, /etc/pmta/mypmta.pmta.signalsdemo.trymsys.net.pem
VirtualMTA Einrichtung und Benennung
PowerMTA VirtualMTAs (und VirtualMTA-Pools) sind leistungsstarke Funktionen zur Verwaltung von Nachrichtenströmen, und die PowerMTA/SparkPost Signals-Berichterstattungsfunktionen funktionieren am besten mit diesen aktiven.
# # 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>
Die virtual-mta-pool-Einstellung wird in SparkPost als „IP-Pool“ gemeldet und steht als SparkPost Signals-Berichtsfacet zur Verfügung (das Dropdown-Menü unter den Diagrammen).

Der Zusammenfassungsbericht zeigt auch den IP-Pool als „Group By“-Berichtsfacet.

Wie weiter oben in diesem Artikel erwähnt, ermöglicht das Einrichten von mindestens einer smtp-source-host-Adresse auch, dass SparkPost die sendende IP-Adresse korrekt identifizieren kann, sodass sie bei Injektions- und Lieferereignissen sowie im Zusammenfassungsbericht angezeigt wird:

Das ist alles, was Sie benötigen, 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.
PowerMTA VirtualMTAs (und VirtualMTA-Pools) sind leistungsstarke Funktionen zur Verwaltung von Nachrichtenströmen, und die PowerMTA/SparkPost Signals-Berichterstattungsfunktionen funktionieren am besten mit diesen aktiven.
# # 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>
Die virtual-mta-pool-Einstellung wird in SparkPost als „IP-Pool“ gemeldet und steht als SparkPost Signals-Berichtsfacet zur Verfügung (das Dropdown-Menü unter den Diagrammen).

Der Zusammenfassungsbericht zeigt auch den IP-Pool als „Group By“-Berichtsfacet.

Wie weiter oben in diesem Artikel erwähnt, ermöglicht das Einrichten von mindestens einer smtp-source-host-Adresse auch, dass SparkPost die sendende IP-Adresse korrekt identifizieren kann, sodass sie bei Injektions- und Lieferereignissen sowie im Zusammenfassungsbericht angezeigt wird:

Das ist alles, was Sie benötigen, 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.
PowerMTA VirtualMTAs (und VirtualMTA-Pools) sind leistungsstarke Funktionen zur Verwaltung von Nachrichtenströmen, und die PowerMTA/SparkPost Signals-Berichterstattungsfunktionen funktionieren am besten mit diesen aktiven.
# # 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>
Die virtual-mta-pool-Einstellung wird in SparkPost als „IP-Pool“ gemeldet und steht als SparkPost Signals-Berichtsfacet zur Verfügung (das Dropdown-Menü unter den Diagrammen).

Der Zusammenfassungsbericht zeigt auch den IP-Pool als „Group By“-Berichtsfacet.

Wie weiter oben in diesem Artikel erwähnt, ermöglicht das Einrichten von mindestens einer smtp-source-host-Adresse auch, dass SparkPost die sendende IP-Adresse korrekt identifizieren kann, sodass sie bei Injektions- und Lieferereignissen sowie im Zusammenfassungsbericht angezeigt wird:

Das ist alles, was Sie benötigen, 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 Zeichenfolge für die Verwendung als PowerMTA X-Job-Name sicher ist, hier ist eine einfache Python-Funktion, um unsichere Zeichen in einen Unterstrich „_“ zu konvertieren
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)
Dies verwendet Python-Reguläre Ausdrücke in einer spezifischen Weise. Es deklariert die Menge der nicht erlaubten Zeichen mit dem „Mengenkomplement“-Operator ^ anstatt alle erlaubten Zeichen aufzulisten. Das bedeutet, dass wir (und sichern) Zeichen jenseits des üblichen 7-Bit-Sets erfassen können. Das kann mit diesem Testfragment gezeigt werden:
s='' for i in range(32, 256): s += chr(i) print(pmtaSafeJobID(s))
Was gibt
!#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^abcdefghijklmnopqrstuvwxyz{|}~_________________________________________________________
Man kann sehen, dass <SPACE>, Anführungszeichen „“ und Rückwärtsapostroph ` sowie alle Zeichen jenseits von ~ in Unterstriche umgewandelt werden.
Um sicherzustellen, dass jede Zeichenfolge für die Verwendung als PowerMTA X-Job-Name sicher ist, hier ist eine einfache Python-Funktion, um unsichere Zeichen in einen Unterstrich „_“ zu konvertieren
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)
Dies verwendet Python-Reguläre Ausdrücke in einer spezifischen Weise. Es deklariert die Menge der nicht erlaubten Zeichen mit dem „Mengenkomplement“-Operator ^ anstatt alle erlaubten Zeichen aufzulisten. Das bedeutet, dass wir (und sichern) Zeichen jenseits des üblichen 7-Bit-Sets erfassen können. Das kann mit diesem Testfragment gezeigt werden:
s='' for i in range(32, 256): s += chr(i) print(pmtaSafeJobID(s))
Was gibt
!#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^abcdefghijklmnopqrstuvwxyz{|}~_________________________________________________________
Man kann sehen, dass <SPACE>, Anführungszeichen „“ und Rückwärtsapostroph ` sowie alle Zeichen jenseits von ~ in Unterstriche umgewandelt werden.
Um sicherzustellen, dass jede Zeichenfolge für die Verwendung als PowerMTA X-Job-Name sicher ist, hier ist eine einfache Python-Funktion, um unsichere Zeichen in einen Unterstrich „_“ zu konvertieren
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)
Dies verwendet Python-Reguläre Ausdrücke in einer spezifischen Weise. Es deklariert die Menge der nicht erlaubten Zeichen mit dem „Mengenkomplement“-Operator ^ anstatt alle erlaubten Zeichen aufzulisten. Das bedeutet, dass wir (und sichern) Zeichen jenseits des üblichen 7-Bit-Sets erfassen können. Das kann mit diesem Testfragment gezeigt werden:
s='' for i in range(32, 256): s += chr(i) print(pmtaSafeJobID(s))
Was gibt
!#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^abcdefghijklmnopqrstuvwxyz{|}~_________________________________________________________
Man kann sehen, dass <SPACE>, Anführungszeichen „“ und Rückwärtsapostroph ` sowie alle Zeichen jenseits von ~ in Unterstriche umgewandelt werden.



