Bereitstellung von Signals für On-Premises: PowerMTA-Integration

Bird

30.08.2019

Email

1 min read

Bereitstellung von Signals für On-Premises: PowerMTA-Integration

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 ... successfully und 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) oder pmta.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-space lö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 PowerMTA X-Job Header-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“).

Show original option highlighted


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.

HTML code highlighted


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“).

Show original option highlighted


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.

HTML code highlighted


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“).

Show original option highlighted


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.

HTML code highlighted


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.

Health score dashboard


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.

Signals integration screen

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.

Health score dashboard


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.

Signals integration screen

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.

Health score dashboard


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.

Signals integration screen

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).

Health score dashboard


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

Summary report dashboard


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:

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

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).

Health score dashboard


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

Summary report dashboard


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:

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

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).

Health score dashboard


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

Summary report dashboard


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:

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

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.

Andere Neuigkeiten

Mehr lesen aus dieser Kategorie

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

Die komplette AI-native Plattform, die mit Ihrem Business skalierbar ist.

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

Die komplette AI-native Plattform, die mit Ihrem Business skalierbar ist.