S/MIME Parte 3: Plug and Play per Email Sicuro On-Premises

Uccello

1 dic 2019

Email

1 min read

S/MIME Parte 3: Plug and Play per Email Sicuro On-Premises

Punti Chiave

    • Integrazione S/MIME per MTA on-premises: scopri come iniettare flussi di email firmati e crittografati in PowerMTA, Momentum o SparkPost SMTP mantenendo le configurazioni DKIM e di conformità esistenti.

    • Modello di sicurezza ibrido: combina crittografia S/MIME + firma DKIM per garantire sia l'autenticità del messaggio che la privacy del contenuto in ambienti regolamentati.

    • Flusso di distribuzione: configura le variabili ambientali (SMTP_HOST, credenziali, chiavi), esegui il flusso di lavoro --sign --encrypt --send_smtp e convalida i report di consegna.

    • Approfondimenti sulle prestazioni: i test mostrano una velocità quasi identica per l'iniezione SMTP rispetto all'API (~60 ms per messaggio, 200–280 ms per file di dimensioni maggiori).

    • Migliori pratiche di sicurezza: memorizza chiavi private e password API in file riservati (chmod 0700), utilizza STARTTLS e sessioni SMTP autenticate.

    • Casi d'uso: le imprese che modernizzano i sistemi di posta legacy possono estendere la crittografia end-to-end senza abbandonare l'infrastruttura esistente.

Punti salienti del Q&A

  • Perché adattare S/MIME per server on-prem invece di API cloud?

    Molti settori regolamentati (bancario e sanitario) devono mantenere la posta in loco. Questo approccio mantiene il controllo sul flusso dei messaggi aggiungendo una protezione crittografica moderna.

  • Come funziona l'iniezione SMTP con PowerMTA o Momentum?

    Inietti messaggi S/MIME completamente formati al listener locale (porta 25 o VLAN privata). Questi MTA gestiscono quindi la firma DKIM e la consegna come di consueto.

  • È S/MIME compatibile con DKIM?

    Sì — DKIM firma il messaggio dopo la crittografia S/MIME, quindi i controlli di autenticazione e integrità rimangono intatti.

  • Come posso proteggere le mie credenziali e le mie chiavi SMTP?

    Esporta le variabili d'ambiente solo in script bloccati e utilizza i permessi dei file per limitare l'accesso a te stesso (chmod 0700 my_envs.sh).

  • Cosa dovrei monitorare dopo la configurazione?

    Latenza di consegna (API vs SMTP), tasso di successo della stretta di mano TLS, risultati della convalida DKIM/S-MIME e registri di errore per "inoltro negato" o autenticazione mancante.

  • Chi beneficia di più da questa configurazione?

    Organizzazioni che gestiscono gateway di posta auto-ospitati che richiedono crittografia di livello di conformità e vogliono strumenti plug-and-play senza dover riscrivere i pipeline di posta.

Nel parte 1, abbiamo fatto un breve tour di S/MIME, esaminando la firma e la crittografia dei nostri flussi di messaggi attraverso una gamma di client di posta. Per le organizzazioni che implementano la crittografia S/MIME, comprendere come raccogliere efficientemente le chiavi pubbliche dei destinatari diventa cruciale per operazioni email sicure e scalabili. Parte 2 ci ha portato attraverso un semplice strumento da riga di comando per firmare e crittografare le email, per poi inviarle tramite SparkPost.

In questa parte, vedremo come lo strumento può essere adattato per iniettare flussi di posta in piattaforme on-premises come Port25 PowerMTA e Momentum.

OK – iniziamo!

Nel parte 1, abbiamo fatto un breve tour di S/MIME, esaminando la firma e la crittografia dei nostri flussi di messaggi attraverso una gamma di client di posta. Per le organizzazioni che implementano la crittografia S/MIME, comprendere come raccogliere efficientemente le chiavi pubbliche dei destinatari diventa cruciale per operazioni email sicure e scalabili. Parte 2 ci ha portato attraverso un semplice strumento da riga di comando per firmare e crittografare le email, per poi inviarle tramite SparkPost.

In questa parte, vedremo come lo strumento può essere adattato per iniettare flussi di posta in piattaforme on-premises come Port25 PowerMTA e Momentum.

OK – iniziamo!

Nel parte 1, abbiamo fatto un breve tour di S/MIME, esaminando la firma e la crittografia dei nostri flussi di messaggi attraverso una gamma di client di posta. Per le organizzazioni che implementano la crittografia S/MIME, comprendere come raccogliere efficientemente le chiavi pubbliche dei destinatari diventa cruciale per operazioni email sicure e scalabili. Parte 2 ci ha portato attraverso un semplice strumento da riga di comando per firmare e crittografare le email, per poi inviarle tramite SparkPost.

In questa parte, vedremo come lo strumento può essere adattato per iniettare flussi di posta in piattaforme on-premises come Port25 PowerMTA e Momentum.

OK – iniziamo!

1. Iniziare

Installare lo strumento, ottenere le tue chiavi ecc. è esattamente lo stesso di prima. Quando usi un sistema di posta elettronica on-premises come PowerMTA o Momentum, sei già responsabile per la configurazione dei domini di invio, delle chiavi DKIM ecc. Le organizzazioni che utilizzano sistemi on-premises devono spesso affrontare anche le sfide dei sistemi di archiviazione delle email per la conformità normativa e i requisiti di retention dei dati. Ciò che dobbiamo fare ora è fornire un modo per iniettare i messaggi S/MIME completamente formati nei tuoi server.

Installare lo strumento, ottenere le tue chiavi ecc. è esattamente lo stesso di prima. Quando usi un sistema di posta elettronica on-premises come PowerMTA o Momentum, sei già responsabile per la configurazione dei domini di invio, delle chiavi DKIM ecc. Le organizzazioni che utilizzano sistemi on-premises devono spesso affrontare anche le sfide dei sistemi di archiviazione delle email per la conformità normativa e i requisiti di retention dei dati. Ciò che dobbiamo fare ora è fornire un modo per iniettare i messaggi S/MIME completamente formati nei tuoi server.

Installare lo strumento, ottenere le tue chiavi ecc. è esattamente lo stesso di prima. Quando usi un sistema di posta elettronica on-premises come PowerMTA o Momentum, sei già responsabile per la configurazione dei domini di invio, delle chiavi DKIM ecc. Le organizzazioni che utilizzano sistemi on-premises devono spesso affrontare anche le sfide dei sistemi di archiviazione delle email per la conformità normativa e i requisiti di retention dei dati. Ciò che dobbiamo fare ora è fornire un modo per iniettare i messaggi S/MIME completamente formati nei tuoi server.

2. Iniezione SMTP verso Port25 PowerMTA

PowerMTA supporta vari metodi di iniezione dei messaggi, incluso un directory di "ritiro" dei file, SMTP e un'API. SMTP è il metodo utilizzato qui.

Per illustrare la configurazione più semplice possibile, installeremo gli strumenti S/MIME sullo stesso server di PowerMTA. Iniettiamo messaggi all'ascoltatore, che è aperto per impostazione predefinita sulla porta TCP 25, accettando solo traffico locale.

export SMTP_HOST=localhost

(Se dimentichi quel passaggio, vedrai: “Variabile di ambiente SMTP_HOST non impostata – arresto” quando provi a eseguire.)


Abbiamo la chiave privata del mittente (steve@thetucks.com.pem) e la chiave pubblica del destinatario (steve.tuck@sparkpost.com.crt) già presenti. Le prime righe del file di messaggio sono:

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


Inviamo il messaggio con:

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


Vediamo:

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


Il messaggio arriva rapidamente nella posta in arrivo e riporta in Mac Mail come firmato e crittografato.

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


Funzionalità bonus: DKIM con PowerMTA

DKIM è piuttosto facile da configurare e coesiste felicemente con S/MIME. I passaggi sono:

  • Utilizza il sito DKIM Wizard di PowerMTA per creare la chiave privata del dominio di invio (nel mio caso, mypmta.thetucks.com.pem) e i contenuti del record DNS TXT pubblico.

  • Configura il record DNS TXT, con un selettore scelto. Ad esempio, ho usato il selettore pmta201811. I caratteri del selettore validi sono definiti qui.

  • Metti il file mypmta.thetucks.com.pem sul server nella directory /etc/pmta .

  • Aggiungi quanto segue al mio /etc/pmta/config e riavvia il servizio pmta. (Qui, queste direttive sono scritte a livello globale; su un sistema di produzione, potresti preferire aggiungerle sotto un virtual-mta invece.)


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


Il record DNS è stato verificato correttamente tramite MX Toolbox, e DKIM è ora attivo.

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

PowerMTA supporta vari metodi di iniezione dei messaggi, incluso un directory di "ritiro" dei file, SMTP e un'API. SMTP è il metodo utilizzato qui.

Per illustrare la configurazione più semplice possibile, installeremo gli strumenti S/MIME sullo stesso server di PowerMTA. Iniettiamo messaggi all'ascoltatore, che è aperto per impostazione predefinita sulla porta TCP 25, accettando solo traffico locale.

export SMTP_HOST=localhost

(Se dimentichi quel passaggio, vedrai: “Variabile di ambiente SMTP_HOST non impostata – arresto” quando provi a eseguire.)


Abbiamo la chiave privata del mittente (steve@thetucks.com.pem) e la chiave pubblica del destinatario (steve.tuck@sparkpost.com.crt) già presenti. Le prime righe del file di messaggio sono:

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


Inviamo il messaggio con:

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


Vediamo:

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


Il messaggio arriva rapidamente nella posta in arrivo e riporta in Mac Mail come firmato e crittografato.

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


Funzionalità bonus: DKIM con PowerMTA

DKIM è piuttosto facile da configurare e coesiste felicemente con S/MIME. I passaggi sono:

  • Utilizza il sito DKIM Wizard di PowerMTA per creare la chiave privata del dominio di invio (nel mio caso, mypmta.thetucks.com.pem) e i contenuti del record DNS TXT pubblico.

  • Configura il record DNS TXT, con un selettore scelto. Ad esempio, ho usato il selettore pmta201811. I caratteri del selettore validi sono definiti qui.

  • Metti il file mypmta.thetucks.com.pem sul server nella directory /etc/pmta .

  • Aggiungi quanto segue al mio /etc/pmta/config e riavvia il servizio pmta. (Qui, queste direttive sono scritte a livello globale; su un sistema di produzione, potresti preferire aggiungerle sotto un virtual-mta invece.)


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


Il record DNS è stato verificato correttamente tramite MX Toolbox, e DKIM è ora attivo.

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

PowerMTA supporta vari metodi di iniezione dei messaggi, incluso un directory di "ritiro" dei file, SMTP e un'API. SMTP è il metodo utilizzato qui.

Per illustrare la configurazione più semplice possibile, installeremo gli strumenti S/MIME sullo stesso server di PowerMTA. Iniettiamo messaggi all'ascoltatore, che è aperto per impostazione predefinita sulla porta TCP 25, accettando solo traffico locale.

export SMTP_HOST=localhost

(Se dimentichi quel passaggio, vedrai: “Variabile di ambiente SMTP_HOST non impostata – arresto” quando provi a eseguire.)


Abbiamo la chiave privata del mittente (steve@thetucks.com.pem) e la chiave pubblica del destinatario (steve.tuck@sparkpost.com.crt) già presenti. Le prime righe del file di messaggio sono:

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


Inviamo il messaggio con:

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


Vediamo:

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


Il messaggio arriva rapidamente nella posta in arrivo e riporta in Mac Mail come firmato e crittografato.

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


Funzionalità bonus: DKIM con PowerMTA

DKIM è piuttosto facile da configurare e coesiste felicemente con S/MIME. I passaggi sono:

  • Utilizza il sito DKIM Wizard di PowerMTA per creare la chiave privata del dominio di invio (nel mio caso, mypmta.thetucks.com.pem) e i contenuti del record DNS TXT pubblico.

  • Configura il record DNS TXT, con un selettore scelto. Ad esempio, ho usato il selettore pmta201811. I caratteri del selettore validi sono definiti qui.

  • Metti il file mypmta.thetucks.com.pem sul server nella directory /etc/pmta .

  • Aggiungi quanto segue al mio /etc/pmta/config e riavvia il servizio pmta. (Qui, queste direttive sono scritte a livello globale; su un sistema di produzione, potresti preferire aggiungerle sotto un virtual-mta invece.)


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


Il record DNS è stato verificato correttamente tramite MX Toolbox, e DKIM è ora attivo.

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

3. Iniezione SMTP verso Momentum

Momentum supporta vari mezzi di iniezione dei messaggi, inclusi API e SMTP. SMTP è il metodo utilizzato qui, verso un host già in esecuzione con Momentum. Lasceremo la sua configurazione invariata, poiché ha già una capacità di accettare iniezioni in arrivo da altri host approvati.

Questa è una versione più piccola di una configurazione di produzione, dove i nodi di “generazione” e i nodi MTA sono separati, ma strettamente collegati tramite una VLAN privata e bilanciatori di carico, che gestiscono il traffico di iniezione SMTP interno.


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


Gli strumenti S/MIME sono installati come prima, e inietteremo messaggi all'indirizzo dell'host SMTP (MTA):

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

Come prima, abbiamo la chiave privata del mittente (steve@thetucks.com.pem) e la chiave pubblica del destinatario (steve.tuck@sparkpost.com.crt) già presenti sul nodo di “generazione”. Le prime righe del file di messaggio corrispondono a questi indirizzi.

Inviamo il messaggio dal nodo di “generazione” con esattamente lo stesso comando di prima, e il messaggio appare nella casella di posta.

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

Come ci si aspetterebbe, S/MIME coesiste felicemente anche con la firma DKIM di Momentum.

Momentum supporta vari mezzi di iniezione dei messaggi, inclusi API e SMTP. SMTP è il metodo utilizzato qui, verso un host già in esecuzione con Momentum. Lasceremo la sua configurazione invariata, poiché ha già una capacità di accettare iniezioni in arrivo da altri host approvati.

Questa è una versione più piccola di una configurazione di produzione, dove i nodi di “generazione” e i nodi MTA sono separati, ma strettamente collegati tramite una VLAN privata e bilanciatori di carico, che gestiscono il traffico di iniezione SMTP interno.


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


Gli strumenti S/MIME sono installati come prima, e inietteremo messaggi all'indirizzo dell'host SMTP (MTA):

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

Come prima, abbiamo la chiave privata del mittente (steve@thetucks.com.pem) e la chiave pubblica del destinatario (steve.tuck@sparkpost.com.crt) già presenti sul nodo di “generazione”. Le prime righe del file di messaggio corrispondono a questi indirizzi.

Inviamo il messaggio dal nodo di “generazione” con esattamente lo stesso comando di prima, e il messaggio appare nella casella di posta.

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

Come ci si aspetterebbe, S/MIME coesiste felicemente anche con la firma DKIM di Momentum.

Momentum supporta vari mezzi di iniezione dei messaggi, inclusi API e SMTP. SMTP è il metodo utilizzato qui, verso un host già in esecuzione con Momentum. Lasceremo la sua configurazione invariata, poiché ha già una capacità di accettare iniezioni in arrivo da altri host approvati.

Questa è una versione più piccola di una configurazione di produzione, dove i nodi di “generazione” e i nodi MTA sono separati, ma strettamente collegati tramite una VLAN privata e bilanciatori di carico, che gestiscono il traffico di iniezione SMTP interno.


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


Gli strumenti S/MIME sono installati come prima, e inietteremo messaggi all'indirizzo dell'host SMTP (MTA):

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

Come prima, abbiamo la chiave privata del mittente (steve@thetucks.com.pem) e la chiave pubblica del destinatario (steve.tuck@sparkpost.com.crt) già presenti sul nodo di “generazione”. Le prime righe del file di messaggio corrispondono a questi indirizzi.

Inviamo il messaggio dal nodo di “generazione” con esattamente lo stesso comando di prima, e il messaggio appare nella casella di posta.

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

Come ci si aspetterebbe, S/MIME coesiste felicemente anche con la firma DKIM di Momentum.

4. Iniezione SMTP verso SparkPost

Nel parte 2 abbiamo utilizzato l'API REST delle trasmissioni di SparkPost per iniettare messaggi. Naturalmente, è possibile iniettare messaggi in SparkPost anche utilizzando SMTP. Abbiamo impostato le variabili ambiente in questo modo:

export SMTP_PASSWORD=<<YOUR_API_KEY_HERE>

Se stai utilizzando il servizio ospitato in UE di SparkPost, imposta SMTP_HOST come smtp.eu.sparkpostmail.com.
(Vedi qui per ulteriori opzioni – ad esempio puoi iniettare sulla porta 2525 invece di 587.)

Il seguente output mostra che STARTTLS è utilizzato, insieme al nome utente e alla password.

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


Vedrai:

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

La password viene stampata con caratteri sostitutivi ***, quindi non comprometti la privacy della tua chiave se qualcuno ti sta guardando.

Proteggere le tue credenziali

Nota che le variabili ambiente possono essere impostate in un file di script shell o simile, per risparmiare tempo di riscrittura. Se lo fai, ti preghiamo di proteggere le tue password/API key limitando l'accesso a quel file solo a te stesso. Ad esempio, se il tuo file di configurazione delle credenziali è chiamato my_envs.sh, esegui:

chmod 0700 my_envs.sh


Avvertenze relative a SMTP che potresti vedere

Il servizio di iniezione SMTP di SparkPost è piuttosto rigido, come ci si potrebbe aspettare da un servizio pubblico. Se non hai impostato il numero della 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 riportati semplicemente così come sono dalla libreria SMTP di Python, da qui il formato.

Nel parte 2 abbiamo utilizzato l'API REST delle trasmissioni di SparkPost per iniettare messaggi. Naturalmente, è possibile iniettare messaggi in SparkPost anche utilizzando SMTP. Abbiamo impostato le variabili ambiente in questo modo:

export SMTP_PASSWORD=<<YOUR_API_KEY_HERE>

Se stai utilizzando il servizio ospitato in UE di SparkPost, imposta SMTP_HOST come smtp.eu.sparkpostmail.com.
(Vedi qui per ulteriori opzioni – ad esempio puoi iniettare sulla porta 2525 invece di 587.)

Il seguente output mostra che STARTTLS è utilizzato, insieme al nome utente e alla password.

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


Vedrai:

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

La password viene stampata con caratteri sostitutivi ***, quindi non comprometti la privacy della tua chiave se qualcuno ti sta guardando.

Proteggere le tue credenziali

Nota che le variabili ambiente possono essere impostate in un file di script shell o simile, per risparmiare tempo di riscrittura. Se lo fai, ti preghiamo di proteggere le tue password/API key limitando l'accesso a quel file solo a te stesso. Ad esempio, se il tuo file di configurazione delle credenziali è chiamato my_envs.sh, esegui:

chmod 0700 my_envs.sh


Avvertenze relative a SMTP che potresti vedere

Il servizio di iniezione SMTP di SparkPost è piuttosto rigido, come ci si potrebbe aspettare da un servizio pubblico. Se non hai impostato il numero della 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 riportati semplicemente così come sono dalla libreria SMTP di Python, da qui il formato.

Nel parte 2 abbiamo utilizzato l'API REST delle trasmissioni di SparkPost per iniettare messaggi. Naturalmente, è possibile iniettare messaggi in SparkPost anche utilizzando SMTP. Abbiamo impostato le variabili ambiente in questo modo:

export SMTP_PASSWORD=<<YOUR_API_KEY_HERE>

Se stai utilizzando il servizio ospitato in UE di SparkPost, imposta SMTP_HOST come smtp.eu.sparkpostmail.com.
(Vedi qui per ulteriori opzioni – ad esempio puoi iniettare sulla porta 2525 invece di 587.)

Il seguente output mostra che STARTTLS è utilizzato, insieme al nome utente e alla password.

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


Vedrai:

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

La password viene stampata con caratteri sostitutivi ***, quindi non comprometti la privacy della tua chiave se qualcuno ti sta guardando.

Proteggere le tue credenziali

Nota che le variabili ambiente possono essere impostate in un file di script shell o simile, per risparmiare tempo di riscrittura. Se lo fai, ti preghiamo di proteggere le tue password/API key limitando l'accesso a quel file solo a te stesso. Ad esempio, se il tuo file di configurazione delle credenziali è chiamato my_envs.sh, esegui:

chmod 0700 my_envs.sh


Avvertenze relative a SMTP che potresti vedere

Il servizio di iniezione SMTP di SparkPost è piuttosto rigido, come ci si potrebbe aspettare da un servizio pubblico. Se non hai impostato il numero della 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 riportati semplicemente così come sono dalla libreria SMTP di Python, da qui il formato.

Quale è più veloce – SMTP o API?

Confronto delle prestazioni

Ecco un rapido riepilogo dei test di prestazione:

Misurazione

SMTP

API

Note

File piccolo (~19 KB)

~60 ms

~60 ms

Prestazioni praticamente identiche

File grande (~577 KB)

~280 ms

~200 ms

API leggermente più veloce con carichi più grandi

Francamente, S/MIME è improbabile che sia un caso d'uso ad alto volume, ma avere lo stesso strumento con due opzioni di output era inevitabile che ci portasse a una gara!

Il file di test email "Avocado" utilizzato qui è di circa 19KB. Ripetere i test 10 volte tramite un ciclo bash ha mostrato che i tempi medi erano simili per SMTP e API, intorno ai 60 millisecondi per messaggio, che è piuttosto veloce. In questo caso, abbiamo iniettato da un'istanza EC2 di dimensioni medie nella stessa regione di hosting di SparkPost.com, il che è un buon modo per mantenere bassi i tempi di andata e ritorno della rete.

Ripetendo 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. Ovviamente, i tuoi risultati possono variare a seconda della posizione, congestione di internet ecc., ma le prestazioni non saranno probabilmente un problema.

Se hai davvero bisogno di prestazioni massime, un buon punto di partenza sarebbe lanciare un numero impostato di processi/sessioni di iniezione concorrenti secondo le nostre raccomandazioni sulle migliori pratiche di trasmissione – ad esempio, da un compito di supervisione.

Confronto delle prestazioni

Ecco un rapido riepilogo dei test di prestazione:

Misurazione

SMTP

API

Note

File piccolo (~19 KB)

~60 ms

~60 ms

Prestazioni praticamente identiche

File grande (~577 KB)

~280 ms

~200 ms

API leggermente più veloce con carichi più grandi

Francamente, S/MIME è improbabile che sia un caso d'uso ad alto volume, ma avere lo stesso strumento con due opzioni di output era inevitabile che ci portasse a una gara!

Il file di test email "Avocado" utilizzato qui è di circa 19KB. Ripetere i test 10 volte tramite un ciclo bash ha mostrato che i tempi medi erano simili per SMTP e API, intorno ai 60 millisecondi per messaggio, che è piuttosto veloce. In questo caso, abbiamo iniettato da un'istanza EC2 di dimensioni medie nella stessa regione di hosting di SparkPost.com, il che è un buon modo per mantenere bassi i tempi di andata e ritorno della rete.

Ripetendo 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. Ovviamente, i tuoi risultati possono variare a seconda della posizione, congestione di internet ecc., ma le prestazioni non saranno probabilmente un problema.

Se hai davvero bisogno di prestazioni massime, un buon punto di partenza sarebbe lanciare un numero impostato di processi/sessioni di iniezione concorrenti secondo le nostre raccomandazioni sulle migliori pratiche di trasmissione – ad esempio, da un compito di supervisione.

Confronto delle prestazioni

Ecco un rapido riepilogo dei test di prestazione:

Misurazione

SMTP

API

Note

File piccolo (~19 KB)

~60 ms

~60 ms

Prestazioni praticamente identiche

File grande (~577 KB)

~280 ms

~200 ms

API leggermente più veloce con carichi più grandi

Francamente, S/MIME è improbabile che sia un caso d'uso ad alto volume, ma avere lo stesso strumento con due opzioni di output era inevitabile che ci portasse a una gara!

Il file di test email "Avocado" utilizzato qui è di circa 19KB. Ripetere i test 10 volte tramite un ciclo bash ha mostrato che i tempi medi erano simili per SMTP e API, intorno ai 60 millisecondi per messaggio, che è piuttosto veloce. In questo caso, abbiamo iniettato da un'istanza EC2 di dimensioni medie nella stessa regione di hosting di SparkPost.com, il che è un buon modo per mantenere bassi i tempi di andata e ritorno della rete.

Ripetendo 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. Ovviamente, i tuoi risultati possono variare a seconda della posizione, congestione di internet ecc., ma le prestazioni non saranno probabilmente un problema.

Se hai davvero bisogno di prestazioni massime, un buon punto di partenza sarebbe lanciare un numero impostato di processi/sessioni di iniezione concorrenti secondo le nostre raccomandazioni sulle migliori pratiche di trasmissione – ad esempio, da un compito di supervisione.

Ricapitolando ...

Abbiamo visto come lo strumento basato sull'API di SparkPost utilizzato in Parte 2 venga aggiornato per supportare l'iniezione SMTP per supportare MTA on-premises come Port25 PowerMTA e Momentum in una varietà di configurazioni, così come con SparkPost.

Questo è tutto per ora! Buon invio.

Abbiamo visto come lo strumento basato sull'API di SparkPost utilizzato in Parte 2 venga aggiornato per supportare l'iniezione SMTP per supportare MTA on-premises come Port25 PowerMTA e Momentum in una varietà di configurazioni, così come con SparkPost.

Questo è tutto per ora! Buon invio.

Abbiamo visto come lo strumento basato sull'API di SparkPost utilizzato in Parte 2 venga aggiornato per supportare l'iniezione SMTP per supportare MTA on-premises come Port25 PowerMTA e Momentum in una varietà di configurazioni, così come con SparkPost.

Questo è tutto per ora! Buon invio.

Altre notizie

Leggi di più da questa categoria

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

La piattaforma completa nativa dell'IA che si espande con la tua azienda.

© 2025 Uccello

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

La piattaforma completa nativa dell'IA che si espande con la tua azienda.

© 2025 Uccello