S/MIME Teil 3: Plug and Play für lokale sichere E-Mail

Vogel

01.12.2019

E-Mail

1 min read

S/MIME Teil 3: Plug and Play für lokale sichere E-Mail

Wichtige Erkenntnisse

    • S/MIME-Integration für lokale MTAs: Erfahren Sie, wie Sie signierte und verschlüsselte E-Mail-Ströme in PowerMTA, Momentum oder SparkPost SMTP einfügen können, während bestehende DKIM- und Compliance-Setups erhalten bleiben.

    • Hybrides Sicherheitsmodell: Kombinieren Sie S/MIME-Verschlüsselung + DKIM-Signierung, um sowohl die Authentizität der Nachricht als auch die Vertraulichkeit der Inhalte in regulierten Umgebungen zu gewährleisten.

    • Bereitstellungsablauf: Konfigurieren Sie Umgebungsvariablen (SMTP_HOST, Anmeldeinformationen, Schlüssel), führen Sie den --sign --encrypt --send_smtp-Workflow aus und validieren Sie Zustellberichte.

    • Leistungsanalyse: Tests zeigen nahezu identische Geschwindigkeiten für SMTP- vs. API-Injektion (~60 ms pro Nachricht, 200–280 ms für größere Dateien).

    • Beste Sicherheitspraktiken: Speichern Sie private Schlüssel und API-Passwörter in eingeschränkten Dateien (chmod 0700), verwenden Sie STARTTLS und authentifizierte SMTP-Sitzungen.

    • Anwendungsfälle: Unternehmen, die alte Mailsysteme modernisieren, können die Verschlüsselung von Ende zu Ende erweitern, ohne die bestehende Infrastruktur aufzugeben.

Q&A Highlights

  • Warum S/MIME für On-Prem-Server anpassen statt Cloud-APIs?

    Viele regulierte Branchen (Bank- und Gesundheitssektoren) müssen E-Mails vor Ort aufbewahren. Dieser Ansatz behält die Kontrolle über den Nachrichtenfluss bei und fügt modernen kryptographischen Schutz hinzu.

  • Wie funktioniert SMTP-Injektion mit PowerMTA oder Momentum?

    Sie injizieren vollständig geformte S/MIME-Nachrichten an den lokalen Listener (Port 25 oder privates VLAN). Diese MTAs übernehmen dann wie gewohnt das DKIM-Signieren und die Zustellung.

  • Ist S/MIME kompatibel mit DKIM?

    Ja — DKIM signiert die Nachricht nach der S/MIME-Verschlüsselung, sodass Authentifizierungs- und Integritätsprüfungen intakt bleiben.

  • Wie schütze ich meine SMTP-Anmeldedaten und Schlüssel?

    Exportieren Sie Umgebungsvariablen nur in gesperrten Skripten und verwenden Sie Dateiberechtigungen, um den Zugriff auf sich selbst einzuschränken (chmod 0700 my_envs.sh).

  • Was sollte ich nach der Einrichtung überwachen?

    Zustellungsverzögerung (API vs SMTP), TLS-Handschlag-Erfolgsrate, DKIM/S-MIME-Validierungsergebnisse und Fehlprotokolle für „Relaying denied“ oder fehlende Authentifizierung.

  • Wer profitiert am meisten von dieser Konfiguration?

    Organisationen, die selbstgehostete Mail-Gateways betreiben und Verschlüsselung auf Compliance-Niveau benötigen, aber Plug-and-Play-Tools ohne Neuschreiben der Mail-Pipelines wünschen.

In Teil 1 hatten wir eine kurze Tour durch S/MIME, bei der wir uns die Signierung und Verschlüsselung unserer Nachrichtenströme über eine Reihe von E-Mail-Clients angesehen haben. Für Organisationen, die S/MIME-Verschlüsselung implementieren, ist das effiziente Sammeln von Empfänger-Öffentlichen Schlüsseln entscheidend für skalierbare sichere E-Mail-Operationen. Teil 2 führte uns durch ein einfaches Befehlszeilentool, um E-Mails zu signieren und zu verschlüsseln und sie dann über SparkPost zu senden.

In diesem Teil werden wir uns ansehen, wie das Tool angepasst werden kann, um Mailströme in lokale Plattformen wie Port25 PowerMTA und Momentum einzuspeisen.

OK – los geht's!

In Teil 1 hatten wir eine kurze Tour durch S/MIME, bei der wir uns die Signierung und Verschlüsselung unserer Nachrichtenströme über eine Reihe von E-Mail-Clients angesehen haben. Für Organisationen, die S/MIME-Verschlüsselung implementieren, ist das effiziente Sammeln von Empfänger-Öffentlichen Schlüsseln entscheidend für skalierbare sichere E-Mail-Operationen. Teil 2 führte uns durch ein einfaches Befehlszeilentool, um E-Mails zu signieren und zu verschlüsseln und sie dann über SparkPost zu senden.

In diesem Teil werden wir uns ansehen, wie das Tool angepasst werden kann, um Mailströme in lokale Plattformen wie Port25 PowerMTA und Momentum einzuspeisen.

OK – los geht's!

In Teil 1 hatten wir eine kurze Tour durch S/MIME, bei der wir uns die Signierung und Verschlüsselung unserer Nachrichtenströme über eine Reihe von E-Mail-Clients angesehen haben. Für Organisationen, die S/MIME-Verschlüsselung implementieren, ist das effiziente Sammeln von Empfänger-Öffentlichen Schlüsseln entscheidend für skalierbare sichere E-Mail-Operationen. Teil 2 führte uns durch ein einfaches Befehlszeilentool, um E-Mails zu signieren und zu verschlüsseln und sie dann über SparkPost zu senden.

In diesem Teil werden wir uns ansehen, wie das Tool angepasst werden kann, um Mailströme in lokale Plattformen wie Port25 PowerMTA und Momentum einzuspeisen.

OK – los geht's!

1. Erste Schritte

Die Installation des Tools, das Abrufen Ihrer Schlüssel usw. erfolgt genau wie zuvor. Wenn Sie ein lokales E-Mail-System wie PowerMTA oder Momentum verwenden, sind Sie bereits für das Einrichten von Sendedomänen, DKIM-Schlüsseln usw. verantwortlich. Organisationen, die lokale Systeme betreiben, müssen sich häufig auch mit Herausforderungen beim E-Mail-Archivierungssystem für die Einhaltung von Vorschriften und Anforderungen an die Datenaufbewahrung befassen. Was wir jetzt tun müssen, ist eine Möglichkeit bereitzustellen, die vollständig geformten S/MIME-Nachrichten in Ihre Server einzuspeisen.

Die Installation des Tools, das Abrufen Ihrer Schlüssel usw. erfolgt genau wie zuvor. Wenn Sie ein lokales E-Mail-System wie PowerMTA oder Momentum verwenden, sind Sie bereits für das Einrichten von Sendedomänen, DKIM-Schlüsseln usw. verantwortlich. Organisationen, die lokale Systeme betreiben, müssen sich häufig auch mit Herausforderungen beim E-Mail-Archivierungssystem für die Einhaltung von Vorschriften und Anforderungen an die Datenaufbewahrung befassen. Was wir jetzt tun müssen, ist eine Möglichkeit bereitzustellen, die vollständig geformten S/MIME-Nachrichten in Ihre Server einzuspeisen.

Die Installation des Tools, das Abrufen Ihrer Schlüssel usw. erfolgt genau wie zuvor. Wenn Sie ein lokales E-Mail-System wie PowerMTA oder Momentum verwenden, sind Sie bereits für das Einrichten von Sendedomänen, DKIM-Schlüsseln usw. verantwortlich. Organisationen, die lokale Systeme betreiben, müssen sich häufig auch mit Herausforderungen beim E-Mail-Archivierungssystem für die Einhaltung von Vorschriften und Anforderungen an die Datenaufbewahrung befassen. Was wir jetzt tun müssen, ist eine Möglichkeit bereitzustellen, die vollständig geformten S/MIME-Nachrichten in Ihre Server einzuspeisen.

2. SMTP-Injektion in Richtung Port25 PowerMTA

PowerMTA unterstützt verschiedene Möglichkeiten der Nachrichtenübermittlung, einschließlich eines Datei-„Pickup“-Verzeichnisses, SMTP und einer API. SMTP ist die hier verwendete Methode.

Um die einfachstmögliche Einrichtung zu veranschaulichen, installieren wir die S/MIME-Tools auf demselben Server wie PowerMTA. Wir übermitteln Nachrichten an den Listener, der standardmäßig auf TCP-Port 25 geöffnet ist und nur lokalen Datenverkehr akzeptiert.

export SMTP_HOST=localhost

(Wenn Sie diesen Schritt vergessen, sehen Sie: „Environment var SMTP_HOST not set – stopping“, wenn Sie versuchen auszuführen.)


Wir haben den privaten Schlüssel des Absenders (steve@thetucks.com.pem) und den öffentlichen Schlüssel des Empfängers (steve.tuck@sparkpost.com.crt) bereits vorhanden. Die ersten Zeilen der Nachrichtendatei lauten:

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


Wir senden die Nachricht mit:

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp


Wir sehen:

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


Die Nachricht kommt schnell im Posteingang an und wird in Mac Mail als signiert und verschlüsselt gemeldet.

Email from Avocado showing a marketing message with security features enabled, displayed in Mac Mail as signed and encrypted.


Bonusfunktion: DKIM mit PowerMTA

DKIM ist recht einfach zu konfigurieren und existiert glücklich mit S/MIME nebeneinander. Die Schritte sind:

  • Verwenden Sie die DKIM Wizard-Seite von PowerMTA, um den privaten Schlüssel der sendenden Domain (in meinem Fall mypmta.thetucks.com.pem) und den öffentlichen DNS-TXT-Record-Inhalt zu erstellen.

  • Richten Sie den DNS-TXT-Record mit einem ausgewählten Selector ein. Zum Beispiel habe ich den Selector pmta201811 verwendet. Gültige Selector-Zeichen sind hier definiert.

  • Legen Sie die Datei mypmta.thetucks.com.pem im Verzeichnis /etc/pmta auf dem Server ab.

  • Fügen Sie das Folgende zu meiner /etc/pmta/config hinzu und starten Sie den pmta-Dienst neu. (Hier sind diese Direktiven im globalen Bereich geschrieben; in einem Produktionssystem möchten Sie sie möglicherweise stattdessen unter einem virtuellen mta hinzufügen.)


host-name thetucks.com
domain-key pmta201811,*,/etc/pmta/mypmta.thetucks.com.pem
<domain *>
  dkim-sign yes
</domain>


Der DNS-Eintrag überprüft sich über MX Toolbox, und DKIM ist jetzt aktiv.

MX Toolbox interface showing successful DKIM record verification with all tests passing for email authentication security.

PowerMTA unterstützt verschiedene Möglichkeiten der Nachrichtenübermittlung, einschließlich eines Datei-„Pickup“-Verzeichnisses, SMTP und einer API. SMTP ist die hier verwendete Methode.

Um die einfachstmögliche Einrichtung zu veranschaulichen, installieren wir die S/MIME-Tools auf demselben Server wie PowerMTA. Wir übermitteln Nachrichten an den Listener, der standardmäßig auf TCP-Port 25 geöffnet ist und nur lokalen Datenverkehr akzeptiert.

export SMTP_HOST=localhost

(Wenn Sie diesen Schritt vergessen, sehen Sie: „Environment var SMTP_HOST not set – stopping“, wenn Sie versuchen auszuführen.)


Wir haben den privaten Schlüssel des Absenders (steve@thetucks.com.pem) und den öffentlichen Schlüssel des Empfängers (steve.tuck@sparkpost.com.crt) bereits vorhanden. Die ersten Zeilen der Nachrichtendatei lauten:

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


Wir senden die Nachricht mit:

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp


Wir sehen:

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


Die Nachricht kommt schnell im Posteingang an und wird in Mac Mail als signiert und verschlüsselt gemeldet.

Email from Avocado showing a marketing message with security features enabled, displayed in Mac Mail as signed and encrypted.


Bonusfunktion: DKIM mit PowerMTA

DKIM ist recht einfach zu konfigurieren und existiert glücklich mit S/MIME nebeneinander. Die Schritte sind:

  • Verwenden Sie die DKIM Wizard-Seite von PowerMTA, um den privaten Schlüssel der sendenden Domain (in meinem Fall mypmta.thetucks.com.pem) und den öffentlichen DNS-TXT-Record-Inhalt zu erstellen.

  • Richten Sie den DNS-TXT-Record mit einem ausgewählten Selector ein. Zum Beispiel habe ich den Selector pmta201811 verwendet. Gültige Selector-Zeichen sind hier definiert.

  • Legen Sie die Datei mypmta.thetucks.com.pem im Verzeichnis /etc/pmta auf dem Server ab.

  • Fügen Sie das Folgende zu meiner /etc/pmta/config hinzu und starten Sie den pmta-Dienst neu. (Hier sind diese Direktiven im globalen Bereich geschrieben; in einem Produktionssystem möchten Sie sie möglicherweise stattdessen unter einem virtuellen mta hinzufügen.)


host-name thetucks.com
domain-key pmta201811,*,/etc/pmta/mypmta.thetucks.com.pem
<domain *>
  dkim-sign yes
</domain>


Der DNS-Eintrag überprüft sich über MX Toolbox, und DKIM ist jetzt aktiv.

MX Toolbox interface showing successful DKIM record verification with all tests passing for email authentication security.

PowerMTA unterstützt verschiedene Möglichkeiten der Nachrichtenübermittlung, einschließlich eines Datei-„Pickup“-Verzeichnisses, SMTP und einer API. SMTP ist die hier verwendete Methode.

Um die einfachstmögliche Einrichtung zu veranschaulichen, installieren wir die S/MIME-Tools auf demselben Server wie PowerMTA. Wir übermitteln Nachrichten an den Listener, der standardmäßig auf TCP-Port 25 geöffnet ist und nur lokalen Datenverkehr akzeptiert.

export SMTP_HOST=localhost

(Wenn Sie diesen Schritt vergessen, sehen Sie: „Environment var SMTP_HOST not set – stopping“, wenn Sie versuchen auszuführen.)


Wir haben den privaten Schlüssel des Absenders (steve@thetucks.com.pem) und den öffentlichen Schlüssel des Empfängers (steve.tuck@sparkpost.com.crt) bereits vorhanden. Die ersten Zeilen der Nachrichtendatei lauten:

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


Wir senden die Nachricht mit:

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp


Wir sehen:

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


Die Nachricht kommt schnell im Posteingang an und wird in Mac Mail als signiert und verschlüsselt gemeldet.

Email from Avocado showing a marketing message with security features enabled, displayed in Mac Mail as signed and encrypted.


Bonusfunktion: DKIM mit PowerMTA

DKIM ist recht einfach zu konfigurieren und existiert glücklich mit S/MIME nebeneinander. Die Schritte sind:

  • Verwenden Sie die DKIM Wizard-Seite von PowerMTA, um den privaten Schlüssel der sendenden Domain (in meinem Fall mypmta.thetucks.com.pem) und den öffentlichen DNS-TXT-Record-Inhalt zu erstellen.

  • Richten Sie den DNS-TXT-Record mit einem ausgewählten Selector ein. Zum Beispiel habe ich den Selector pmta201811 verwendet. Gültige Selector-Zeichen sind hier definiert.

  • Legen Sie die Datei mypmta.thetucks.com.pem im Verzeichnis /etc/pmta auf dem Server ab.

  • Fügen Sie das Folgende zu meiner /etc/pmta/config hinzu und starten Sie den pmta-Dienst neu. (Hier sind diese Direktiven im globalen Bereich geschrieben; in einem Produktionssystem möchten Sie sie möglicherweise stattdessen unter einem virtuellen mta hinzufügen.)


host-name thetucks.com
domain-key pmta201811,*,/etc/pmta/mypmta.thetucks.com.pem
<domain *>
  dkim-sign yes
</domain>


Der DNS-Eintrag überprüft sich über MX Toolbox, und DKIM ist jetzt aktiv.

MX Toolbox interface showing successful DKIM record verification with all tests passing for email authentication security.

3. SMTP Injection in Richtung Momentum

Momentum unterstützt verschiedene Methoden der Nachrichteneinspeisung, einschließlich API und SMTP. SMTP ist die hier verwendete Methode, zu einem Host, der bereits Momentum ausführt. Wir belassen seine Konfiguration unverändert, da er bereits die Fähigkeit besitzt, eingehende Einspeisungen von anderen zugelassenen Hosts zu akzeptieren.

Dies ist eine kleinere Version eines Produktionssetups, bei dem "generation"-Knoten und MTA-Knoten getrennt, aber eng über ein privates VLAN und Lastverteiler verbunden sind, die internen SMTP-Einspeiseverkehr übertragen.


Diagram showing email flow from a generation server to on-premises MTA (Mail Transfer Agent) via SMTP protocol.


Die S/MIME-Tools sind wie zuvor installiert, und wir werden Nachrichten an die Adresse des SMTP-Hosts (MTA) einspeisen:

export SMTP_HOST=xx.xx.xx.xx # set your own MTA / VIP address here

Wie zuvor haben wir den privaten Schlüssel des Absenders (steve@thetucks.com.pem) und den öffentlichen Schlüssel des Empfängers (steve.tuck@sparkpost.com.crt) bereits auf dem "generation"-Knoten vorhanden. Die ersten Zeilen der Nachrichtendatei entsprechen diesen Adressen.

Wir senden die Nachricht vom "generation"-Knoten mit genau dem gleichen Befehl wie zuvor, und die Nachricht erscheint im Inbox.

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp

Wie Sie erwarten würden, koexistiert S/MIME auch problemlos mit Momentum's DKIM signing.

Momentum unterstützt verschiedene Methoden der Nachrichteneinspeisung, einschließlich API und SMTP. SMTP ist die hier verwendete Methode, zu einem Host, der bereits Momentum ausführt. Wir belassen seine Konfiguration unverändert, da er bereits die Fähigkeit besitzt, eingehende Einspeisungen von anderen zugelassenen Hosts zu akzeptieren.

Dies ist eine kleinere Version eines Produktionssetups, bei dem "generation"-Knoten und MTA-Knoten getrennt, aber eng über ein privates VLAN und Lastverteiler verbunden sind, die internen SMTP-Einspeiseverkehr übertragen.


Diagram showing email flow from a generation server to on-premises MTA (Mail Transfer Agent) via SMTP protocol.


Die S/MIME-Tools sind wie zuvor installiert, und wir werden Nachrichten an die Adresse des SMTP-Hosts (MTA) einspeisen:

export SMTP_HOST=xx.xx.xx.xx # set your own MTA / VIP address here

Wie zuvor haben wir den privaten Schlüssel des Absenders (steve@thetucks.com.pem) und den öffentlichen Schlüssel des Empfängers (steve.tuck@sparkpost.com.crt) bereits auf dem "generation"-Knoten vorhanden. Die ersten Zeilen der Nachrichtendatei entsprechen diesen Adressen.

Wir senden die Nachricht vom "generation"-Knoten mit genau dem gleichen Befehl wie zuvor, und die Nachricht erscheint im Inbox.

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp

Wie Sie erwarten würden, koexistiert S/MIME auch problemlos mit Momentum's DKIM signing.

Momentum unterstützt verschiedene Methoden der Nachrichteneinspeisung, einschließlich API und SMTP. SMTP ist die hier verwendete Methode, zu einem Host, der bereits Momentum ausführt. Wir belassen seine Konfiguration unverändert, da er bereits die Fähigkeit besitzt, eingehende Einspeisungen von anderen zugelassenen Hosts zu akzeptieren.

Dies ist eine kleinere Version eines Produktionssetups, bei dem "generation"-Knoten und MTA-Knoten getrennt, aber eng über ein privates VLAN und Lastverteiler verbunden sind, die internen SMTP-Einspeiseverkehr übertragen.


Diagram showing email flow from a generation server to on-premises MTA (Mail Transfer Agent) via SMTP protocol.


Die S/MIME-Tools sind wie zuvor installiert, und wir werden Nachrichten an die Adresse des SMTP-Hosts (MTA) einspeisen:

export SMTP_HOST=xx.xx.xx.xx # set your own MTA / VIP address here

Wie zuvor haben wir den privaten Schlüssel des Absenders (steve@thetucks.com.pem) und den öffentlichen Schlüssel des Empfängers (steve.tuck@sparkpost.com.crt) bereits auf dem "generation"-Knoten vorhanden. Die ersten Zeilen der Nachrichtendatei entsprechen diesen Adressen.

Wir senden die Nachricht vom "generation"-Knoten mit genau dem gleichen Befehl wie zuvor, und die Nachricht erscheint im Inbox.

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp

Wie Sie erwarten würden, koexistiert S/MIME auch problemlos mit Momentum's DKIM signing.

4. SMTP-Injection Richtung SparkPost

In Teil 2 haben wir die SparkPost-Transmissions-REST-API verwendet, um Nachrichten einzuspeisen. Natürlich ist es auch möglich, Nachrichten mit SMTP in SparkPost einzuspeisen. Wir setzen die Umgebungsvariablen wie folgt:

export SMTP_PASSWORD=<<YOUR_API_KEY_HERE>

Wenn Sie den SparkPost EU-gehosteten Dienst verwenden, dann setzen Sie SMTP_HOST auf smtp.eu.sparkpostmail.com.
(Siehe hier für weitere Optionen – beispielsweise können Sie auf Port 2525 anstatt 587 einspeisen.)

Die folgende Ausgabe zeigt, dass STARTTLS verwendet wird, zusammen mit dem Benutzernamen und Passwort.

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp


Sie werden sehen:

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

Das Passwort wird mit Ersatz-***-Zeichen gedruckt, sodass Ihr Schlüssel nicht kompromittiert wird, wenn jemand über Ihre Schulter schaut.

Sichern Ihrer Anmeldeinformationen

Beachten Sie, dass Umgebungsvariablen in einer Shell-Skriptdatei oder ähnlichem eingerichtet werden könnten, um das erneute Eingeben zu ersparen. Wenn Sie dies tun, achten Sie bitte darauf, Ihre Passwörter/API-Schlüssel zu schützen, indem Sie den Zugriff auf diese Datei nur auf sich selbst beschränken. Wenn Ihre Anmeldeinformationsdatei beispielsweise my_envs.sh heißt, führen Sie aus:

chmod 0700 my_envs.sh


SMTP-bezogene Warnungen, die Sie sehen können

Die SMTP-Injektion von SparkPost ist ziemlich streng, wie Sie es von einem öffentlichen Dienst erwarten würden. Wenn Sie die SMTP-Ports Nummer nicht gesetzt haben, sehen Sie eine Warnung:

{
  'bob.lumreeker@gmail.com': (550, b'5.7.1 relaying denied')
}


Wenn Sie den SMTP-Benutzernamen nicht gesetzt oder das Passwort nicht eingegeben haben, sehen Sie:

(530, b'5.7.1 Authorization required. 
Ref. https://developers.sparkpost.com/api/index#header-smtp-relay-endpoints', 
'steve@thetucks.com')

Diese Fehlermeldungen werden einfach so gemeldet, wie sie von der Python-SMTP-Bibliothek kommen, daher die Formatierung.

In Teil 2 haben wir die SparkPost-Transmissions-REST-API verwendet, um Nachrichten einzuspeisen. Natürlich ist es auch möglich, Nachrichten mit SMTP in SparkPost einzuspeisen. Wir setzen die Umgebungsvariablen wie folgt:

export SMTP_PASSWORD=<<YOUR_API_KEY_HERE>

Wenn Sie den SparkPost EU-gehosteten Dienst verwenden, dann setzen Sie SMTP_HOST auf smtp.eu.sparkpostmail.com.
(Siehe hier für weitere Optionen – beispielsweise können Sie auf Port 2525 anstatt 587 einspeisen.)

Die folgende Ausgabe zeigt, dass STARTTLS verwendet wird, zusammen mit dem Benutzernamen und Passwort.

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp


Sie werden sehen:

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

Das Passwort wird mit Ersatz-***-Zeichen gedruckt, sodass Ihr Schlüssel nicht kompromittiert wird, wenn jemand über Ihre Schulter schaut.

Sichern Ihrer Anmeldeinformationen

Beachten Sie, dass Umgebungsvariablen in einer Shell-Skriptdatei oder ähnlichem eingerichtet werden könnten, um das erneute Eingeben zu ersparen. Wenn Sie dies tun, achten Sie bitte darauf, Ihre Passwörter/API-Schlüssel zu schützen, indem Sie den Zugriff auf diese Datei nur auf sich selbst beschränken. Wenn Ihre Anmeldeinformationsdatei beispielsweise my_envs.sh heißt, führen Sie aus:

chmod 0700 my_envs.sh


SMTP-bezogene Warnungen, die Sie sehen können

Die SMTP-Injektion von SparkPost ist ziemlich streng, wie Sie es von einem öffentlichen Dienst erwarten würden. Wenn Sie die SMTP-Ports Nummer nicht gesetzt haben, sehen Sie eine Warnung:

{
  'bob.lumreeker@gmail.com': (550, b'5.7.1 relaying denied')
}


Wenn Sie den SMTP-Benutzernamen nicht gesetzt oder das Passwort nicht eingegeben haben, sehen Sie:

(530, b'5.7.1 Authorization required. 
Ref. https://developers.sparkpost.com/api/index#header-smtp-relay-endpoints', 
'steve@thetucks.com')

Diese Fehlermeldungen werden einfach so gemeldet, wie sie von der Python-SMTP-Bibliothek kommen, daher die Formatierung.

In Teil 2 haben wir die SparkPost-Transmissions-REST-API verwendet, um Nachrichten einzuspeisen. Natürlich ist es auch möglich, Nachrichten mit SMTP in SparkPost einzuspeisen. Wir setzen die Umgebungsvariablen wie folgt:

export SMTP_PASSWORD=<<YOUR_API_KEY_HERE>

Wenn Sie den SparkPost EU-gehosteten Dienst verwenden, dann setzen Sie SMTP_HOST auf smtp.eu.sparkpostmail.com.
(Siehe hier für weitere Optionen – beispielsweise können Sie auf Port 2525 anstatt 587 einspeisen.)

Die folgende Ausgabe zeigt, dass STARTTLS verwendet wird, zusammen mit dem Benutzernamen und Passwort.

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp


Sie werden sehen:

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

Das Passwort wird mit Ersatz-***-Zeichen gedruckt, sodass Ihr Schlüssel nicht kompromittiert wird, wenn jemand über Ihre Schulter schaut.

Sichern Ihrer Anmeldeinformationen

Beachten Sie, dass Umgebungsvariablen in einer Shell-Skriptdatei oder ähnlichem eingerichtet werden könnten, um das erneute Eingeben zu ersparen. Wenn Sie dies tun, achten Sie bitte darauf, Ihre Passwörter/API-Schlüssel zu schützen, indem Sie den Zugriff auf diese Datei nur auf sich selbst beschränken. Wenn Ihre Anmeldeinformationsdatei beispielsweise my_envs.sh heißt, führen Sie aus:

chmod 0700 my_envs.sh


SMTP-bezogene Warnungen, die Sie sehen können

Die SMTP-Injektion von SparkPost ist ziemlich streng, wie Sie es von einem öffentlichen Dienst erwarten würden. Wenn Sie die SMTP-Ports Nummer nicht gesetzt haben, sehen Sie eine Warnung:

{
  'bob.lumreeker@gmail.com': (550, b'5.7.1 relaying denied')
}


Wenn Sie den SMTP-Benutzernamen nicht gesetzt oder das Passwort nicht eingegeben haben, sehen Sie:

(530, b'5.7.1 Authorization required. 
Ref. https://developers.sparkpost.com/api/index#header-smtp-relay-endpoints', 
'steve@thetucks.com')

Diese Fehlermeldungen werden einfach so gemeldet, wie sie von der Python-SMTP-Bibliothek kommen, daher die Formatierung.

Welcher ist schneller – SMTP oder API?

Leistungsvergleich

Hier ist eine kurze Übersicht der Leistungstests:

Messung

SMTP

API

Notizen

Kleine Datei (~19 KB)

~60 ms

~60 ms

Nahezu identische Leistung

Große Datei (~577 KB)

~280 ms

~200 ms

API etwas schneller bei größeren Datenmengen

Ehrlich gesagt ist S/MIME wahrscheinlich kein Einsatzgebiet mit hohem Volumen, aber das gleiche Tool mit zwei Ausgabeoptionen zu haben, verführte uns geradezu, ein Rennen zu veranstalten!

Die hier verwendete „Avocado“ Test-E-Mail-Datei ist etwa 19KB groß. Die Wiederholung der Tests 10 Mal über eine Bash-Schleife zeigte, dass die durchschnittlichen Zeiten für SMTP und API ähnlich sind, etwa 60 Millisekunden pro Nachricht, was ziemlich schnell ist. In diesem Fall haben wir von einer mittleren EC2-Instanz in derselben Hosting-Region wie SparkPost.com injiziert, was eine gute Möglichkeit ist, die Netzwerk-Round-Trip-Zeiten gering zu halten.

Als wir dies mit einer größeren Testdatei (577KB) wiederholten, dauerte die API ungefähr 200 Millisekunden, während SMTP 280 Millisekunden pro Nachricht benötigte – immer noch beeindruckend für eine Dateigröße, die 30 Mal größer ist. Natürlich können je nach Standort, Internetüberlastung etc. abweichende Ergebnisse auftreten, aber Leistungsschwierigkeiten sind unwahrscheinlich.

Wenn Sie wirklich maximale Leistung benötigen, wäre ein guter Ausgangspunkt, eine festgelegte Anzahl gleichzeitiger Injektionsprozesse/Sitzungen gemäß unseren Übertragungsbest-Praktiken Empfehlungen zu starten – z.B. aus einer Supervisor-Aufgabe.

Leistungsvergleich

Hier ist eine kurze Übersicht der Leistungstests:

Messung

SMTP

API

Notizen

Kleine Datei (~19 KB)

~60 ms

~60 ms

Nahezu identische Leistung

Große Datei (~577 KB)

~280 ms

~200 ms

API etwas schneller bei größeren Datenmengen

Ehrlich gesagt ist S/MIME wahrscheinlich kein Einsatzgebiet mit hohem Volumen, aber das gleiche Tool mit zwei Ausgabeoptionen zu haben, verführte uns geradezu, ein Rennen zu veranstalten!

Die hier verwendete „Avocado“ Test-E-Mail-Datei ist etwa 19KB groß. Die Wiederholung der Tests 10 Mal über eine Bash-Schleife zeigte, dass die durchschnittlichen Zeiten für SMTP und API ähnlich sind, etwa 60 Millisekunden pro Nachricht, was ziemlich schnell ist. In diesem Fall haben wir von einer mittleren EC2-Instanz in derselben Hosting-Region wie SparkPost.com injiziert, was eine gute Möglichkeit ist, die Netzwerk-Round-Trip-Zeiten gering zu halten.

Als wir dies mit einer größeren Testdatei (577KB) wiederholten, dauerte die API ungefähr 200 Millisekunden, während SMTP 280 Millisekunden pro Nachricht benötigte – immer noch beeindruckend für eine Dateigröße, die 30 Mal größer ist. Natürlich können je nach Standort, Internetüberlastung etc. abweichende Ergebnisse auftreten, aber Leistungsschwierigkeiten sind unwahrscheinlich.

Wenn Sie wirklich maximale Leistung benötigen, wäre ein guter Ausgangspunkt, eine festgelegte Anzahl gleichzeitiger Injektionsprozesse/Sitzungen gemäß unseren Übertragungsbest-Praktiken Empfehlungen zu starten – z.B. aus einer Supervisor-Aufgabe.

Leistungsvergleich

Hier ist eine kurze Übersicht der Leistungstests:

Messung

SMTP

API

Notizen

Kleine Datei (~19 KB)

~60 ms

~60 ms

Nahezu identische Leistung

Große Datei (~577 KB)

~280 ms

~200 ms

API etwas schneller bei größeren Datenmengen

Ehrlich gesagt ist S/MIME wahrscheinlich kein Einsatzgebiet mit hohem Volumen, aber das gleiche Tool mit zwei Ausgabeoptionen zu haben, verführte uns geradezu, ein Rennen zu veranstalten!

Die hier verwendete „Avocado“ Test-E-Mail-Datei ist etwa 19KB groß. Die Wiederholung der Tests 10 Mal über eine Bash-Schleife zeigte, dass die durchschnittlichen Zeiten für SMTP und API ähnlich sind, etwa 60 Millisekunden pro Nachricht, was ziemlich schnell ist. In diesem Fall haben wir von einer mittleren EC2-Instanz in derselben Hosting-Region wie SparkPost.com injiziert, was eine gute Möglichkeit ist, die Netzwerk-Round-Trip-Zeiten gering zu halten.

Als wir dies mit einer größeren Testdatei (577KB) wiederholten, dauerte die API ungefähr 200 Millisekunden, während SMTP 280 Millisekunden pro Nachricht benötigte – immer noch beeindruckend für eine Dateigröße, die 30 Mal größer ist. Natürlich können je nach Standort, Internetüberlastung etc. abweichende Ergebnisse auftreten, aber Leistungsschwierigkeiten sind unwahrscheinlich.

Wenn Sie wirklich maximale Leistung benötigen, wäre ein guter Ausgangspunkt, eine festgelegte Anzahl gleichzeitiger Injektionsprozesse/Sitzungen gemäß unseren Übertragungsbest-Praktiken Empfehlungen zu starten – z.B. aus einer Supervisor-Aufgabe.

Zusammenfassend …

Wir haben gesehen, wie das auf der SparkPost-API basierende Tool, das in Teil 2 verwendet wurde, aktualisiert wird, um SMTP-Injektion zu unterstützen, um On-Premises-MTAs wie Port25 PowerMTA und Momentum in einer Vielzahl von Konfigurationen sowie mit SparkPost zu unterstützen.

Das war's für jetzt! Viel Spaß beim Versenden.

Wir haben gesehen, wie das auf der SparkPost-API basierende Tool, das in Teil 2 verwendet wurde, aktualisiert wird, um SMTP-Injektion zu unterstützen, um On-Premises-MTAs wie Port25 PowerMTA und Momentum in einer Vielzahl von Konfigurationen sowie mit SparkPost zu unterstützen.

Das war's für jetzt! Viel Spaß beim Versenden.

Wir haben gesehen, wie das auf der SparkPost-API basierende Tool, das in Teil 2 verwendet wurde, aktualisiert wird, um SMTP-Injektion zu unterstützen, um On-Premises-MTAs wie Port25 PowerMTA und Momentum in einer Vielzahl von Konfigurationen sowie mit SparkPost zu unterstützen.

Das war's für jetzt! Viel Spaß beim Versenden.

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.