S/MIME Część 3: Plug and Play dla lokalnej bezpiecznej poczty e-mail
Ptak
1 gru 2019
1 min read

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.



