Implementatie van Signal voor On-Premises: PowerMTA-integratie

Bird

30 aug 2019

E-mail

1 min read

Implementatie van Signal voor On-Premises: PowerMTA-integratie

Belangrijkste punten

    • Doel: Deze gids legt uit hoe PowerMTA 5.0+ kan worden geïntegreerd met SparkPost Signals om gebeurtenis- en betrokkenheidsgegevens (bounces, opens, clicks, spamklachten) van on-premises MTAs direct naar de SparkPost analysegelaag te streamen.

    • Kernconfiguratie:

      • Voeg enable-signals true toe en definieer uw SparkPost ingest endpoint (https://api.sparkpost.com/api/v1/ingest/events of het EU-equivalent).

      • Gebruik een geldige API-sleutel met “Incoming Events: Write” toestemming.

      • Specificeer customer-id, en stel optioneel aangepaste trackingsdomeinen in voor verbeterde leverbaarheid.

    • Trackinginstelling: PowerMTA’s Engagement Tracking injecteert automatisch open- en klikpixels in HTML-e-mails. U kunt tracking per link uitschakelen met het data-msys-clicktrack="0" attribuut.

    • Selectieve rapportage: Signals kan globaal worden ingeschakeld of beperkt tot bepaalde VirtualMTAs, pools, of afzenderdomeinen, waardoor fijne controle over de gegevens mogelijk is.

    • Testen & verificatie: Gebruik het Signals Integration-dashboard en PowerMTA logs om gebeurtenisinvoer te bevestigen en Health Scores, bounces, en verlofdheidsstatistieken in real-time te volgen.

    • Leverbaarheidsafstemming:

      • Gebruik betekenisvolle VirtualMTA en Jobnamen — deze worden direct gemapt naar IP Pools en Campagne-ID's in SparkPost-rapporten.

      • Configureer DKIM-ondertekening, TLS-afdwinging, en correcte relay regels om ongeoorloofde injecties te voorkomen.

    • Geavanceerde instellingen: Het artikel bevat ook kant-en-klare fragmenten voor FBL & out-of-band bounceverwerking, geauthentiseerde SMTP-injectie (poort 587), en Python-code om X-Job headers te saneren voor compatibiliteit.

Q&A Hoogtepunten

  • Wat doet de Signals-integratie eigenlijk?

    Het uploadt automatisch PowerMTA’s berichtengebeurtenissen (injectie, levering, bounce, betrokkenheid) naar jouw SparkPost-account, zodat je toegang hebt tot dashboards zoals Health Score, Vertragingrapporten en Spam Trap Monitoring.

  • Waarom Signal integreren met een on-prem MTA?

    Veel bedrijven gebruiken zelf-gehoste mailinfrastructuur om nalevingsredenen, maar willen nog steeds de analysemogelijkheden en monitoring capaciteiten van SparkPost gebruiken. Signals overbrugt die kloof zonder migratie van de mailbezorging naar de cloud.

  • Hoe kan ik verifiëren dat events naar SparkPost stromen?

    Controleer de PowerMTA-logboeken voor Signals: Transferred ... successfully en bevestig evenementenitems onder Signals → Events Search in SparkPost.

  • Kan ik mijn eigen trackingdomein gebruiken?

    Ja — configureer een CNAME zoals track.mycompany.com → pmta.spgo.io (VS) of pmta.eu.spgo.io (EU), registreer en verifieer het vervolgens in SparkPost voor merk- en reputatieconsistentie.

  • Hoe zit het met gegevensprivacy of schijfgebruik?

    De min-free-space richtlijn verwijdert automatisch oude JSON-gebeurtenisbestanden wanneer de schijfruimte laag is, waardoor de lokale ophoping van telemetriegegevens wordt voorkomen.

  • Wat is de "bonus feature" aan het einde?

    Een Python regex hulpmiddel (pmtaSafeJobID) dat ervoor zorgt dat campagne-/jobnamen alleen tekens gebruiken die geldig zijn in het PowerMTA X-Job headerformaat, waarbij onveilige tekens worden vervangen door underscores.

Laten we ons verdiepen in de details van het instellen van PowerMTA voor SparkPost Signals.

Laten we ingaan op de details van het opzetten van PowerMTA voor SparkPost Signals. Je hebt het volgende nodig:

  • Een host om de nieuwste versie van PowerMTA op te draaien - ofwel nieuw, of op een bestaande machine

  • Een SparkPost-account met API-sleuteltoestemming voor "Incoming Events: Write" zoals hier beschreven

We zullen PowerMTA instellen om gebeurtenissen naar je SparkPost-account te streamen, waarna je het volgende kunt gebruiken:

Installeer eerst (of upgrade) naar PowerMTA 5.0 r4 of later, volgens de gebruikelijke v5.0 installatierichtlijnen die vrij eenvoudig zijn. Dan werken we de volgende stappen door:

  • Configureer PowerMTA-connector naar SparkPost Signals

  • Stel Engagement Tracking in met een aangepaste trackingdomein

  • Selecteer welke PowerMTA-verkeerstreams aan Signals moeten worden gerapporteerd

  • Testen of je gebeurtenissen Signals bereiken

  • Bekijk hoe je zinvolle namen gebruikt die goed zichtbaar zijn in rapportages.

We behandelen ook de andere specifieke PowerPMTA-configuratieaspecten die in onze Signals-demo worden gebruikt:

  • FBL-gebeurtenissen (Spam Klachten) en externe (out-of-band) bounces

  • Injectieconfiguratie, inclusief DKIM

  • FBL en OOB-configuratie

  • VirtualMTA-instelling en naamgeving (en hoe dit in je SparkPost Signals-rapporten verschijnt)

Ten slotte is er een "bonusfunctie" met code om ervoor te zorgen dat je campagnenamen compatibel zijn met PowerMTA X-Job  benoemingsconventies.

Configureer PowerMTA-connector

De configuratie van de Signals wordt beschreven in de 5.0 Gebruikershandleiding sectie 10.1. Hier beginnen we met "Use Case #2", die Signals inschakelt voor al het verkeer vanaf deze PowerMTA-host en SparkPost betrokkenheidstracering inschakelt.

# # 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

Hier is wat elk attribuut doet:

api-key

Dit is uniek voor uw SparkPost-account, het is de waarde die u eerder van SparkPost hebt gekregen.

upload-url

Dit moet overeenkomen met het adres van uw SparkPost-api-service, of het nu US of EU is. Voor meer info zie hier. De gebruikelijke waarden zijn:

SparkPost (US): https://api.sparkpost.com/api/v1/ingest/events

SparkPost EU:    https://api.eu.sparkpost.com/api/v1/ingest/events

log-verbose

Deze richtlijn is optioneel en wanneer ingeschakeld, geeft het iets meer info in het pmta.log bestand, wat nuttig kan zijn tijdens de installatie om te bevestigen dat alles correct werkt. Elke minuut, zelfs wanneer er geen verkeer is, zult u het volgende zien:

2019-07-26 11:47:57 Signals: Ontdekt 0 bestanden

Met verkeer ziet u iets als:

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

Dit geeft PowerMTA de schijf ruimtedrempel aan waarop het de oudste SparkPost JSON-bestandsgebeurtenissen moet beginnen verwijderen om ruimte te maken voor nieuwe bestanden wanneer er onvoldoende schijfruimte is.

enable-signals

Dit geeft aan dat PowerMTA naar Signals moet uploaden, in dit geval wereldwijd voor al het verkeer (meer info hier, voor v5.0). U kunt selectiever zijn over welke verkeersstromen u wilt uploaden als u dat wilt.

U kunt ook specifiek PowerMTA-verkeer markeren om te worden gerapporteerd als behorend tot een SparkPost subaccount – dit is een andere manier om een bepaalde verkeersstroom van een andere te onderscheiden.

engagement-tracking, customer-id
PowerMTA’s Engagement Tracking-oplossing standaard naar het trackingdomein voor de SparkPost US-gehoste service. U specificeert uw SparkPost numerieke klant-ID; hier zijn instructies om het te vinden.

tracking-domain

Voor SparkPost EU-accounts, voeg de volgende regel toe:

tracking-domain pmta.eu.spgo.io # dit is het eindpunt voor SparkPost EU

Aangepast Trackingdomein

Als u liever uw eigen trackingdomein gebruikt (dit is beter vanuit leverbaarheidsperspectief), doe dan het volgende:

  • Maak een trackingdomein bij uw DNS-provider door een CNAME-record te maken. Dit zal meestal een subdomein van uw topleveldomein zijn, bijv. 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

U kunt ook HTTPS-trackingdomeinen gebruiken, hoewel dit meer werk vereist (zie de SparkPost-configuratiestappen voor HTTPS-trackingdomeinen).

  • Registreer een trackingdomein in uw SparkPost-account, en verifieer het. Wacht een paar minuten voordat u dit probeert, om uw DNS-wijzigingen door het internet te laten verspreiden, afhankelijk van uw DNS-provider.

  • Configureer PowerMTA om dat domein te gebruiken in plaats van het standaarddomein, met:

tracking-domain uwdomein.com # Plaats hier uw eigen domein

U kunt controleren dat uw bezorgde e-mails "open pixels" hebben toegevoegd en de links omwikkeld zijn, door de inwendige werking van de e-mail te bekijken (in Gmail, gebruik het menu rechtsboven en kies "Origineel weergeven").

Show original option highlighted


U zult de open pixels aan het begin en einde van de HTML in de e-mail opmerken. Elke HTML-link wordt ook gewijzigd om REF  te laten wijzen naar het trackingdomein.

HTML code highlighted


Dat is alles wat u nodig hebt om SparkPost Signals werkend te krijgen met PowerMTA’s ingebouwde Engagement Tracking.

Voorkomen dat specifieke links in uw HTML-e-mail worden gevolgd

U kunt voorkomen dat PowerMTA specifieke links volgt, door de aangepaste eigenschap data-msys-clicktrack  op "0"  te zetten:

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

PowerMTA zal de link niet omwikkelen. Het zal ook dat attribuut verwijderen voordat het bericht naar uw ontvanger wordt verzonden.

Selecteer welke PowerMTA-verkeersstromen moeten worden gerapporteerd aan Signals

Je kunt Signaleren selecteren om actief te zijn:

  • Globaal (dit is wat we gebruikten in het bovenstaande voorbeeld)

  • Voor sommige Virtuele MTAs en niet voor anderen

  • Voor sommige Virtuele MTA-pools en niet voor anderen

  • Voor specifieke "Sender" of "From" adressen die door PowerMTA worden doorgestuurd, in combinatie met de selectie voor Virtuele MTA / Virtuele MTA-pool

Deze configuratie is zeer krachtig en wordt geïllustreerd door een reeks voorbeeldgebruikcases (v5.0) in de Handleiding.

Je kunt Signaleren selecteren om actief te zijn:

  • Globaal (dit is wat we gebruikten in het bovenstaande voorbeeld)

  • Voor sommige Virtuele MTAs en niet voor anderen

  • Voor sommige Virtuele MTA-pools en niet voor anderen

  • Voor specifieke "Sender" of "From" adressen die door PowerMTA worden doorgestuurd, in combinatie met de selectie voor Virtuele MTA / Virtuele MTA-pool

Deze configuratie is zeer krachtig en wordt geïllustreerd door een reeks voorbeeldgebruikcases (v5.0) in de Handleiding.

Je kunt Signaleren selecteren om actief te zijn:

  • Globaal (dit is wat we gebruikten in het bovenstaande voorbeeld)

  • Voor sommige Virtuele MTAs en niet voor anderen

  • Voor sommige Virtuele MTA-pools en niet voor anderen

  • Voor specifieke "Sender" of "From" adressen die door PowerMTA worden doorgestuurd, in combinatie met de selectie voor Virtuele MTA / Virtuele MTA-pool

Deze configuratie is zeer krachtig en wordt geïllustreerd door een reeks voorbeeldgebruikcases (v5.0) in de Handleiding.

Testen of je evenementen Signals bereiken

Hier is een weergave van SparkPost Signals, verbonden met PowerMTA. Je kunt zien dat de gezondheidsscore varieert.

Health score dashboard


De Campagnenamen zijn beschikbaar als rapportage-facetten, samen met Subaccount, IP Pool, Mailbox Provider, en Sending Domain.

Naast het bekijken van de PowerMTA logs, kun je controleren of de evenementengegevens SparkPost bereiken door naar het Signals Integration scherm te kijken.

Signals integration screen

In je SparkPost Evenementen Zoeken scherm, zou je evenementen binnen een paar minuten moeten zien verschijnen. Deze bevatten Injectie en Bezorging evenementen, evenals Bounce, en mogelijk Out-of-Band Bounce en Spam Klacht evenementen, als je PowerMTA al hebt geconfigureerd om dat voor je af te handelen.
Als je Betrokkenheid Volgen hebt ingeschakeld, zie je ook open, initial_open, en click evenementen.

Gebruik betekenisvolle namen die goed zichtbaar zijn in rapportages

Het opzetten van de PowerMTA VirtualMTA Pool-namen en Job-namen om betekenisvol en leesbaar te zijn voor mensen is de moeite waard. Deze verschijnen direct in je SparkPost Signals-facetten en in het Samenvattingsrapport.

Zoals eerder vermeld, hoef je deze pools niet in je SparkPost-account aan te maken. SparkPost haalt ze op uit je PowerMTA-configuratie.

Hier is hoe PowerMTA-configuratietermen vertalen naar SparkPost-termen.

PowerMTA termSparkPost Rapporten / Signals termOntvanger Domein

(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 kan echter virtualMTAs, virtual MTA Pools, of Sender-or-From domeinen taggen met een subaccount ID voor SparkPost rapportage doeleinden.

Subaccount ID (number)
FBL (event)
Spam Complaint (event)
Remote Bounce (event)
Out-of-Band bounce (event)

Het instellen van minstens één smtp-source-host-adres stelt SparkPost ook in staat om het verzendende IP-adres correct te identificeren, zodat het verschijnt bij Injectie- en Bezorgingsevenementen, evenals in de Samenvattingsrapportweergave.

Job-namen worden ingesteld in PowerMTA via een header in het geïnjecteerde bericht. Naast het mogelijk maken van individuele jobcontrole (pauzeren/hervatten etc.) wat op zichzelf nuttig is, geeft PowerMTA de namen door aan SparkPost Signals-rapportage als “campagne ID”. Zie Gebruikershandleiding v5.0 sectie 12.8 “Tracking a campaign in PowerMTA with a JobID”.

Er zijn een paar dingen waar je op moet letten met betrekking tot jobbenaming. Terwijl SparkPost (met JSON-formaat en JSON escaping) karakters zoals <RUIMTE>  in campagnenamen toestaat, zijn mailheaders restrictiever. Geldige karakters toegestaan in de X-Job-header zijn:

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

Met andere woorden, niet-toegestane karakters zijn <RUIMTE>, dubbele aanhalingstekens “  en backtick `. Als je gewend bent om te werken met X-Job-namen, zal dit niet verrassend zijn, en zullen je campagne ID-namen “gewoon werken” op SparkPost-rapportage. Als je, net als ik, eerst SparkPost hebt geleerd, wil je misschien een tool om ervoor te zorgen dat je X-Job-waarden veilig zijn; zie de bonusfeature aan het einde van dit artikel.

FBL gebeurtenissen (Spam Klachten) en externe (out-of-band) bounces

PowerMTA kan FBL-gebeurtenissen ontvangen en verwerken (bekend in SparkPost als Spamklacht-gebeurtenissen) en externe bounces (bekend in SparkPost als out-of-band bounces, omdat het antwoord enige tijd later terugkomt, in plaats van tijdens de SMTP-sessie).

Er zijn artikelen in het Port25 Support Forum over hoe je de Bounce Processor en de FBL Processor instelt. Als je al een PowerMTA-gebruiker bent, heb je deze waarschijnlijk al.

Hier is de configuratie die ik voor een demo heb gemaakt, gebaseerd op deze artikelen en gericht op het hosten van PowerMTA in Amazon EC2.

Als je bekend bent met PowerMTA-configuratie in dit gebied, kun je dit gedeelte overslaan tot aan de volgende horizontale lijn.

Injectieconfiguratie

We zullen poort 587 gebruiken voor geïnjecteerde berichten, die over het openbare internet zullen komen van een andere host. We moeten voorkomen dat kwaadwillenden deze dienst ontdekken en misbruiken, dus passen we gebruikersnaam/wachtwoordauthenticatie en optionele TLS toe, vergelijkbaar met SparkPost SMTP-injectie-eindpunten.

We willen berichten kunnen verzenden van bronnen die correct worden geauthenticeerd naar elke bestemming. We willen ook een aparte luisteraar op poort 25 voor FBL en externe bounce-reacties die geen authenticatie vereisen.

# 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 de volgende <source>  declaraties gebruiken we gebruikersnaam/wachtwoordauthenticatie en optionele TLS om ons te verdedigen tegen de injectie van kwaadwillende berichten. We stellen ook snelheidslimieten in voor verbindingen die mislukte wachtwoordpogingen doen.

Je setup kan anders zijn; bijvoorbeeld, als je een privaat netwerk hebt tussen injector en PowerMTA, heb je geen wachtwoordauthenticatie nodig.

# 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>

De declaratie <source {auth}> (zie hier. v5.0) is van toepassing wanneer de authenticatie is geslaagd. Hier laat het verdere relaying toe, stelt het de standaard virtuele MTA-groep in voor gebruik, en voegt het de X-Job header toe (die door SparkPost Signals zal worden gerapporteerd als campaign_id).

De rewrite-list wijst geïnjecteerde berichten toe om een specifiek MAIL FROM-domein te gebruiken (ook bekend als bounce-domein of Return-Path:).

# # 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>

Dan stellen we onze TLS-configuratie en SMTP gebruikersnaam / wachtwoord in, volgens de huidige aanbevelingen.

# # 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>

We kunnen controleren dat de (onveilige, verouderde) TLS v1.0 niet wordt geaccepteerd met mijn favoriete SMTP-testtool, swaks.

swaks --server pmta.signalsdemo.trymsys.net --port 587 \
  --to test@trymsys.net \
  --from any@sparkpost.com \
  --tls \
  --tls-protocol tlsv1

We zien:

*** TLS startup failed (connect(): error:00000000:lib(0):func(0):reason(0))
*** STARTTLS attempted but failed

Evenzo voor –tls-protocol tlsv1_1.

Laten we ook DKIM-ondertekening toepassen op onze uitgaande berichten, aangezien het een goede gewoonte is (ik volgde deze instructies om de sleutel op te zetten).

# # DKIM #
domain-key mypmta, pmta.signalsdemo.trymsys.net, /etc/pmta/mypmta.pmta.signalsdemo.trymsys.net.pem

FBL en OOB configuratie

Nu .. eindelijk .. verklaren we welke specifieke domeinen openstaan voor externe bounce en FBL-antwoorden. We willen die nergens heen sturen (om backscatter-aanvallen te voorkomen), we verwerken die antwoorden alleen intern.

# # 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>

Je kunt zien dat ik twee bounce-domeinen heb opgezet, aangezien ik aan het experimenteren was met het wel/niet gebruiken van de mfrom herschrijvingsregel.

Het FBL-domein wordt meestal dan geregistreerd bij externe diensten zoals Microsoft SNDS; zie dit artikel voor meer informatie. Voor deze demo zullen de FBL's afkomstig zijn van de Bouncy Sink, dus registratie is niet nodig.

Testen van de SMTP-listener

Het is belangrijk om te testen dat uw SMTP-luisteraar autorisatie vereist voor alle algemene bestemmingen en dat alle berichten worden geweigerd die niet specifiek zijn geadresseerd aan de FBL- en remote-bounce-domeinen.

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

De reactie, zoals verwacht, toont aan dat relayen niet toegestaan wordt:

550 5.7.1 relayen geweigerd voor ontvanger in "RCPT TO:<test@strange.pmta.signalsdemo.trymsys.net>

(Einde van demo installatiebeschrijving).

VirtualMTA setup en naamgeving

PowerMTA VirtualMTAs (en VirtualMTA pools) zijn krachtige functies voor het beheren van berichtenstromen, en PowerMTA / SparkPost Signals rapportagefuncties werken het beste wanneer deze actief zijn.

# # 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>

De virtual-mta-pool instelling wordt gerapporteerd in SparkPost als "IP Pool", en is beschikbaar als een SparkPost Signals rapportagefacet (het vervolgkeuzemenu onder de grafieken).

Health score dashboard


Het Samenvattingsrapport toont ook IP Pool als een "Groeperen op" rapportagefacet.

Summary report dashboard


Zoals eerder in dit artikel vermeld, stelt het instellen van minstens één smtp-source-host adres SparkPost ook in staat om het verzendende IP-adres correct te identificeren, zodat het verschijnt bij Injectie- en Bezorgingsevenementen en op het Samenvattingsrapport:

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

Dat is alles wat je nodig hebt om een basisintegratie tussen PowerMTA en SparkPost Signals werkend te krijgen. Je vindt het volledige configuratiebestand voorbeeld hier.

Voordat je gaat, hier is de bonusfunctie die ik noemde.

Bonusfunctie: X-Job naam controleren/filteren

Om ervoor te zorgen dat elke tekenreeks veilig is voor gebruik als een PowerMTA X-Job-naam, hier is een eenvoudige Python-functie om onveilige tekens naar een underscore "_" te mappen.

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)

Dit gebruikt Python regular expressions op een specifieke manier. Het declareert de set van uitgesloten tekens met de "set complement" operator ^ in plaats van alle toegestane tekens op te sommen. Dat betekent dat we tekens buiten de gebruikelijke 7-bits set opvangen (en veilig maken). We kunnen dat laten zien met deze testfragment:

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

Wat oplevert

!#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^abcdefghijklmnopqrstuvwxyz{|}~_________________________________________________________

U kunt zien dat <SPACE>, dubbele aanhalingstekens ", en een accentteken `, evenals alle tekens voorbij ~ worden gemapt naar een underscore.

Andere nieuws

Lees meer uit deze categorie

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

Het complete AI-native platform dat met uw bedrijf meegroeit.

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

Het complete AI-native platform dat met uw bedrijf meegroeit.