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

Kluczowe Wnioski

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

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

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

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

    • Najlepsze praktyki bezpieczeństwa: przechowuj klucze prywatne i hasła API w plikach z ograniczeniami (chmod 0700), korzystaj ze STARTTLS i uwierzytelnianych sesji SMTP.

    • Przypadki użycia: przedsiębiorstwa modernizujące starsze systemy pocztowe mogą rozszerzać szyfrowanie end-to-end, nie rezygnując z istniejącej infrastruktury.

Q&A Highlights

  • Dlaczego adaptować S/MIME dla serwerów lokalnych zamiast cloud APIs?

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

  • Jak działa wstrzykiwanie SMTP z PowerMTA lub Momentum?

    Wstrzykujesz w pełni ukształtowane wiadomości S/MIME do lokalnego nasłuchiwacza (port 25 lub prywatny VLAN). Te MTA następnie obsługują podpisywanie DKIM i dostarczanie jak zwykle.

  • Czy S/MIME jest kompatybilne z DKIM?

    Tak — DKIM podpisuje wiadomość po szyfrowaniu S/MIME, więc uwierzytelnianie i kontrole integralności pozostają nienaruszone.

  • Jak chronić moje dane uwierzytelniające SMTP i klucze?

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

  • Co powinienem monitorować po ukończeniu setup?

    Opóźnienie dostawy (API vs SMTP), wskaźnik sukcesu uzgadniania TLS, wyniki walidacji DKIM/S-MIME oraz dzienniki błędów dla „relaying denied” lub brakującego uwierzytelnienia.

  • Kto najbardziej korzysta z tej konfiguracji?

    Organizacje prowadzące samodzielnie hostowane bramy pocztowe wymagające szyfrowania zgodnego z normami, a jednocześnie chcące narzędzi plug-and-play bez potrzeby przepisania kanałów pocztowych.

W części 1 odbyliśmy krótką wycieczkę po 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ć klucze publiczne odbiorców, staje się kluczowe dla skalowalnych, bezpiecznych operacji email. Część 2 przeprowadziła nas przez proste narzędzie wiersza poleceń do podpisywania i szyfrowania emaili, a następnie wysyłania ich przez SparkPost.

W tej części przyjrzymy się, jak narzędzie można dostosować do wprowadzania strumieni wiadomości do platform lokalnych, takich jak Port25 PowerMTA i Momentum.

OK – zaczynajmy!

W części 1 odbyliśmy krótką wycieczkę po 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ć klucze publiczne odbiorców, staje się kluczowe dla skalowalnych, bezpiecznych operacji email. Część 2 przeprowadziła nas przez proste narzędzie wiersza poleceń do podpisywania i szyfrowania emaili, a następnie wysyłania ich przez SparkPost.

W tej części przyjrzymy się, jak narzędzie można dostosować do wprowadzania strumieni wiadomości do platform lokalnych, takich jak Port25 PowerMTA i Momentum.

OK – zaczynajmy!

W części 1 odbyliśmy krótką wycieczkę po 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ć klucze publiczne odbiorców, staje się kluczowe dla skalowalnych, bezpiecznych operacji email. Część 2 przeprowadziła nas przez proste narzędzie wiersza poleceń do podpisywania i szyfrowania emaili, a następnie wysyłania ich przez SparkPost.

W tej części przyjrzymy się, jak narzędzie można dostosować do wprowadzania strumieni wiadomości do platform lokalnych, takich jak Port25 PowerMTA i Momentum.

OK – zaczynajmy!

1. Rozpoczęcie

Instalacja narzędzia, uzyskiwanie kluczy itp. jest dokładnie taka sama jak wcześniej. Gdy używasz lokalnego systemu e-mail, takiego jak PowerMTA lub Momentum, jesteś już odpowiedzialny za konfigurację domen wysyłających, kluczy DKIM itp. Organizacje działające w lokalnych systemach często muszą rozwiązywać problemy z archiwizacją e-mail dla zgodności z przepisami i wymogów dotyczących przechowywania danych. To, co musimy teraz zrobić, to zapewnić jakiś sposób na wstrzykiwanie w pełni uformowanych wiadomości S/MIME do twoich serwerów.

Instalacja narzędzia, uzyskiwanie kluczy itp. jest dokładnie taka sama jak wcześniej. Gdy używasz lokalnego systemu e-mail, takiego jak PowerMTA lub Momentum, jesteś już odpowiedzialny za konfigurację domen wysyłających, kluczy DKIM itp. Organizacje działające w lokalnych systemach często muszą rozwiązywać problemy z archiwizacją e-mail dla zgodności z przepisami i wymogów dotyczących przechowywania danych. To, co musimy teraz zrobić, to zapewnić jakiś sposób na wstrzykiwanie w pełni uformowanych wiadomości S/MIME do twoich serwerów.

Instalacja narzędzia, uzyskiwanie kluczy itp. jest dokładnie taka sama jak wcześniej. Gdy używasz lokalnego systemu e-mail, takiego jak PowerMTA lub Momentum, jesteś już odpowiedzialny za konfigurację domen wysyłających, kluczy DKIM itp. Organizacje działające w lokalnych systemach często muszą rozwiązywać problemy z archiwizacją e-mail dla zgodności z przepisami i wymogów dotyczących przechowywania danych. To, co musimy teraz zrobić, to zapewnić jakiś sposób na wstrzykiwanie w pełni uformowanych wiadomości S/MIME do twoich serwerów.

2. Wstrzyknięcie SMTP w kierunku Port25 PowerMTA

PowerMTA obsługuje różne sposoby wprowadzania wiadomości, w tym katalog "odbioru" plików, SMTP i API. Metoda używana tutaj to SMTP.

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

export SMTP_HOST=localhost

(Jeśli zapomnisz o tym kroku, zobaczysz: „Environment var SMTP_HOST not set – stopping” kiedy spróbujesz uruchomić.)


Posiadamy już klucz prywatny nadawcy (steve@thetucks.com.pem) i klucz publiczny odbiorcy (steve.tuck@sparkpost.com.crt). Pierwsze kilka linii pliku wiadomości to:

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ść za pomocą:

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


Widzimy:

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 dociera 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.


Bonus feature: DKIM z PowerMTA

DKIM jest dość łatwy do skonfigurowania i współistnieje szczęśliwie z S/MIME. Kroki to:

  • Użyj witryny DKIM Wizard PowerMTA do stworzenia klucza prywatnego domeny wysyłającej (w moim przypadku, mypmta.thetucks.com.pem) i treści rekordu DNS TXT.

  • Skonfiguruj rekord DNS TXT z wybranym selektorem. Na przykład użyłem selektora pmta201811. Prawidłowe znaki selektora są zdefiniowane tutaj.

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

  • Dodaj poniższe do mojego /etc/pmta/config i uruchom ponownie usługę pmta. (Tutaj te dyrektywy są zapisane w zakresie globalnym; w systemie produkcyjnym można je dodać pod virtual-mta zamiast tego.)


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


Rekord DNS jest poprawny według 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 sposoby wprowadzania wiadomości, w tym katalog "odbioru" plików, SMTP i API. Metoda używana tutaj to SMTP.

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

export SMTP_HOST=localhost

(Jeśli zapomnisz o tym kroku, zobaczysz: „Environment var SMTP_HOST not set – stopping” kiedy spróbujesz uruchomić.)


Posiadamy już klucz prywatny nadawcy (steve@thetucks.com.pem) i klucz publiczny odbiorcy (steve.tuck@sparkpost.com.crt). Pierwsze kilka linii pliku wiadomości to:

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ść za pomocą:

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


Widzimy:

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 dociera 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.


Bonus feature: DKIM z PowerMTA

DKIM jest dość łatwy do skonfigurowania i współistnieje szczęśliwie z S/MIME. Kroki to:

  • Użyj witryny DKIM Wizard PowerMTA do stworzenia klucza prywatnego domeny wysyłającej (w moim przypadku, mypmta.thetucks.com.pem) i treści rekordu DNS TXT.

  • Skonfiguruj rekord DNS TXT z wybranym selektorem. Na przykład użyłem selektora pmta201811. Prawidłowe znaki selektora są zdefiniowane tutaj.

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

  • Dodaj poniższe do mojego /etc/pmta/config i uruchom ponownie usługę pmta. (Tutaj te dyrektywy są zapisane w zakresie globalnym; w systemie produkcyjnym można je dodać pod virtual-mta zamiast tego.)


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


Rekord DNS jest poprawny według 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 sposoby wprowadzania wiadomości, w tym katalog "odbioru" plików, SMTP i API. Metoda używana tutaj to SMTP.

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

export SMTP_HOST=localhost

(Jeśli zapomnisz o tym kroku, zobaczysz: „Environment var SMTP_HOST not set – stopping” kiedy spróbujesz uruchomić.)


Posiadamy już klucz prywatny nadawcy (steve@thetucks.com.pem) i klucz publiczny odbiorcy (steve.tuck@sparkpost.com.crt). Pierwsze kilka linii pliku wiadomości to:

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ść za pomocą:

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


Widzimy:

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 dociera 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.


Bonus feature: DKIM z PowerMTA

DKIM jest dość łatwy do skonfigurowania i współistnieje szczęśliwie z S/MIME. Kroki to:

  • Użyj witryny DKIM Wizard PowerMTA do stworzenia klucza prywatnego domeny wysyłającej (w moim przypadku, mypmta.thetucks.com.pem) i treści rekordu DNS TXT.

  • Skonfiguruj rekord DNS TXT z wybranym selektorem. Na przykład użyłem selektora pmta201811. Prawidłowe znaki selektora są zdefiniowane tutaj.

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

  • Dodaj poniższe do mojego /etc/pmta/config i uruchom ponownie usługę pmta. (Tutaj te dyrektywy są zapisane w zakresie globalnym; w systemie produkcyjnym można je dodać pod virtual-mta zamiast tego.)


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


Rekord DNS jest poprawny według MX Toolbox i DKIM jest teraz aktywny.

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

3. SMTP Injection wobec Momentum

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

To jest mniejsza wersja ustawienia produkcyjnego, gdzie węzły „generacyjne” i węzły MTA są oddzielne, ale ściśle połączone przez prywatną VLAN i load-balancery, przenoszące wewnętrzny ruch SMTP injection.


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 wstrzykujemy 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 już klucz prywatny nadawcy (steve@thetucks.com.pem) i klucz publiczny odbiorcy (steve.tuck@sparkpost.com.crt) obecne na węźle „generacyjnym”. Pierwsze kilka linii pliku wiadomości odpowiada tym adresom.

Wysyłamy wiadomość z węzła „generacyjnego” dokładnie tą samą komendą co wcześniej, a wiadomość pojawia się w inbox.

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

Jak można się spodziewać, S/MIME także chętnie współistnieje z DKIM signing z Momentum.

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

To jest mniejsza wersja ustawienia produkcyjnego, gdzie węzły „generacyjne” i węzły MTA są oddzielne, ale ściśle połączone przez prywatną VLAN i load-balancery, przenoszące wewnętrzny ruch SMTP injection.


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 wstrzykujemy 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 już klucz prywatny nadawcy (steve@thetucks.com.pem) i klucz publiczny odbiorcy (steve.tuck@sparkpost.com.crt) obecne na węźle „generacyjnym”. Pierwsze kilka linii pliku wiadomości odpowiada tym adresom.

Wysyłamy wiadomość z węzła „generacyjnego” dokładnie tą samą komendą co wcześniej, a wiadomość pojawia się w inbox.

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

Jak można się spodziewać, S/MIME także chętnie współistnieje z DKIM signing z Momentum.

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

To jest mniejsza wersja ustawienia produkcyjnego, gdzie węzły „generacyjne” i węzły MTA są oddzielne, ale ściśle połączone przez prywatną VLAN i load-balancery, przenoszące wewnętrzny ruch SMTP injection.


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 wstrzykujemy 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 już klucz prywatny nadawcy (steve@thetucks.com.pem) i klucz publiczny odbiorcy (steve.tuck@sparkpost.com.crt) obecne na węźle „generacyjnym”. Pierwsze kilka linii pliku wiadomości odpowiada tym adresom.

Wysyłamy wiadomość z węzła „generacyjnego” dokładnie tą samą komendą co wcześniej, a wiadomość pojawia się w inbox.

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

Jak można się spodziewać, S/MIME także chętnie współistnieje z DKIM signing z Momentum.

4. SMTP injection towards SparkPost

W części 2 użyliśmy SparkPost transmissions REST API 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 używasz SparkPost usługi hostowanej w UE, ustaw SMTP_HOST jako smtp.eu.sparkpostmail.com.
(Zobacz tutaj po więcej opcji – na przykład możesz wstrzykiwać przez port 2525 zamiast 587.)

Wyjście poniżej pokazuje użycie 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 zastępczymi znakami ***, więc nie narażasz prywatności swojego klucza, jeśli ktoś patrzy ci przez ramię.

Zabezpieczanie Twoich Poświadczeń

Pamiętaj, że zmienne środowiskowe mogą być ustawione w pliku skryptu powłoki lub podobnie, aby zaoszczędzić czas na ponowne wpisywanie. Jeśli tak zrobisz, proszę zadbaj o swoje hasła/klucze API, ograniczając dostęp do tego pliku tylko dla siebie. Na przykład, jeśli nazwiesz swój plik ustawień poświadczeń my_envs.sh, uruchom:

chmod 0700 my_envs.sh


Ostrzeżenia Związane z SMTP, które Możesz Zobaczyć

SMTP injection SparkPost jest dość surowe, jak można się spodziewać po publicznej usłudze. Jeśli nie ustawiłeś numeru portu SMTP, zobaczysz ostrzeżenie:

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


Jeśli nie ustawiłeś nazwy użytkownika SMTP lub nie ustawiłeś 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 zgłaszane tak, jak są, z biblioteki Python SMTP, stąd formatowanie.

W części 2 użyliśmy SparkPost transmissions REST API 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 używasz SparkPost usługi hostowanej w UE, ustaw SMTP_HOST jako smtp.eu.sparkpostmail.com.
(Zobacz tutaj po więcej opcji – na przykład możesz wstrzykiwać przez port 2525 zamiast 587.)

Wyjście poniżej pokazuje użycie 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 zastępczymi znakami ***, więc nie narażasz prywatności swojego klucza, jeśli ktoś patrzy ci przez ramię.

Zabezpieczanie Twoich Poświadczeń

Pamiętaj, że zmienne środowiskowe mogą być ustawione w pliku skryptu powłoki lub podobnie, aby zaoszczędzić czas na ponowne wpisywanie. Jeśli tak zrobisz, proszę zadbaj o swoje hasła/klucze API, ograniczając dostęp do tego pliku tylko dla siebie. Na przykład, jeśli nazwiesz swój plik ustawień poświadczeń my_envs.sh, uruchom:

chmod 0700 my_envs.sh


Ostrzeżenia Związane z SMTP, które Możesz Zobaczyć

SMTP injection SparkPost jest dość surowe, jak można się spodziewać po publicznej usłudze. Jeśli nie ustawiłeś numeru portu SMTP, zobaczysz ostrzeżenie:

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


Jeśli nie ustawiłeś nazwy użytkownika SMTP lub nie ustawiłeś 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 zgłaszane tak, jak są, z biblioteki Python SMTP, stąd formatowanie.

W części 2 użyliśmy SparkPost transmissions REST API 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 używasz SparkPost usługi hostowanej w UE, ustaw SMTP_HOST jako smtp.eu.sparkpostmail.com.
(Zobacz tutaj po więcej opcji – na przykład możesz wstrzykiwać przez port 2525 zamiast 587.)

Wyjście poniżej pokazuje użycie 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 zastępczymi znakami ***, więc nie narażasz prywatności swojego klucza, jeśli ktoś patrzy ci przez ramię.

Zabezpieczanie Twoich Poświadczeń

Pamiętaj, że zmienne środowiskowe mogą być ustawione w pliku skryptu powłoki lub podobnie, aby zaoszczędzić czas na ponowne wpisywanie. Jeśli tak zrobisz, proszę zadbaj o swoje hasła/klucze API, ograniczając dostęp do tego pliku tylko dla siebie. Na przykład, jeśli nazwiesz swój plik ustawień poświadczeń my_envs.sh, uruchom:

chmod 0700 my_envs.sh


Ostrzeżenia Związane z SMTP, które Możesz Zobaczyć

SMTP injection SparkPost jest dość surowe, jak można się spodziewać po publicznej usłudze. Jeśli nie ustawiłeś numeru portu SMTP, zobaczysz ostrzeżenie:

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


Jeśli nie ustawiłeś nazwy użytkownika SMTP lub nie ustawiłeś 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 zgłaszane tak, jak są, z biblioteki Python SMTP, stąd formatowanie.

Który jest szybszy – SMTP czy API?

Porównanie wydajności

Oto szybki podział testów wydajności:

Pomiary

SMTP

API

Uwagi

Mały plik (~19 KB)

~60 ms

~60 ms

Praktycznie identyczna wydajność

Duży plik (~577 KB)

~280 ms

~200 ms

API nieco szybsze przy większych ładunkach

Szczerze mówiąc, S/MIME raczej nie będzie przypadkiem używania na dużą skalę, ale posiadanie tego samego narzędzia z dwiema opcjami wyjścia wręcz wymagało od nas przeprowadzenia wyścigu!

Testowy plik email „Avocado” użyty tutaj ma około 19KB. Powtórzenie testów 10 razy za pomocą pętli bash wykazało, że średnie czasy są podobne dla SMTP i API, wynoszą około 60 milisekund na wiadomość, co jest dość szybkie. W tym przypadku wstrzykiwaliśmy z średniej instancji EC2 w tym samym regionie hostingowym co SparkPost.com, co jest dobrą metodą na utrzymanie niskich czasów okrążenia sieci.

Powtarzając to z większym plikiem testowym (577KB), API zajęło około 200 milisekund, podczas gdy SMTP zajęło 280 milisekund na wiadomość – nadal imponujące dla rozmiaru pliku 30x większego. Oczywiście, wyniki mogą się różnić w zależności od lokalizacji, obciążenia internetu 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 wstrzykujących zgodnie z naszymi zaleceniami najlepszych praktyk transmisji – np. z zadania nadzorcy.

Porównanie wydajności

Oto szybki podział testów wydajności:

Pomiary

SMTP

API

Uwagi

Mały plik (~19 KB)

~60 ms

~60 ms

Praktycznie identyczna wydajność

Duży plik (~577 KB)

~280 ms

~200 ms

API nieco szybsze przy większych ładunkach

Szczerze mówiąc, S/MIME raczej nie będzie przypadkiem używania na dużą skalę, ale posiadanie tego samego narzędzia z dwiema opcjami wyjścia wręcz wymagało od nas przeprowadzenia wyścigu!

Testowy plik email „Avocado” użyty tutaj ma około 19KB. Powtórzenie testów 10 razy za pomocą pętli bash wykazało, że średnie czasy są podobne dla SMTP i API, wynoszą około 60 milisekund na wiadomość, co jest dość szybkie. W tym przypadku wstrzykiwaliśmy z średniej instancji EC2 w tym samym regionie hostingowym co SparkPost.com, co jest dobrą metodą na utrzymanie niskich czasów okrążenia sieci.

Powtarzając to z większym plikiem testowym (577KB), API zajęło około 200 milisekund, podczas gdy SMTP zajęło 280 milisekund na wiadomość – nadal imponujące dla rozmiaru pliku 30x większego. Oczywiście, wyniki mogą się różnić w zależności od lokalizacji, obciążenia internetu 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 wstrzykujących zgodnie z naszymi zaleceniami najlepszych praktyk transmisji – np. z zadania nadzorcy.

Porównanie wydajności

Oto szybki podział testów wydajności:

Pomiary

SMTP

API

Uwagi

Mały plik (~19 KB)

~60 ms

~60 ms

Praktycznie identyczna wydajność

Duży plik (~577 KB)

~280 ms

~200 ms

API nieco szybsze przy większych ładunkach

Szczerze mówiąc, S/MIME raczej nie będzie przypadkiem używania na dużą skalę, ale posiadanie tego samego narzędzia z dwiema opcjami wyjścia wręcz wymagało od nas przeprowadzenia wyścigu!

Testowy plik email „Avocado” użyty tutaj ma około 19KB. Powtórzenie testów 10 razy za pomocą pętli bash wykazało, że średnie czasy są podobne dla SMTP i API, wynoszą około 60 milisekund na wiadomość, co jest dość szybkie. W tym przypadku wstrzykiwaliśmy z średniej instancji EC2 w tym samym regionie hostingowym co SparkPost.com, co jest dobrą metodą na utrzymanie niskich czasów okrążenia sieci.

Powtarzając to z większym plikiem testowym (577KB), API zajęło około 200 milisekund, podczas gdy SMTP zajęło 280 milisekund na wiadomość – nadal imponujące dla rozmiaru pliku 30x większego. Oczywiście, wyniki mogą się różnić w zależności od lokalizacji, obciążenia internetu 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 wstrzykujących zgodnie z naszymi zaleceniami najlepszych praktyk transmisji – np. z zadania nadzorcy.

Podsumowując …

Widzieliśmy, jak narzędzie oparte na SparkPost API używane w Części 2 zostało zaktualizowane, aby obsługiwać zastrzyk SMTP w celu wsparcia lokalnych MTA, takich jak Port25 PowerMTA i Momentum w różnych konfiguracjach, jak również z SparkPost.

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

Widzieliśmy, jak narzędzie oparte na SparkPost API używane w Części 2 zostało zaktualizowane, aby obsługiwać zastrzyk SMTP w celu wsparcia lokalnych MTA, takich jak Port25 PowerMTA i Momentum w różnych konfiguracjach, jak również z SparkPost.

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

Widzieliśmy, jak narzędzie oparte na SparkPost API używane w Części 2 zostało zaktualizowane, aby obsługiwać zastrzyk SMTP w celu wsparcia lokalnych MTA, takich jak Port25 PowerMTA i Momentum w różnych konfiguracjach, jak również z SparkPost.

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

Inne wiadomości

Czytaj więcej z tej kategorii

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

Kompletna, natywna dla AI platforma, która rośnie wraz z Twoim biznesem.

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

Kompletna, natywna dla AI platforma, która rośnie wraz z Twoim biznesem.