
In questa parte, vedremo come lo strumento può essere adattato per iniettare flussi di posta in piattaforme on-premises come PowerMTA e Momentum.
Business in a box.
Scopri le nostre soluzioni.
Parla con il nostro team di vendita
In part 1, abbiamo fatto un rapido tour di S/MIME, osservando la firma e la crittografia dei nostri flussi di messaggi su una gamma di client di posta. Part 2 ci ha guidato attraverso un semplice strumento da riga di comando per firmare e crittografare le email, quindi inviarle tramite SparkPost.
In questa parte, vedremo come lo strumento può essere adattato per iniettare flussi di posta in piattaforme locali come Port25 PowerMTA e Momentum.
OK – iniziamo!
1. Getting Started
Installare lo strumento, ottenere le chiavi ecc. è esattamente lo stesso di prima. Quando si utilizza un sistema di email on-premises come PowerMTA o Momentum, si è già responsabili per la configurazione dei domini di invio, delle chiavi DKIM ecc. Quello che dobbiamo fare ora è fornire un modo per iniettare i messaggi S/MIME completamente formati nei vostri server.
2. SMTP injection verso Port25 PowerMTA
3. SMTP Injection Verso Momentum
Momentum supports various means of message injection, including API and SMTP. SMTP is the method used here, towards a host already running Momentum. We’ll leave its configuration unchanged, as it already has a capability to accept incoming injections from other approved hosts.
This is a smaller version of a production setup, where “generation” nodes and MTA nodes are separate, yet closely coupled via a private VLAN and load-balancers, carrying internal SMTP injection traffic.

The S/MIME tools are installed as before, and we will inject messages to the address of the SMTP host (MTA):
export SMTP_HOST=xx.xx.xx.xx # set your own MTA / VIP address here
As before, we have the sender’s private key (steve@thetucks.com.pem) and the recipient’s public key (steve.tuck@sparkpost.com.crt) already present on the “generation” node. The first few lines of the message file match these addresses.
We send the message from the “generation” node with exactly the same command as before, and the message shows up in the inbox.
./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp
As you’d expect, S/MIME also happily coexists with Momentum’s DKIM signing.
4. SMTP injection verso SparkPost
In part 2 abbiamo utilizzato l'API REST di SparkPost transmissions per inviare messaggi. Naturalmente, è anche possibile inviare messaggi in SparkPost utilizzando SMTP. Impostiamo le variabili d'ambiente in questo modo:
export SMTP_PASSWORD=<<YOUR API KEY HERE>> export SMTP_HOST=smtp.sparkpostmail.com export SMTP_USER=SMTP_Injection export SMTP_PORT=587
Se stai utilizzando il servizio ospitato nell'UE di SparkPost, imposta SMTP_HOST come smtp.eu.sparkpostmail.com.
(Vedi qui per altre opzioni – ad esempio puoi inviare sulla porta 2525 invece di 587.)
L'output sotto mostra che viene utilizzato STARTTLS, insieme al nome utente e alla password.
./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp
Vedrai:
Aperta connessione SMTP (STARTTLS) a smtp.sparkpostmail.com, porta 587, utente="SMTP_Injection", password="****************************************" Inviando tests/fancy-HTML-to-smt.eml Da: Steve <steve@thetucks.com> A: SteveT <steve.tuck@sparkpost.com> OK - in 0.057 secondi
La password viene stampata con caratteri sostitutivi ***, quindi non comprometti la privacy della tua chiave se qualcuno sta guardando sopra la tua spalla.
Proteggere le tue Credenziali
Nota che le variabili d'ambiente potrebbero essere impostate in un file di script shell o simile, per evitare di ridigitare. Se lo fai, per favore proteggi le tue password/chiavi API limitando l'accesso a quel file solo a te stesso. Ad esempio, se il tuo file di configurazione delle credenziali si chiama my_envs.sh, esegui:
chmod 0700 my_envs.sh
Avvertenze Relativamente all'SMTP che Potresti Vedere
L'iniezione SMTP di SparkPost è piuttosto rigorosa, come ci si aspetterebbe da un servizio pubblico. Se non hai impostato il numero di porta SMTP, vedrai un avviso:
{'bob.lumreeker@gmail.com': (550, b'5.7.1 relaying denied')}
Se non hai impostato il nome utente SMTP o non hai impostato la password, vedrai:
(530, b'5.7.1 Authorization required. Ref. https://developers.sparkpost.com/api/index#header-smtp-relay-endpoints', 'steve@thetucks.com')
Questi messaggi di errore vengono semplicemente riportati così come sono dalla libreria SMTP di Python, da cui la formattazione.
Quale è più veloce – SMTP o API?
Francamente, S/MIME è improbabile che sia un caso d'uso ad alto volume, ma avere lo stesso strumento con due opzioni di output era una sfida da affrontare!
Il file di test email “Avocado” utilizzato qui è di circa 19KB. Ripetendo i test 10 volte tramite un loop bash, i tempi medi risultavano simili per SMTP e API, circa 60 millisecondi per messaggio, il che è piuttosto veloce. In questo caso, abbiamo iniettato da un'istanza EC2 media nella stessa regione di hosting di SparkPost.com, che è un buon modo per mantenere bassi i tempi di andata e ritorno della rete.
Ripetendo questo con un file di test più grande (577KB), l'API ha impiegato circa 200 millisecondi, mentre SMTP ha impiegato 280 millisecondi per messaggio – ancora impressionante per una dimensione del file 30 volte più grande. Naturalmente, le tue prestazioni possono variare a seconda della posizione, della congestione di internet, ecc., ma è improbabile che le prestazioni rappresentino un problema.
Se hai davvero bisogno delle massime prestazioni, un buon punto di partenza sarebbe avviare un numero definito di processi/sessioni di iniezione concorrenti secondo le nostre raccomandazioni sulle pratiche migliori di trasmissione - ad esempio, da un'attività supervisore.