
In dit deel zullen we bekijken hoe de tool kan worden aangepast om mailstromen in te voegen in on-premises platforms zoals PowerMTA en Momentum.
Business in a box.
Ontdek onze oplossingen.
Praat met ons verkoopteam
In deel 1 hadden we een snelle rondleiding van S/MIME, waarbij we keken naar het ondertekenen en versleutelen van onze berichtenstromen in verschillende mailclients. Deel 2 nam ons mee door een eenvoudige command-line tool om e-mails te ondertekenen en versleutelen, en deze vervolgens via SparkPost te verzenden.
In dit deel kijken we hoe de tool kan worden aangepast om mailstromen te injecteren in on-premises platformen zoals Port25 PowerMTA en Momentum.
OK – laten we beginnen!
1. Aan de slag
Het installeren van het hulpmiddel, het verkrijgen van uw sleutels, enz. is precies hetzelfde als voorheen. Wanneer je een on-premises e-mailsysteem zoals PowerMTA of Momentum gebruikt, ben je al verantwoordelijk voor het instellen van verzenddomeinen, DKIM-sleutels, enz. Wat we nu moeten doen, is een manier bieden om de volledig gevormde S/MIME-berichten in je servers te injecteren.
2. SMTP-injectie naar Port25 PowerMTA
3. SMTP Injectie Naar Momentum
Momentum ondersteunt verschillende manieren van berichteninvoer, waaronder API en SMTP. SMTP is de methode die hier wordt gebruikt, gericht op een host die al Momentum draait. We laten de configuratie ervan ongewijzigd, omdat deze al de mogelijkheid heeft om inkomende injecties van andere goedgekeurde hosts te accepteren.
Dit is een kleinere versie van een productie-opstelling, waar "generation" nodes en MTA-nodes gescheiden zijn, maar nauw verbonden via een privé-VLAN en load-balancers, die interne SMTP-injectietrafiek vervoeren.

De S/MIME-tools zijn zoals eerder geïnstalleerd, en we zullen berichten injecteren naar het adres van de SMTP-host (MTA):
export SMTP_HOST=xx.xx.xx.xx # stel hier je eigen MTA / VIP-adres in
Zoals eerder hebben we de privé-sleutel van de afzender (steve@thetucks.com.pem) en de openbare sleutel van de ontvanger (steve.tuck@sparkpost.com.crt) al aanwezig op de "generation" node. De eerste regels van het berichtbestand komen overeen met deze adressen.
We verzenden het bericht vanaf de "generation" node met exact hetzelfde commando als voorheen, en het bericht verschijnt in de inbox.
./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp
Zoals je zou verwachten, bestaat S/MIME ook vreedzaam naast Momentum’s DKIM signing.
4. SMTP-injectie richting SparkPost
In deel 2 gebruikten we de SparkPost-verzendingen REST API om berichten te verzenden. Natuurlijk is het ook mogelijk om berichten in SparkPost te injecteren met behulp van SMTP. We stellen de omgevingsvariabelen als volgt in:
export SMTP_PASSWORD=<<UW API-SLEUTEL HIER>> export SMTP_HOST=smtp.sparkpostmail.com export SMTP_USER=SMTP_Injection export SMTP_PORT=587
Als u de SparkPost EU-gehoste service gebruikt, stel SMTP_HOST dan in als smtp.eu.sparkpostmail.com.
(Zie hier voor meer opties – bijvoorbeeld, u kunt injecteren op poort 2525 in plaats van 587.)
De onderstaande uitvoer toont dat STARTTLS wordt gebruikt, samen met de gebruikersnaam en het wachtwoord.
./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp
Je zult zien:
Opende SMTP-verbinding (STARTTLS) naar smtp.sparkpostmail.com, poort 587, gebruiker="SMTP_Injection", wachtwoord="****************************************" Verzenden tests/fancy-HTML-to-smt.eml Van: Steve <steve@thetucks.com> Naar: SteveT <steve.tuck@sparkpost.com> OK - in 0,057 seconden
Het wachtwoord wordt afgedrukt met vervangende *** tekens, zodat u de privacy van uw sleutel niet in gevaar brengt als iemand over uw schouder meekijkt.
Het beveiligen van uw inloggegevens
Merk op dat omgevingsvariabelen kunnen worden opgezet in een shell-scriptbestand of vergelijkbaar, om opnieuw typen te besparen. Als u dat doet, let dan goed op uw wachtwoorden/API-sleutels door de toegang tot dat bestand alleen voor uzelf te beperken. Als uw opstartbestand voor inloggegevens bijvoorbeeld my_envs.sh heet, voer dan uit:
chmod 0700 my_envs.sh
SMTP-gerelateerde waarschuwingen die u mogelijk ziet
De SMTP-injectie van SparkPost is vrij streng, zoals u zou verwachten van een openbare dienst. Als u het SMTP-poortnummer niet heeft ingesteld, ziet u een waarschuwing:
{'bob.lumreeker@gmail.com': (550, b'5.7.1 relaying denied')}
Als u de SMTP-gebruikersnaam niet heeft ingesteld of het wachtwoord niet heeft ingesteld, ziet u:
(530, b'5.7.1 Authorization required. Ref. https://developers.sparkpost.com/api/index#header-smtp-relay-endpoints', 'steve@thetucks.com')
Deze foutmeldingen worden eenvoudigweg als-is gerapporteerd vanuit de Python SMTP-bibliotheek, vandaar de opmaak.
Welke is sneller – SMTP of API?
Eerlijk gezegd is het onwaarschijnlijk dat S/MIME een veelgebruikte use-case wordt, maar het hebben van hetzelfde hulpmiddel met twee uitvoeropties vroeg er gewoon om dat we een race zouden houden!
Het “Avocado” e-mail testbestand dat hier wordt gebruikt is ongeveer 19KB. Het herhalen van de tests 10 keer via een bash-loop toonde aan dat de gemiddelde tijden vergelijkbaar waren voor SMTP en API, rond de 60 milliseconden per bericht, wat behoorlijk snel is. In dit geval hebben we geïnjecteerd vanaf een medium EC2-instantie in dezelfde hostingregio als SparkPost.com, wat een goede manier is om de netwerk round-trip-tijden laag te houden.
Bij het herhalen hiervan met een groter testbestand (577KB) duurde de API ongeveer 200 milliseconden, terwijl SMTP 280 milliseconden per bericht kostte – nog steeds indrukwekkend voor een bestandsgrootte die 30x groter is. Natuurlijk kan uw ervaring variëren, afhankelijk van locatie, internetcongestie enzovoort, maar prestaties zullen waarschijnlijk geen probleem zijn.
Als u echt maximale prestaties nodig heeft, zou een goed startpunt zijn om een bepaald aantal gelijktijdige injectieprocessen/sessies te lanceren volgens onze transmissie best practices aanbevelingen – bijvoorbeeld vanuit een supervisortaak.
Samenvattend ...
We hebben gezien hoe de op de SparkPost API gebaseerde tool die in Deel 2 wordt gebruikt, is bijgewerkt om ondersteuning te bieden voor SMTP-injectie om on-premises MTA's zoals Port25 PowerMTA en Momentum te ondersteunen in verschillende configuraties, evenals met SparkPost.
Dat is het voor nu! Veel plezier met verzenden.