S/MIME Deel 3: Plug and Play voor On-Premises Veilige E-mail
Bird
1 dec 2019
1 min read

Belangrijkste punten
S/MIME-integratie voor lokale MTA's: leer hoe u ondertekende en versleutelde e-mailstromen kunt injecteren in PowerMTA, Momentum of SparkPost SMTP, terwijl u bestaande DKIM- en nalevingsinstellingen behoudt.
Hybride beveiligingsmodel: combineer S/MIME-encryptie + DKIM-ondertekening om zowel de echtheid van het bericht als de privacy van de inhoud in gereguleerde omgevingen te garanderen.
Implementatiestroom: configureer omgevingsvariabelen (SMTP_HOST, inloggegevens, sleutels), voer de --sign --encrypt --send_smtp workflow uit en valideer afleverrapporten.
Prestatie-inzicht: tests tonen aan dat de snelheid vrijwel identiek is voor SMTP versus API-injectie (~60 ms per bericht, 200–280 ms voor grotere bestanden).
Beveiligingsrichtlijnen: sla privésleutels en API-wachtwoorden op in beperkte bestanden (chmod 0700), gebruik STARTTLS en geauthenticeerde SMTP-sessies.
Toepassingsgevallen: ondernemingen die verouderde mailsystemen moderniseren, kunnen end-to-end encryptie uitbreiden zonder bestaande infrastructuur op te geven.
Q&A Hoogtepunten
Waarom S/MIME aanpassen voor on-prem servers in plaats van cloud API's?
Veel gereguleerde industrieën (bank- en gezondheidszorgsectoren) moeten e-mail ter plaatse bewaren. Deze aanpak behoudt de controle over de berichtstroom en voegt moderne cryptografische bescherming toe.
Hoe werkt SMTP-injectie met PowerMTA of Momentum?
U injecteert volledig gevormde S/MIME-berichten naar de lokale luisteraar (poort 25 of privé-VLAN). Deze MTA's behandelen vervolgens DKIM-signering en levering zoals gebruikelijk.
Is S/MIME compatibel met DKIM?
Ja — DKIM ondertekent het bericht na S/MIME-encryptie, zodat authenticatie- en integriteitscontroles intact blijven.
Hoe bescherm ik mijn SMTP-credentials en -sleutels?
Exporteer omgevingsvariabelen alleen in vergrendelde scripts en gebruik bestandsrechten om de toegang tot uzelf te beperken (
chmod 0700 my_envs.sh).Wat moet ik monitoren na de setup?
Afleveringslatentie (API vs SMTP), TLS-handshake succespercentage, DKIM/S-MIME validatieresultaten en foutlogboeken voor "relaying denied" of ontbrekende authenticatie.
Wie profiteert het meest van deze configuratie?
Organisaties die zelf-hosted mailgateways gebruiken en die encryptie van compliance-niveau vereisen, maar toch plug-and-play tools willen zonder het herschrijven van mailpijplijnen.
In deel 1 hadden we een snelle tour van S/MIME, waarbij we keken naar het ondertekenen en versleutelen van onze berichtstromen over een reeks e-mailcliënten. Voor organisaties die S/MIME-versleuteling implementeren, wordt het begrijpen van hoe je ontvanger publieke sleutels efficiënt kunt verzamelen cruciaal voor schaalbare, veilige e-mailoperaties. Deel 2 leidde ons door een eenvoudig commandoregelhulpmiddel om e-mails te ondertekenen en versleutelen, en deze vervolgens via SparkPost te verzenden.
In dit deel kijken we hoe het hulpmiddel kan worden aangepast om e-mailstromen in on-premises platforms zoals Port25 PowerMTA en Momentum te injecteren.
OK – laten we beginnen!
In deel 1 hadden we een snelle tour van S/MIME, waarbij we keken naar het ondertekenen en versleutelen van onze berichtstromen over een reeks e-mailcliënten. Voor organisaties die S/MIME-versleuteling implementeren, wordt het begrijpen van hoe je ontvanger publieke sleutels efficiënt kunt verzamelen cruciaal voor schaalbare, veilige e-mailoperaties. Deel 2 leidde ons door een eenvoudig commandoregelhulpmiddel om e-mails te ondertekenen en versleutelen, en deze vervolgens via SparkPost te verzenden.
In dit deel kijken we hoe het hulpmiddel kan worden aangepast om e-mailstromen in on-premises platforms zoals Port25 PowerMTA en Momentum te injecteren.
OK – laten we beginnen!
In deel 1 hadden we een snelle tour van S/MIME, waarbij we keken naar het ondertekenen en versleutelen van onze berichtstromen over een reeks e-mailcliënten. Voor organisaties die S/MIME-versleuteling implementeren, wordt het begrijpen van hoe je ontvanger publieke sleutels efficiënt kunt verzamelen cruciaal voor schaalbare, veilige e-mailoperaties. Deel 2 leidde ons door een eenvoudig commandoregelhulpmiddel om e-mails te ondertekenen en versleutelen, en deze vervolgens via SparkPost te verzenden.
In dit deel kijken we hoe het hulpmiddel kan worden aangepast om e-mailstromen in on-premises platforms zoals Port25 PowerMTA en Momentum te injecteren.
OK – laten we beginnen!
1. Aan de Slag
Het installeren van de tool en het verkrijgen van uw sleutels, enzovoort, is precies hetzelfde als voorheen. Wanneer u een on-premises e-mailsysteem zoals PowerMTA of Momentum gebruikt, bent u al verantwoordelijk voor het instellen van verzenddomeinen, DKIM-sleutels, enzovoort. Organisaties die on-premises systemen draaien, moeten ook vaak uitdagingen van het e-mailarchiveringssysteem aanpakken voor naleving van regelgeving en eisen voor gegevensbewaring. Wat we nu moeten doen, is een manier bieden om de volledig gevormde S/MIME-berichten in uw servers te injecteren.
Het installeren van de tool en het verkrijgen van uw sleutels, enzovoort, is precies hetzelfde als voorheen. Wanneer u een on-premises e-mailsysteem zoals PowerMTA of Momentum gebruikt, bent u al verantwoordelijk voor het instellen van verzenddomeinen, DKIM-sleutels, enzovoort. Organisaties die on-premises systemen draaien, moeten ook vaak uitdagingen van het e-mailarchiveringssysteem aanpakken voor naleving van regelgeving en eisen voor gegevensbewaring. Wat we nu moeten doen, is een manier bieden om de volledig gevormde S/MIME-berichten in uw servers te injecteren.
Het installeren van de tool en het verkrijgen van uw sleutels, enzovoort, is precies hetzelfde als voorheen. Wanneer u een on-premises e-mailsysteem zoals PowerMTA of Momentum gebruikt, bent u al verantwoordelijk voor het instellen van verzenddomeinen, DKIM-sleutels, enzovoort. Organisaties die on-premises systemen draaien, moeten ook vaak uitdagingen van het e-mailarchiveringssysteem aanpakken voor naleving van regelgeving en eisen voor gegevensbewaring. Wat we nu moeten doen, is een manier bieden om de volledig gevormde S/MIME-berichten in uw servers te injecteren.
2. SMTP-injectie naar Port25 PowerMTA
PowerMTA ondersteunt verschillende middelen voor het injecteren van berichten, waaronder een "ophalen"-directory, SMTP en een API. SMTP is de methode die hier wordt gebruikt.
Om de eenvoudigste mogelijke installatie te illustreren, installeren we de S/MIME-tools op dezelfde server als PowerMTA. We injecteren berichten naar de listener, die standaard open staat op TCP-poort 25 en alleen lokaal verkeer accepteert.
export SMTP_HOST=localhost
(Als je die stap vergeet, zie je: "Omgevingsvariabele SMTP_HOST niet ingesteld - stoppen" wanneer je probeert te draaien.)
We hebben de privé-sleutel van de afzender (steve@thetucks.com.pem) en de publieke sleutel van de ontvanger (steve.tuck@sparkpost.com.crt) al aanwezig. De eerste paar regels van het berichtenbestand zijn:
To: SteveT <steve.tuck@sparkpost.com> From: Steve <steve@thetucks.com> Subject: This is a message created using HEML MIME-Version: 1.0 Content-Type: text/html; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 7bit
We versturen het bericht met:
./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp
We zien:
Opened SMTP connection (plain) Host: localhost Port: 25 User: "" Password: "" Sending: tests/fancy-HTML-to-smt.eml From: Steve <steve@thetucks.com> To: SteveT <steve.tuck@sparkpost.com> OK - in 0.028 seconds
Het bericht komt snel aan in de inbox en wordt in Mac Mail weergegeven als ondertekend en versleuteld.

Bonusfunctie: DKIM met PowerMTA
DKIM is vrij eenvoudig te configureren en werkt gelukkig samen met S/MIME. De stappen zijn:
Gebruik de PowerMTA DKIM Wizard site om een privé-sleutel van de verzenddomein te maken (in mijn geval, mypmta.thetucks.com.pem) en de inhoud van het publieke DNS TXT-record.
Stel het DNS TXT-record in met een gekozen selector. Bijvoorbeeld, ik gebruikte selector pmta201811. Geldige selectortekens worden hier gedefinieerd.
Plaats het mypmta.thetucks.com.pem bestand op de server in de directory /etc/pmta .
Voeg de volgende toe aan mijn /etc/pmta/config en herstart de pmta-service. (Hier zijn deze richtlijnen op globale schaal geschreven; in een productiesysteem kunt u er de voorkeur aan geven om ze onder een virtueel-mta toe te voegen.)
host-name thetucks.com domain-key pmta201811,*,/etc/pmta/mypmta.thetucks.com.pem <domain *> dkim-sign yes </domain>
Het DNS-record wordt correct gecontroleerd via MX Toolbox, en DKIM is nu actief.

PowerMTA ondersteunt verschillende middelen voor het injecteren van berichten, waaronder een "ophalen"-directory, SMTP en een API. SMTP is de methode die hier wordt gebruikt.
Om de eenvoudigste mogelijke installatie te illustreren, installeren we de S/MIME-tools op dezelfde server als PowerMTA. We injecteren berichten naar de listener, die standaard open staat op TCP-poort 25 en alleen lokaal verkeer accepteert.
export SMTP_HOST=localhost
(Als je die stap vergeet, zie je: "Omgevingsvariabele SMTP_HOST niet ingesteld - stoppen" wanneer je probeert te draaien.)
We hebben de privé-sleutel van de afzender (steve@thetucks.com.pem) en de publieke sleutel van de ontvanger (steve.tuck@sparkpost.com.crt) al aanwezig. De eerste paar regels van het berichtenbestand zijn:
To: SteveT <steve.tuck@sparkpost.com> From: Steve <steve@thetucks.com> Subject: This is a message created using HEML MIME-Version: 1.0 Content-Type: text/html; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 7bit
We versturen het bericht met:
./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp
We zien:
Opened SMTP connection (plain) Host: localhost Port: 25 User: "" Password: "" Sending: tests/fancy-HTML-to-smt.eml From: Steve <steve@thetucks.com> To: SteveT <steve.tuck@sparkpost.com> OK - in 0.028 seconds
Het bericht komt snel aan in de inbox en wordt in Mac Mail weergegeven als ondertekend en versleuteld.

Bonusfunctie: DKIM met PowerMTA
DKIM is vrij eenvoudig te configureren en werkt gelukkig samen met S/MIME. De stappen zijn:
Gebruik de PowerMTA DKIM Wizard site om een privé-sleutel van de verzenddomein te maken (in mijn geval, mypmta.thetucks.com.pem) en de inhoud van het publieke DNS TXT-record.
Stel het DNS TXT-record in met een gekozen selector. Bijvoorbeeld, ik gebruikte selector pmta201811. Geldige selectortekens worden hier gedefinieerd.
Plaats het mypmta.thetucks.com.pem bestand op de server in de directory /etc/pmta .
Voeg de volgende toe aan mijn /etc/pmta/config en herstart de pmta-service. (Hier zijn deze richtlijnen op globale schaal geschreven; in een productiesysteem kunt u er de voorkeur aan geven om ze onder een virtueel-mta toe te voegen.)
host-name thetucks.com domain-key pmta201811,*,/etc/pmta/mypmta.thetucks.com.pem <domain *> dkim-sign yes </domain>
Het DNS-record wordt correct gecontroleerd via MX Toolbox, en DKIM is nu actief.

PowerMTA ondersteunt verschillende middelen voor het injecteren van berichten, waaronder een "ophalen"-directory, SMTP en een API. SMTP is de methode die hier wordt gebruikt.
Om de eenvoudigste mogelijke installatie te illustreren, installeren we de S/MIME-tools op dezelfde server als PowerMTA. We injecteren berichten naar de listener, die standaard open staat op TCP-poort 25 en alleen lokaal verkeer accepteert.
export SMTP_HOST=localhost
(Als je die stap vergeet, zie je: "Omgevingsvariabele SMTP_HOST niet ingesteld - stoppen" wanneer je probeert te draaien.)
We hebben de privé-sleutel van de afzender (steve@thetucks.com.pem) en de publieke sleutel van de ontvanger (steve.tuck@sparkpost.com.crt) al aanwezig. De eerste paar regels van het berichtenbestand zijn:
To: SteveT <steve.tuck@sparkpost.com> From: Steve <steve@thetucks.com> Subject: This is a message created using HEML MIME-Version: 1.0 Content-Type: text/html; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 7bit
We versturen het bericht met:
./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp
We zien:
Opened SMTP connection (plain) Host: localhost Port: 25 User: "" Password: "" Sending: tests/fancy-HTML-to-smt.eml From: Steve <steve@thetucks.com> To: SteveT <steve.tuck@sparkpost.com> OK - in 0.028 seconds
Het bericht komt snel aan in de inbox en wordt in Mac Mail weergegeven als ondertekend en versleuteld.

Bonusfunctie: DKIM met PowerMTA
DKIM is vrij eenvoudig te configureren en werkt gelukkig samen met S/MIME. De stappen zijn:
Gebruik de PowerMTA DKIM Wizard site om een privé-sleutel van de verzenddomein te maken (in mijn geval, mypmta.thetucks.com.pem) en de inhoud van het publieke DNS TXT-record.
Stel het DNS TXT-record in met een gekozen selector. Bijvoorbeeld, ik gebruikte selector pmta201811. Geldige selectortekens worden hier gedefinieerd.
Plaats het mypmta.thetucks.com.pem bestand op de server in de directory /etc/pmta .
Voeg de volgende toe aan mijn /etc/pmta/config en herstart de pmta-service. (Hier zijn deze richtlijnen op globale schaal geschreven; in een productiesysteem kunt u er de voorkeur aan geven om ze onder een virtueel-mta toe te voegen.)
host-name thetucks.com domain-key pmta201811,*,/etc/pmta/mypmta.thetucks.com.pem <domain *> dkim-sign yes </domain>
Het DNS-record wordt correct gecontroleerd via MX Toolbox, en DKIM is nu actief.

3. SMTP-injectie richting Momentum
Momentum ondersteunt verschillende manieren van berichtinjectie, waaronder API en SMTP. SMTP is de methode die hier wordt gebruikt, naar een host die al Momentum uitvoert. We laten de configuratie ongewijzigd, omdat het al de mogelijkheid heeft om inkomende injecties van andere goedgekeurde hosts te accepteren.
Dit is een kleinere versie van een productie-installatie, waar "generation" knooppunten en MTA knooppunten gescheiden zijn, maar nauw verbonden zijn via een privé VLAN en load-balancers, die interne SMTP-injectieverkeer dragen.

De S/MIME-tools zijn geïnstalleerd zoals voorheen, en we zullen berichten injecteren naar het adres van de SMTP-host (MTA):
export SMTP_HOST=xx.xx.xx.xx # set your own MTA / VIP address here
Zoals voorheen, hebben we de private sleutel van de afzender (steve@thetucks.com.pem) en de publieke sleutel van de ontvanger (steve.tuck@sparkpost.com.crt) al aanwezig op het "generation" knooppunt. De eerste paar regels van het berichtbestand komen overeen met deze adressen.
We verzenden het bericht van het "generation" knooppunt 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, gaat S/MIME ook vrolijk samen met Momentum’s DKIM signing.
Momentum ondersteunt verschillende manieren van berichtinjectie, waaronder API en SMTP. SMTP is de methode die hier wordt gebruikt, naar een host die al Momentum uitvoert. We laten de configuratie ongewijzigd, omdat het al de mogelijkheid heeft om inkomende injecties van andere goedgekeurde hosts te accepteren.
Dit is een kleinere versie van een productie-installatie, waar "generation" knooppunten en MTA knooppunten gescheiden zijn, maar nauw verbonden zijn via een privé VLAN en load-balancers, die interne SMTP-injectieverkeer dragen.

De S/MIME-tools zijn geïnstalleerd zoals voorheen, en we zullen berichten injecteren naar het adres van de SMTP-host (MTA):
export SMTP_HOST=xx.xx.xx.xx # set your own MTA / VIP address here
Zoals voorheen, hebben we de private sleutel van de afzender (steve@thetucks.com.pem) en de publieke sleutel van de ontvanger (steve.tuck@sparkpost.com.crt) al aanwezig op het "generation" knooppunt. De eerste paar regels van het berichtbestand komen overeen met deze adressen.
We verzenden het bericht van het "generation" knooppunt 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, gaat S/MIME ook vrolijk samen met Momentum’s DKIM signing.
Momentum ondersteunt verschillende manieren van berichtinjectie, waaronder API en SMTP. SMTP is de methode die hier wordt gebruikt, naar een host die al Momentum uitvoert. We laten de configuratie ongewijzigd, omdat het al de mogelijkheid heeft om inkomende injecties van andere goedgekeurde hosts te accepteren.
Dit is een kleinere versie van een productie-installatie, waar "generation" knooppunten en MTA knooppunten gescheiden zijn, maar nauw verbonden zijn via een privé VLAN en load-balancers, die interne SMTP-injectieverkeer dragen.

De S/MIME-tools zijn geïnstalleerd zoals voorheen, en we zullen berichten injecteren naar het adres van de SMTP-host (MTA):
export SMTP_HOST=xx.xx.xx.xx # set your own MTA / VIP address here
Zoals voorheen, hebben we de private sleutel van de afzender (steve@thetucks.com.pem) en de publieke sleutel van de ontvanger (steve.tuck@sparkpost.com.crt) al aanwezig op het "generation" knooppunt. De eerste paar regels van het berichtbestand komen overeen met deze adressen.
We verzenden het bericht van het "generation" knooppunt 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, gaat S/MIME ook vrolijk samen met Momentum’s DKIM signing.
4. SMTP-injectie richting SparkPost
In deel 2 gebruikten we de SparkPost transmissions REST API om berichten te injecteren. 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=<<YOUR_API_KEY_HERE>
Als je gebruikmaakt van de SparkPost EU-gehoste dienst, stel dan SMTP_HOST in als smtp.eu.sparkpostmail.com.
(Zie hier voor meer opties – bijvoorbeeld kunt u op poort 2525 injecteren in plaats van 587.)
De onderstaande output toont aan 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:
Opened SMTP connection (STARTTLS) Host: smtp.sparkpostmail.com Port: 587 User: "SMTP_Injection" Password: "****************************************" Sending: tests/fancy-HTML-to-smt.eml From: Steve <steve@thetucks.com> To: SteveT <steve.tuck@sparkpost.com> OK - in 0.057 seconds
Het wachtwoord wordt afgedrukt met vervangende ***-tekens, zodat de privacy van je sleutel niet in gevaar komt als iemand over je schouder meekijkt.
Beveiligen van Uw Inloggegevens
Let op dat omgevingsvariabelen kunnen worden ingesteld in een shell-scriptbestand of iets dergelijks, om opnieuw typen te besparen. Als je dat doet, zorg ervoor dat je wachtwoorden/API-sleutels worden beschermd door de toegang tot dat bestand alleen voor jezelf te beperken. Bijvoorbeeld, als je inloggegevensinstellingsbestand my_envs.sh heet, voer dan het volgende uit:
chmod 0700 my_envs.sh
SMTP-gerelateerde Waarschuwingen die u Zou Kunnen Zien
SMTP-injectie van SparkPost is vrij streng, zoals je zou verwachten van een openbare dienst. Als je het SMTP-poortnummer niet hebt ingesteld, krijg je een waarschuwing:
{ 'bob.lumreeker@gmail.com': (550, b'5.7.1 relaying denied') }
Als je de SMTP-gebruikersnaam niet hebt ingesteld of het wachtwoord niet hebt ingesteld, zie je:
(530, b'5.7.1 Authorization required. Ref. https://developers.sparkpost.com/api/index#header-smtp-relay-endpoints', 'steve@thetucks.com')
Deze foutmeldingen worden simpelweg gerapporteerd zoals-ze-zijn vanuit de Python SMTP-bibliotheek, vandaar de opmaak.
In deel 2 gebruikten we de SparkPost transmissions REST API om berichten te injecteren. 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=<<YOUR_API_KEY_HERE>
Als je gebruikmaakt van de SparkPost EU-gehoste dienst, stel dan SMTP_HOST in als smtp.eu.sparkpostmail.com.
(Zie hier voor meer opties – bijvoorbeeld kunt u op poort 2525 injecteren in plaats van 587.)
De onderstaande output toont aan 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:
Opened SMTP connection (STARTTLS) Host: smtp.sparkpostmail.com Port: 587 User: "SMTP_Injection" Password: "****************************************" Sending: tests/fancy-HTML-to-smt.eml From: Steve <steve@thetucks.com> To: SteveT <steve.tuck@sparkpost.com> OK - in 0.057 seconds
Het wachtwoord wordt afgedrukt met vervangende ***-tekens, zodat de privacy van je sleutel niet in gevaar komt als iemand over je schouder meekijkt.
Beveiligen van Uw Inloggegevens
Let op dat omgevingsvariabelen kunnen worden ingesteld in een shell-scriptbestand of iets dergelijks, om opnieuw typen te besparen. Als je dat doet, zorg ervoor dat je wachtwoorden/API-sleutels worden beschermd door de toegang tot dat bestand alleen voor jezelf te beperken. Bijvoorbeeld, als je inloggegevensinstellingsbestand my_envs.sh heet, voer dan het volgende uit:
chmod 0700 my_envs.sh
SMTP-gerelateerde Waarschuwingen die u Zou Kunnen Zien
SMTP-injectie van SparkPost is vrij streng, zoals je zou verwachten van een openbare dienst. Als je het SMTP-poortnummer niet hebt ingesteld, krijg je een waarschuwing:
{ 'bob.lumreeker@gmail.com': (550, b'5.7.1 relaying denied') }
Als je de SMTP-gebruikersnaam niet hebt ingesteld of het wachtwoord niet hebt ingesteld, zie je:
(530, b'5.7.1 Authorization required. Ref. https://developers.sparkpost.com/api/index#header-smtp-relay-endpoints', 'steve@thetucks.com')
Deze foutmeldingen worden simpelweg gerapporteerd zoals-ze-zijn vanuit de Python SMTP-bibliotheek, vandaar de opmaak.
In deel 2 gebruikten we de SparkPost transmissions REST API om berichten te injecteren. 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=<<YOUR_API_KEY_HERE>
Als je gebruikmaakt van de SparkPost EU-gehoste dienst, stel dan SMTP_HOST in als smtp.eu.sparkpostmail.com.
(Zie hier voor meer opties – bijvoorbeeld kunt u op poort 2525 injecteren in plaats van 587.)
De onderstaande output toont aan 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:
Opened SMTP connection (STARTTLS) Host: smtp.sparkpostmail.com Port: 587 User: "SMTP_Injection" Password: "****************************************" Sending: tests/fancy-HTML-to-smt.eml From: Steve <steve@thetucks.com> To: SteveT <steve.tuck@sparkpost.com> OK - in 0.057 seconds
Het wachtwoord wordt afgedrukt met vervangende ***-tekens, zodat de privacy van je sleutel niet in gevaar komt als iemand over je schouder meekijkt.
Beveiligen van Uw Inloggegevens
Let op dat omgevingsvariabelen kunnen worden ingesteld in een shell-scriptbestand of iets dergelijks, om opnieuw typen te besparen. Als je dat doet, zorg ervoor dat je wachtwoorden/API-sleutels worden beschermd door de toegang tot dat bestand alleen voor jezelf te beperken. Bijvoorbeeld, als je inloggegevensinstellingsbestand my_envs.sh heet, voer dan het volgende uit:
chmod 0700 my_envs.sh
SMTP-gerelateerde Waarschuwingen die u Zou Kunnen Zien
SMTP-injectie van SparkPost is vrij streng, zoals je zou verwachten van een openbare dienst. Als je het SMTP-poortnummer niet hebt ingesteld, krijg je een waarschuwing:
{ 'bob.lumreeker@gmail.com': (550, b'5.7.1 relaying denied') }
Als je de SMTP-gebruikersnaam niet hebt ingesteld of het wachtwoord niet hebt ingesteld, zie je:
(530, b'5.7.1 Authorization required. Ref. https://developers.sparkpost.com/api/index#header-smtp-relay-endpoints', 'steve@thetucks.com')
Deze foutmeldingen worden simpelweg gerapporteerd zoals-ze-zijn vanuit de Python SMTP-bibliotheek, vandaar de opmaak.
Welke is sneller – SMTP of API?
Prestatievergelijking
Hier is een snelle uiteenzetting van de prestatietests:
Meting | SMTP | API | Aantekeningen |
|---|---|---|---|
Klein bestand (~19 KB) | ~60 ms | ~60 ms | Bijna identieke prestaties |
Groot bestand (~577 KB) | ~280 ms | ~200 ms | API iets sneller met grotere payloads |
Eerlijk gezegd is S/MIME niet waarschijnlijk een gebruiksscenario met hoog volume, maar met hetzelfde hulpmiddel met twee uitvoeropties vroegen we ons af wie de race zou winnen!
Het hier gebruikte "Avocado" e-mail testbestand 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 60 milliseconden per bericht, wat vrij snel is. In dit geval injecteerden we vanaf een middelgrote EC2-instance in dezelfde hostingregio als SparkPost.com, wat een goede manier is om netwerk-round-trip tijden laag te houden.
Bij herhaling met een groter testbestand (577KB) nam de API ongeveer 200 milliseconden in beslag, terwijl SMTP 280 milliseconden per bericht duurde – nog steeds indrukwekkend voor een bestandsgrootte die 30x groter is. Natuurlijk kunnen de resultaten 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 starten volgens onze overdrachtsbest practices aanbevelingen – bijvoorbeeld vanuit een supervisortaak.
Prestatievergelijking
Hier is een snelle uiteenzetting van de prestatietests:
Meting | SMTP | API | Aantekeningen |
|---|---|---|---|
Klein bestand (~19 KB) | ~60 ms | ~60 ms | Bijna identieke prestaties |
Groot bestand (~577 KB) | ~280 ms | ~200 ms | API iets sneller met grotere payloads |
Eerlijk gezegd is S/MIME niet waarschijnlijk een gebruiksscenario met hoog volume, maar met hetzelfde hulpmiddel met twee uitvoeropties vroegen we ons af wie de race zou winnen!
Het hier gebruikte "Avocado" e-mail testbestand 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 60 milliseconden per bericht, wat vrij snel is. In dit geval injecteerden we vanaf een middelgrote EC2-instance in dezelfde hostingregio als SparkPost.com, wat een goede manier is om netwerk-round-trip tijden laag te houden.
Bij herhaling met een groter testbestand (577KB) nam de API ongeveer 200 milliseconden in beslag, terwijl SMTP 280 milliseconden per bericht duurde – nog steeds indrukwekkend voor een bestandsgrootte die 30x groter is. Natuurlijk kunnen de resultaten 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 starten volgens onze overdrachtsbest practices aanbevelingen – bijvoorbeeld vanuit een supervisortaak.
Prestatievergelijking
Hier is een snelle uiteenzetting van de prestatietests:
Meting | SMTP | API | Aantekeningen |
|---|---|---|---|
Klein bestand (~19 KB) | ~60 ms | ~60 ms | Bijna identieke prestaties |
Groot bestand (~577 KB) | ~280 ms | ~200 ms | API iets sneller met grotere payloads |
Eerlijk gezegd is S/MIME niet waarschijnlijk een gebruiksscenario met hoog volume, maar met hetzelfde hulpmiddel met twee uitvoeropties vroegen we ons af wie de race zou winnen!
Het hier gebruikte "Avocado" e-mail testbestand 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 60 milliseconden per bericht, wat vrij snel is. In dit geval injecteerden we vanaf een middelgrote EC2-instance in dezelfde hostingregio als SparkPost.com, wat een goede manier is om netwerk-round-trip tijden laag te houden.
Bij herhaling met een groter testbestand (577KB) nam de API ongeveer 200 milliseconden in beslag, terwijl SMTP 280 milliseconden per bericht duurde – nog steeds indrukwekkend voor een bestandsgrootte die 30x groter is. Natuurlijk kunnen de resultaten 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 starten volgens onze overdrachtsbest practices aanbevelingen – bijvoorbeeld vanuit een supervisortaak.



