S/MIME Część 3: Plug and Play dla lokalnej bezpiecznej poczty e-mail

Ptak

1 gru 2019

Email

1 min read

S/MIME Część 3: Plug and Play dla lokalnej bezpiecznej poczty e-mail

Najważniejsze informacje

    • Integracja S/MIME dla lokalnych MTA: dowiedz się, jak wprowadzić podpisane i szyfrowane strumienie e-mailowe do PowerMTA, Momentum lub SparkPost SMTP, zachowując istniejące ustalenia dotyczące DKIM i zgodności.

    • Model bezpieczeństwa hybrydowego: połącz szyfrowanie S/MIME + podpisywanie DKIM, aby zapewnić zarówno autentyczność wiadomości, jak i prywatność treści w regulowanych środowiskach.

    • Przepływ wdrożenia: skonfiguruj zmienne środowiskowe (SMTP_HOST, dane uwierzytelniające, klucze), uruchom workflow --sign --encrypt --send_smtp i zweryfikuj raporty dostawy.

    • Wgląd w wydajność: testy wykazują niemal identyczną prędkość dla wstrzykiwania SMTP vs API (~60 ms na wiadomość, 200–280 ms dla większych plików).

    • Najlepsze praktyki bezpieczeństwa: przechowuj klucze prywatne i hasła API w zastrzeżonych plikach (chmod 0700), używaj sesji STARTTLS i uwierzytelnionych SMTP.

    • Przypadki użycia: przedsiębiorstwa modernizujące legacy systemy pocztowe mogą wydłużyć szyfrowanie end-to-end bez porzucania istniejącej infrastruktury.

Podsumowanie pytań i odpowiedzi

  • Dlaczego dostosować S/MIME dla serwerów lokalnych zamiast API chmurowych?

    Wiele regulowanych branż (sektory bankowy i opieki zdrowotnej) musi przechowywać pocztę na miejscu. Takie podejście utrzymuje kontrolę nad przepływem wiadomości, jednocześnie wprowadzając nowoczesną ochronę kryptograficzną.

  • Jak działa wstrzyknięcie SMTP w PowerMTA lub Momentum?

    Wstrzykujesz w pełni uformowane wiadomości S/MIME do lokalnego nasłuchu (port 25 lub prywatny VLAN). Te MTA następnie zajmują się podpisywaniem DKIM i dostarczaniem jak zwykle.

  • Czy S/MIME jest kompatybilne z DKIM?

    Tak — DKIM podpisuje wiadomość po szyfrowaniu S/MIME, więc weryfikacja tożsamości i integralności pozostaje nienaruszona.

  • Jak mogę chronić moje dane logowania SMTP i klucze?

    Eksportuj zmienne środowiskowe tylko w zablokowanych skryptach i użyj uprawnień do plików, aby ograniczyć dostęp do siebie (chmod 0700 my_envs.sh).

  • Co powinienem monitorować po konfiguracji?

    Opóźnienie dostawy (API vs SMTP), wskaźnik sukcesu handshake TLS, wyniki walidacji DKIM/S-MIME oraz logi błędów dla „odrzucania przekazywania” lub braku autoryzacji.

  • Kto najbardziej korzysta z tej konfiguracji?

    Organizacje obsługujące własne bramy pocztowe, które wymagają szyfrowania na poziomie zgodności, a jednocześnie chcą narzędzi typu plug-and-play bez przepisywania pipeline'ów pocztowych.

W części 1 mieliśmy szybkie wprowadzenie do S/MIME, przyglądając się podpisywaniu i szyfrowaniu naszych strumieni wiadomości w różnych klientach pocztowych. Dla organizacji wdrażających szyfrowanie S/MIME, zrozumienie, jak efektywnie zbierać publiczne klucze odbiorców, staje się kluczowe dla skalowalnych operacji bezpiecznej poczty elektronicznej. Część 2 zabrała nas przez prosty narzędzie wiersza poleceń do podpisywania i szyfrowania e-maili, a następnie wysyłania ich przez SparkPost.

W tej części przyjrzymy się, jak narzędzie można dostosować, aby wstrzykiwać strumienie poczty do platform lokalnych, takich jak Port25 PowerMTA i Momentum.

OK – zaczynajmy!

W części 1 mieliśmy szybkie wprowadzenie do S/MIME, przyglądając się podpisywaniu i szyfrowaniu naszych strumieni wiadomości w różnych klientach pocztowych. Dla organizacji wdrażających szyfrowanie S/MIME, zrozumienie, jak efektywnie zbierać publiczne klucze odbiorców, staje się kluczowe dla skalowalnych operacji bezpiecznej poczty elektronicznej. Część 2 zabrała nas przez prosty narzędzie wiersza poleceń do podpisywania i szyfrowania e-maili, a następnie wysyłania ich przez SparkPost.

W tej części przyjrzymy się, jak narzędzie można dostosować, aby wstrzykiwać strumienie poczty do platform lokalnych, takich jak Port25 PowerMTA i Momentum.

OK – zaczynajmy!

W części 1 mieliśmy szybkie wprowadzenie do S/MIME, przyglądając się podpisywaniu i szyfrowaniu naszych strumieni wiadomości w różnych klientach pocztowych. Dla organizacji wdrażających szyfrowanie S/MIME, zrozumienie, jak efektywnie zbierać publiczne klucze odbiorców, staje się kluczowe dla skalowalnych operacji bezpiecznej poczty elektronicznej. Część 2 zabrała nas przez prosty narzędzie wiersza poleceń do podpisywania i szyfrowania e-maili, a następnie wysyłania ich przez SparkPost.

W tej części przyjrzymy się, jak narzędzie można dostosować, aby wstrzykiwać strumienie poczty do platform lokalnych, takich jak Port25 PowerMTA i Momentum.

OK – zaczynajmy!

1. Wprowadzenie

Instalacja narzędzia, uzyskiwanie kluczy itp. jest dokładnie taka sama jak wcześniej. Kiedy korzystasz z lokalnego systemu e-mail, takiego jak PowerMTA lub Momentum, już odpowiadasz za konfigurowanie domen wysyłających, kluczy DKIM itp. Organizacje działające na lokalnych systemach często muszą również zmierzyć się z wyzwaniami systemów archiwizacji e-mail w celu przestrzegania przepisów i wymagań dotyczących przechowywania danych. To, co musimy teraz zrobić, to zapewnić sposób na wstrzyknięcie w pełni sformowanych wiadomości S/MIME do twoich serwerów.

Instalacja narzędzia, uzyskiwanie kluczy itp. jest dokładnie taka sama jak wcześniej. Kiedy korzystasz z lokalnego systemu e-mail, takiego jak PowerMTA lub Momentum, już odpowiadasz za konfigurowanie domen wysyłających, kluczy DKIM itp. Organizacje działające na lokalnych systemach często muszą również zmierzyć się z wyzwaniami systemów archiwizacji e-mail w celu przestrzegania przepisów i wymagań dotyczących przechowywania danych. To, co musimy teraz zrobić, to zapewnić sposób na wstrzyknięcie w pełni sformowanych wiadomości S/MIME do twoich serwerów.

Instalacja narzędzia, uzyskiwanie kluczy itp. jest dokładnie taka sama jak wcześniej. Kiedy korzystasz z lokalnego systemu e-mail, takiego jak PowerMTA lub Momentum, już odpowiadasz za konfigurowanie domen wysyłających, kluczy DKIM itp. Organizacje działające na lokalnych systemach często muszą również zmierzyć się z wyzwaniami systemów archiwizacji e-mail w celu przestrzegania przepisów i wymagań dotyczących przechowywania danych. To, co musimy teraz zrobić, to zapewnić sposób na wstrzyknięcie w pełni sformowanych wiadomości S/MIME do twoich serwerów.

2. Wstrzykiwanie SMTP w kierunku Port25 PowerMTA

PowerMTA obsługuje różne metody wstrzykiwania wiadomości, w tym katalog „odbioru” plików, SMTP oraz API. SMTP jest metodą używaną tutaj.

Aby zobrazować najprostsze możliwe ustawienie, zainstalujemy narzędzia S/MIME na tym samym serwerze co PowerMTA. Wprowadzamy wiadomości do nasłuchiwacza, który jest otwarty domyślnie na porcie TCP 25, akceptując tylko lokalny ruch.

export SMTP_HOST=localhost

(Jeśli zapomnisz o tym kroku, zobaczysz: „Zmienna środowiskowa SMTP_HOST nie jest ustawiona – zatrzymuje się” gdy spróbujesz uruchomić.)


Mamy już prywatny klucz nadawcy (steve@thetucks.com.pem) oraz publiczny klucz odbiorcy (steve.tuck@sparkpost.com.crt). Pierwsze kilka linii pliku wiadomości wygląda następująco:

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


Wysyłamy wiadomość z:

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


Widzę:

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


Wiadomość szybko przychodzi do skrzynki odbiorczej i raportuje w Mac Mail jako podpisana i zaszyfrowana.

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


Dodatkowa funkcja: DKIM z PowerMTA

DKIM jest dość łatwy do skonfigurowania i współistnieje z S/MIME. Kroki są następujące:

  • Użyj strony Kreator DKIM PowerMTA, aby utworzyć prywatny klucz domeny nadawczej (w moim przypadku, mypmta.thetucks.com.pem) oraz zawartość publicznego rekordu DNS TXT.

  • Skonfiguruj rekord DNS TXT z wybranym selektorem. Na przykład, użyłem selektora pmta201811. Ważne znaki selektora są określone tutaj.

  • Umieść plik mypmta.thetucks.com.pem na serwerze w katalogu /etc/pmta .

  • Dodaj następujące do mojego /etc/pmta/config i zrestartuj usługę pmta. (Tutaj te dyrektywy są zapisane w zakresie globalnym; w systemie produkcyjnym możesz preferować dodanie ich pod wirtualnym mta zamiast tego.)


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


Rekord DNS przeszedł kontrolę w MX Toolbox i DKIM jest teraz aktywny.

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

PowerMTA obsługuje różne metody wstrzykiwania wiadomości, w tym katalog „odbioru” plików, SMTP oraz API. SMTP jest metodą używaną tutaj.

Aby zobrazować najprostsze możliwe ustawienie, zainstalujemy narzędzia S/MIME na tym samym serwerze co PowerMTA. Wprowadzamy wiadomości do nasłuchiwacza, który jest otwarty domyślnie na porcie TCP 25, akceptując tylko lokalny ruch.

export SMTP_HOST=localhost

(Jeśli zapomnisz o tym kroku, zobaczysz: „Zmienna środowiskowa SMTP_HOST nie jest ustawiona – zatrzymuje się” gdy spróbujesz uruchomić.)


Mamy już prywatny klucz nadawcy (steve@thetucks.com.pem) oraz publiczny klucz odbiorcy (steve.tuck@sparkpost.com.crt). Pierwsze kilka linii pliku wiadomości wygląda następująco:

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


Wysyłamy wiadomość z:

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


Widzę:

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


Wiadomość szybko przychodzi do skrzynki odbiorczej i raportuje w Mac Mail jako podpisana i zaszyfrowana.

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


Dodatkowa funkcja: DKIM z PowerMTA

DKIM jest dość łatwy do skonfigurowania i współistnieje z S/MIME. Kroki są następujące:

  • Użyj strony Kreator DKIM PowerMTA, aby utworzyć prywatny klucz domeny nadawczej (w moim przypadku, mypmta.thetucks.com.pem) oraz zawartość publicznego rekordu DNS TXT.

  • Skonfiguruj rekord DNS TXT z wybranym selektorem. Na przykład, użyłem selektora pmta201811. Ważne znaki selektora są określone tutaj.

  • Umieść plik mypmta.thetucks.com.pem na serwerze w katalogu /etc/pmta .

  • Dodaj następujące do mojego /etc/pmta/config i zrestartuj usługę pmta. (Tutaj te dyrektywy są zapisane w zakresie globalnym; w systemie produkcyjnym możesz preferować dodanie ich pod wirtualnym mta zamiast tego.)


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


Rekord DNS przeszedł kontrolę w MX Toolbox i DKIM jest teraz aktywny.

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

PowerMTA obsługuje różne metody wstrzykiwania wiadomości, w tym katalog „odbioru” plików, SMTP oraz API. SMTP jest metodą używaną tutaj.

Aby zobrazować najprostsze możliwe ustawienie, zainstalujemy narzędzia S/MIME na tym samym serwerze co PowerMTA. Wprowadzamy wiadomości do nasłuchiwacza, który jest otwarty domyślnie na porcie TCP 25, akceptując tylko lokalny ruch.

export SMTP_HOST=localhost

(Jeśli zapomnisz o tym kroku, zobaczysz: „Zmienna środowiskowa SMTP_HOST nie jest ustawiona – zatrzymuje się” gdy spróbujesz uruchomić.)


Mamy już prywatny klucz nadawcy (steve@thetucks.com.pem) oraz publiczny klucz odbiorcy (steve.tuck@sparkpost.com.crt). Pierwsze kilka linii pliku wiadomości wygląda następująco:

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


Wysyłamy wiadomość z:

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


Widzę:

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


Wiadomość szybko przychodzi do skrzynki odbiorczej i raportuje w Mac Mail jako podpisana i zaszyfrowana.

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


Dodatkowa funkcja: DKIM z PowerMTA

DKIM jest dość łatwy do skonfigurowania i współistnieje z S/MIME. Kroki są następujące:

  • Użyj strony Kreator DKIM PowerMTA, aby utworzyć prywatny klucz domeny nadawczej (w moim przypadku, mypmta.thetucks.com.pem) oraz zawartość publicznego rekordu DNS TXT.

  • Skonfiguruj rekord DNS TXT z wybranym selektorem. Na przykład, użyłem selektora pmta201811. Ważne znaki selektora są określone tutaj.

  • Umieść plik mypmta.thetucks.com.pem na serwerze w katalogu /etc/pmta .

  • Dodaj następujące do mojego /etc/pmta/config i zrestartuj usługę pmta. (Tutaj te dyrektywy są zapisane w zakresie globalnym; w systemie produkcyjnym możesz preferować dodanie ich pod wirtualnym mta zamiast tego.)


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


Rekord DNS przeszedł kontrolę w MX Toolbox i DKIM jest teraz aktywny.

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

3. Iniekcja SMTP w kierunku Momentum

Momentum wspiera różne metody wstrzykiwania wiadomości, w tym API i SMTP. SMTP to metoda używana tutaj, w kierunku hosta, który już działa na Momentum. Pozostawimy jego konfigurację bez zmian, ponieważ już ma zdolność akceptowania przychodzących wstrzyknięć od innych zatwierdzonych hostów.

To jest mniejsza wersja konfiguracji produkcyjnej, w której węzły „generacyjne” i węzły MTA są oddzielne, ale ściśle powiązane poprzez prywatne VLAN i load-balancery, przenoszące wewnętrzny ruch wstrzyknięcia SMTP.


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


Narzędzia S/MIME są zainstalowane jak wcześniej, a my wstrzykniemy wiadomości na adres hosta SMTP (MTA):

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

Jak wcześniej, mamy prywatny klucz nadawcy (steve@thetucks.com.pem) i publiczny klucz odbiorcy (steve.tuck@sparkpost.com.crt) już obecny na węźle „generacyjnym”. Pierwsze kilka linii pliku wiadomości odpowiada tym adresom.

Wysyłamy wiadomość z węzła „generacyjnego” dokładnie tym samym poleceniem co wcześniej, a wiadomość pojawia się w skrzynce odbiorczej.

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

Jak się spodziewasz, S/MIME również chętnie współistnieje z podpisywaniem DKIM w Momentum.

Momentum wspiera różne metody wstrzykiwania wiadomości, w tym API i SMTP. SMTP to metoda używana tutaj, w kierunku hosta, który już działa na Momentum. Pozostawimy jego konfigurację bez zmian, ponieważ już ma zdolność akceptowania przychodzących wstrzyknięć od innych zatwierdzonych hostów.

To jest mniejsza wersja konfiguracji produkcyjnej, w której węzły „generacyjne” i węzły MTA są oddzielne, ale ściśle powiązane poprzez prywatne VLAN i load-balancery, przenoszące wewnętrzny ruch wstrzyknięcia SMTP.


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


Narzędzia S/MIME są zainstalowane jak wcześniej, a my wstrzykniemy wiadomości na adres hosta SMTP (MTA):

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

Jak wcześniej, mamy prywatny klucz nadawcy (steve@thetucks.com.pem) i publiczny klucz odbiorcy (steve.tuck@sparkpost.com.crt) już obecny na węźle „generacyjnym”. Pierwsze kilka linii pliku wiadomości odpowiada tym adresom.

Wysyłamy wiadomość z węzła „generacyjnego” dokładnie tym samym poleceniem co wcześniej, a wiadomość pojawia się w skrzynce odbiorczej.

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

Jak się spodziewasz, S/MIME również chętnie współistnieje z podpisywaniem DKIM w Momentum.

Momentum wspiera różne metody wstrzykiwania wiadomości, w tym API i SMTP. SMTP to metoda używana tutaj, w kierunku hosta, który już działa na Momentum. Pozostawimy jego konfigurację bez zmian, ponieważ już ma zdolność akceptowania przychodzących wstrzyknięć od innych zatwierdzonych hostów.

To jest mniejsza wersja konfiguracji produkcyjnej, w której węzły „generacyjne” i węzły MTA są oddzielne, ale ściśle powiązane poprzez prywatne VLAN i load-balancery, przenoszące wewnętrzny ruch wstrzyknięcia SMTP.


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


Narzędzia S/MIME są zainstalowane jak wcześniej, a my wstrzykniemy wiadomości na adres hosta SMTP (MTA):

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

Jak wcześniej, mamy prywatny klucz nadawcy (steve@thetucks.com.pem) i publiczny klucz odbiorcy (steve.tuck@sparkpost.com.crt) już obecny na węźle „generacyjnym”. Pierwsze kilka linii pliku wiadomości odpowiada tym adresom.

Wysyłamy wiadomość z węzła „generacyjnego” dokładnie tym samym poleceniem co wcześniej, a wiadomość pojawia się w skrzynce odbiorczej.

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

Jak się spodziewasz, S/MIME również chętnie współistnieje z podpisywaniem DKIM w Momentum.

4. Wstrzykiwanie SMTP w kierunku SparkPost

W części 2 użyliśmy API REST transmisji SparkPost do wstrzykiwania wiadomości. Oczywiście możliwe jest również wstrzykiwanie wiadomości do SparkPost za pomocą SMTP. Ustawiliśmy zmienne środowiskowe w ten sposób:

export SMTP_PASSWORD=<<YOUR_API_KEY_HERE>

Jeśli korzystasz z usługi hostowanej w UE SparkPost, ustaw SMTP_HOST jako smtp.eu.sparkpostmail.com.
(Zobacz tutaj więcej opcji – przykładowo możesz wstrzykiwać na porcie 2525 zamiast 587.)

Wyjście poniżej pokazuje, że użyto STARTTLS, wraz z nazwą użytkownika i hasłem.

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


Zobaczysz:

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

Hasło jest wyświetlane z zamiennikami ***, więc nie kompromitujesz prywatności swojego klucza, jeśli ktoś patrzy ci przez ramię.

Zabezpieczanie swoich danych logowania

Warto zauważyć, że zmienne środowiskowe mogą być ustawione w skrypcie powłoki lub podobnym, aby uniknąć ponownego wpisywania. Jeśli to zrobisz, zadbaj o swoje hasła/klucze API, ograniczając dostęp do tego pliku tylko dla siebie. Na przykład, jeśli twój plik konfiguracyjny danych logowania nosi nazwę my_envs.sh, uruchom:

chmod 0700 my_envs.sh


Ostrzeżenia związane z SMTP, które możesz zobaczyć

Wstrzykiwanie SMTP w SparkPost jest dość rygorystyczne, jak można się spodziewać od publicznej usługi. Jeśli nie ustawisz numeru portu SMTP, zobaczysz ostrzeżenie:

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


Jeśli nie ustawisz nazwy użytkownika SMTP lub nie ustawisz hasła, zobaczysz:

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

Te komunikaty o błędach są po prostu raportowane tak, jak są, z biblioteki SMTP Python, stąd formatowanie.

W części 2 użyliśmy API REST transmisji SparkPost do wstrzykiwania wiadomości. Oczywiście możliwe jest również wstrzykiwanie wiadomości do SparkPost za pomocą SMTP. Ustawiliśmy zmienne środowiskowe w ten sposób:

export SMTP_PASSWORD=<<YOUR_API_KEY_HERE>

Jeśli korzystasz z usługi hostowanej w UE SparkPost, ustaw SMTP_HOST jako smtp.eu.sparkpostmail.com.
(Zobacz tutaj więcej opcji – przykładowo możesz wstrzykiwać na porcie 2525 zamiast 587.)

Wyjście poniżej pokazuje, że użyto STARTTLS, wraz z nazwą użytkownika i hasłem.

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


Zobaczysz:

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

Hasło jest wyświetlane z zamiennikami ***, więc nie kompromitujesz prywatności swojego klucza, jeśli ktoś patrzy ci przez ramię.

Zabezpieczanie swoich danych logowania

Warto zauważyć, że zmienne środowiskowe mogą być ustawione w skrypcie powłoki lub podobnym, aby uniknąć ponownego wpisywania. Jeśli to zrobisz, zadbaj o swoje hasła/klucze API, ograniczając dostęp do tego pliku tylko dla siebie. Na przykład, jeśli twój plik konfiguracyjny danych logowania nosi nazwę my_envs.sh, uruchom:

chmod 0700 my_envs.sh


Ostrzeżenia związane z SMTP, które możesz zobaczyć

Wstrzykiwanie SMTP w SparkPost jest dość rygorystyczne, jak można się spodziewać od publicznej usługi. Jeśli nie ustawisz numeru portu SMTP, zobaczysz ostrzeżenie:

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


Jeśli nie ustawisz nazwy użytkownika SMTP lub nie ustawisz hasła, zobaczysz:

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

Te komunikaty o błędach są po prostu raportowane tak, jak są, z biblioteki SMTP Python, stąd formatowanie.

W części 2 użyliśmy API REST transmisji SparkPost do wstrzykiwania wiadomości. Oczywiście możliwe jest również wstrzykiwanie wiadomości do SparkPost za pomocą SMTP. Ustawiliśmy zmienne środowiskowe w ten sposób:

export SMTP_PASSWORD=<<YOUR_API_KEY_HERE>

Jeśli korzystasz z usługi hostowanej w UE SparkPost, ustaw SMTP_HOST jako smtp.eu.sparkpostmail.com.
(Zobacz tutaj więcej opcji – przykładowo możesz wstrzykiwać na porcie 2525 zamiast 587.)

Wyjście poniżej pokazuje, że użyto STARTTLS, wraz z nazwą użytkownika i hasłem.

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


Zobaczysz:

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

Hasło jest wyświetlane z zamiennikami ***, więc nie kompromitujesz prywatności swojego klucza, jeśli ktoś patrzy ci przez ramię.

Zabezpieczanie swoich danych logowania

Warto zauważyć, że zmienne środowiskowe mogą być ustawione w skrypcie powłoki lub podobnym, aby uniknąć ponownego wpisywania. Jeśli to zrobisz, zadbaj o swoje hasła/klucze API, ograniczając dostęp do tego pliku tylko dla siebie. Na przykład, jeśli twój plik konfiguracyjny danych logowania nosi nazwę my_envs.sh, uruchom:

chmod 0700 my_envs.sh


Ostrzeżenia związane z SMTP, które możesz zobaczyć

Wstrzykiwanie SMTP w SparkPost jest dość rygorystyczne, jak można się spodziewać od publicznej usługi. Jeśli nie ustawisz numeru portu SMTP, zobaczysz ostrzeżenie:

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


Jeśli nie ustawisz nazwy użytkownika SMTP lub nie ustawisz hasła, zobaczysz:

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

Te komunikaty o błędach są po prostu raportowane tak, jak są, z biblioteki SMTP Python, stąd formatowanie.

Który jest szybszy – SMTP czy API?

Porównanie wydajności

Oto szybkie zestawienie testów wydajności:

Pomiar

SMTP

API

Uwagi

Mały plik (~19 KB)

~60 ms

~60 ms

Prawie identyczna wydajność

Duży plik (~577 KB)

~280 ms

~200 ms

API nieco szybsze przy większych ładunkach

Nie da się ukryć, że S/MIME prawdopodobnie nie będzie używany na dużą skalę, ale posiadanie tego samego narzędzia z dwiema opcjami wyjściowymi po prostu prosiło o przeprowadzenie wyścigu!

Plik testowy e-mail „Avocado” użyty tutaj ma około 19 KB. Powtarzanie testów 10 razy za pomocą pętli bash pokazało, że średnie czasy są podobne dla SMTP i API, wynoszące około 60 milisekund na wiadomość, co jest dość szybkie. W tym przypadku wstrzykiwano z średniej instancji EC2 w tym samym regionie hostingu co SparkPost.com, co jest dobrym sposobem na utrzymanie niskich czasów podróży sieciowej.

Powtarzając to z większym plikiem testowym (577 KB), API zajęło około 200 milisekund, podczas gdy SMTP 280 milisekund na wiadomość – wciąż imponujące dla pliku 30 razy większego. Oczywiście, skutki mogą się różnić w zależności od lokalizacji, zatorów internetowych itp., ale wydajność prawdopodobnie nie będzie problemem.

Jeśli naprawdę potrzebujesz maksymalnej wydajności, dobrym punktem wyjścia byłoby uruchomienie określonej liczby równoległych procesów sesji wstrzykiwania zgodnie z naszymi zaleceniami najlepszych praktyk transmisji – np. z zadania nadzorczego.

Porównanie wydajności

Oto szybkie zestawienie testów wydajności:

Pomiar

SMTP

API

Uwagi

Mały plik (~19 KB)

~60 ms

~60 ms

Prawie identyczna wydajność

Duży plik (~577 KB)

~280 ms

~200 ms

API nieco szybsze przy większych ładunkach

Nie da się ukryć, że S/MIME prawdopodobnie nie będzie używany na dużą skalę, ale posiadanie tego samego narzędzia z dwiema opcjami wyjściowymi po prostu prosiło o przeprowadzenie wyścigu!

Plik testowy e-mail „Avocado” użyty tutaj ma około 19 KB. Powtarzanie testów 10 razy za pomocą pętli bash pokazało, że średnie czasy są podobne dla SMTP i API, wynoszące około 60 milisekund na wiadomość, co jest dość szybkie. W tym przypadku wstrzykiwano z średniej instancji EC2 w tym samym regionie hostingu co SparkPost.com, co jest dobrym sposobem na utrzymanie niskich czasów podróży sieciowej.

Powtarzając to z większym plikiem testowym (577 KB), API zajęło około 200 milisekund, podczas gdy SMTP 280 milisekund na wiadomość – wciąż imponujące dla pliku 30 razy większego. Oczywiście, skutki mogą się różnić w zależności od lokalizacji, zatorów internetowych itp., ale wydajność prawdopodobnie nie będzie problemem.

Jeśli naprawdę potrzebujesz maksymalnej wydajności, dobrym punktem wyjścia byłoby uruchomienie określonej liczby równoległych procesów sesji wstrzykiwania zgodnie z naszymi zaleceniami najlepszych praktyk transmisji – np. z zadania nadzorczego.

Porównanie wydajności

Oto szybkie zestawienie testów wydajności:

Pomiar

SMTP

API

Uwagi

Mały plik (~19 KB)

~60 ms

~60 ms

Prawie identyczna wydajność

Duży plik (~577 KB)

~280 ms

~200 ms

API nieco szybsze przy większych ładunkach

Nie da się ukryć, że S/MIME prawdopodobnie nie będzie używany na dużą skalę, ale posiadanie tego samego narzędzia z dwiema opcjami wyjściowymi po prostu prosiło o przeprowadzenie wyścigu!

Plik testowy e-mail „Avocado” użyty tutaj ma około 19 KB. Powtarzanie testów 10 razy za pomocą pętli bash pokazało, że średnie czasy są podobne dla SMTP i API, wynoszące około 60 milisekund na wiadomość, co jest dość szybkie. W tym przypadku wstrzykiwano z średniej instancji EC2 w tym samym regionie hostingu co SparkPost.com, co jest dobrym sposobem na utrzymanie niskich czasów podróży sieciowej.

Powtarzając to z większym plikiem testowym (577 KB), API zajęło około 200 milisekund, podczas gdy SMTP 280 milisekund na wiadomość – wciąż imponujące dla pliku 30 razy większego. Oczywiście, skutki mogą się różnić w zależności od lokalizacji, zatorów internetowych itp., ale wydajność prawdopodobnie nie będzie problemem.

Jeśli naprawdę potrzebujesz maksymalnej wydajności, dobrym punktem wyjścia byłoby uruchomienie określonej liczby równoległych procesów sesji wstrzykiwania zgodnie z naszymi zaleceniami najlepszych praktyk transmisji – np. z zadania nadzorczego.

Podsumowując ...

Widzieliśmy, jak narzędzie oparte na API SparkPost używane w Części 2 jest aktualizowane, aby obsługiwać wstrzyknięcie SMTP dla lokalnych MTA, takich jak Port25 PowerMTA i Momentum w różnych konfiguracjach, a także z SparkPost.

To wszystko na teraz! Szczęśliwego wysyłania.

Widzieliśmy, jak narzędzie oparte na API SparkPost używane w Części 2 jest aktualizowane, aby obsługiwać wstrzyknięcie SMTP dla lokalnych MTA, takich jak Port25 PowerMTA i Momentum w różnych konfiguracjach, a także z SparkPost.

To wszystko na teraz! Szczęśliwego wysyłania.

Widzieliśmy, jak narzędzie oparte na API SparkPost używane w Części 2 jest aktualizowane, aby obsługiwać wstrzyknięcie SMTP dla lokalnych MTA, takich jak Port25 PowerMTA i Momentum w różnych konfiguracjach, a także z SparkPost.

To wszystko na teraz! Szczęśliwego wysyłania.

Inne wiadomości

Przeczytaj więcej z tej kategorii

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

Kompletna platforma oparta na sztucznej inteligencji, która rośnie wraz z Twoim biznesem.

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

Kompletna platforma oparta na sztucznej inteligencji, która rośnie wraz z Twoim biznesem.