Comprensione di SMTP – Il protocollo dietro la consegna di posta elettronica

On Maggio 29, 2023
9min read
Diana Lepilkina Content Specialist @Mailtrap
This is a cover image for an article that explains SMTP Protocol in detail

SMTP è un protocollo fondamentale utilizzato nella comunicazione e-mail. Molto probabilmente, è dietro le e-mail che inviamo e riceviamo ogni giorno. Sebbene sia un protocollo semplice, coinvolge molti componenti e dettagli. 

In questo blog post, daremo un’occhiata più da vicino a SMTP ed esploreremo le sue caratteristiche e funzionalità principali. 

Cos’ è SMTP?

SMTP o Simple Mail Transfer Protocol è un protocollo a livello di applicazione che consente di trasferire e-mail tra diversi server e reti di computer. Lo fa definendo le regole di comunicazione.

Il modello originale è stato introdotto nel 1982. Secondo RFC 821, l’utente crea la richiesta di connessione. In risposta, il mittente-SMTP avvia una connessione bidirezionale con il ricevitore-SMTP. In termini moderni, questi sono rispettivamente client SMTP e server SMTP. Client SMTP e server SMTP comunicano con comandi e risposte (ulteriori informazioni in seguito), in modo simile alle conversazioni della vita reale.

La RFC 821 ha anche definito il modello per l’uso SMTP. Puoi vedere lo schema nell’illustrazione qui sotto. 

Fonte: RFC 821

Una volta stabilita la connessione, il client SMTP trasferirà le intestazioni, i destinatari, i messaggi (inclusi gli allegati) e tutti i dati al server SMTP passo-passo. Al termine della trasmissione, la connessione verrà chiusa. 

Per definizione, la forma completa di SMTP è quando i client SMTP supportano la trasmissione, le code di posta e le funzioni di indirizzo alternative. Questo è chiamato un SMTP completamente capace. Se queste funzioni non sono supportate, l’SMTP non è completamente compatibile. In tal caso, rilevanti RFCs consigliano di utilizzare il messaggio di presentazione protocollare. 

Tieni presente che SMTP può inviare solo messaggi semplici, ovvero testo semplice senza allegati. Utilizziamo un protocollo separato, Multipurpose Internet Mail Extensions, MIME (RFC 2045), per inviare allegati, corpi dei messaggi che superano i limiti di caratteri imposti da SMTP, messaggi in lingue diverse dall’inglese e formati HTML/CSS.

MIME è un protocollo di estensione – migliora le capacità di SMTP, ma non funziona separatamente. La maggior parte dei moderni servizi di posta elettronica supporta MIME. 

Cos’ è ESMTP?

ESMTP o Extended Simple Mail Transfer Protocol è stato introdotto per la prima volta nel 1995 nella RFC 1869. Lo scopo era quello di creare una struttura unificata per tutte le estensioni future. Le estensioni mirano ad aggiungere funzionalità che SMTP manca di default. RFC 5321 si ha consolidato e reso obsoleti gli altri documenti.

ESMTP utilizza un nuovo comando EHLO per avviare la connessione. Consente inoltre l’utilizzo di parametri aggiuntivi nei comandi MAIL FROM e RCPT TO di SMTP. Di conseguenza, ESMTP rimuove il limite di 512 caratteri per i parametri aggiuntivi e lo lascia solo per i casi in cui non sono definiti parametri aggiuntivi. 

Sia ESMTP che SMTP sono ampiamente utilizzati oggi. Se il comando EHLO non è supportato, la connessione deve ricadere sull’SMTP e sul relativo comando HELO. 

Parlando di estensioni, dovremmo anche menzionare l’estensione SMTP-AUTH, che aggiunge una fase di autenticazione al processo. Ciò significa che il client deve accedere al server di posta utilizzando il nome utente e la password. Anche se l’autenticazione SMTP non può proteggere dallo spoofing, è un’importante misura di sicurezza. 

Cos’ è SMTPS? 

SMTPS o Simple Mail Transfer Protocol Secure è un metodo che protegge SMTP con l’aiuto dei protocolli Transport Layer Security (TLS) o Secure Sockets Layer (SSL). Questi livelli di sicurezza crittografano i messaggi per impedire a spammer o spoofer di visualizzare il contenuto delle e-mail.

Sebbene SSL sia ancora ampiamente utilizzato, TLS (più precisamente, la sua versione 1.3) è considerato il protocollo più sicuro per la crittografia delle e-mail. Per ulteriori informazioni sulla sicurezza SMTP, leggi il nostro post dedicato.

Tipi di SMTP

RFC 5321 distingue tra quattro tipi di sistemi SMTP:

  • L’Original SMTP è il primo sistema che interagisce con Internet quando introduce la posta;
  • Delivery SMTP è il sistema che riceve le email da internet e le consegna ai destinatari;
  • Relay SMTP inoltra e-mail tra server SMTP o MTA (più sul agente di trasferimento di seguito) senza modificare il messaggio in alcun modo;·
  • Gateway SMTP o gateway SMTP trasferisce anche e-mail tra server diversi ma, a differenza del SMTP relay, è consentito trasformare il messaggio se necessario. I gateway SMTP sono solitamente firewall che riscrivono indirizzi o server SMTP intermediari.

Infrastruttura SMTP 

Come abbiamo visto sopra, i componenti principali del modello SMTP sono User, Sender-SMTP (client SMTP) e Receiver-SMTP (server SMTP). Tuttavia, gli agenti di posta partecipano anche al processo di invio e ricezione di e-mail. Inoltre, il modello SMTP include il SMTP relay in scenari specifici. Vediamo cosa significano ciascuno di loro e quale funzione hanno. 

Server SMTP

Il server SMTP è un’applicazione per l’invio di e-mail. Riceve messaggi elettronici dai client di posta elettronica (Gmail, Yahoo! Apple Mail, AOL, ecc.) e li trasferisce ad altri server. Questi possono essere altri server SMTP o un server di posta in arrivo. 

Il server di posta elettronica SMTP può essere locale o basato su cloud. Un server SMTP locale è una buona opzione per coloro che non vogliono dipendere da server di terze parti. D’altra parte, un server SMTP ospitato nel cloud richiede meno sforzo e può essere più sicuro nella maggior parte dei casi.

Agenti di Posta 

Ci sono quattro agenti principali: 

  • MUA (Mail User Agent) è il client di posta elettronica che abbiamo menzionato sopra. È un’applicazione o un sito Web che utilizzi per inviare e ricevere messaggi di posta elettronica.
  • MSA (Mail Submission Agent) riceve e-mail dal client di posta elettronica, ne controlla le intestazioni e verifica che gli indirizzi siano indicati correttamente.
  • MTA (Mail Transfer Agent) è un programma di sendmail che elabora e trasferisce le email. Riceve messaggi dall’MSA. La maggior parte degli MTA moderni assume le responsabilità di MSA. In tal caso, il trasferimento di messaggi non includerà MSAs. Gli MTA più popolari sono Sendmail, Postfix ed EXIM.
  • MDA (Mail Delivery Agent) è l’agente finale prima che le e-mail vengano consegnate al server SMTP del destinatario e quindi recuperate tramite server di posta elettronica in entrata (IMAP o POP3).

Le responsabilità degli agenti possono essere sfocate a volte, ma sono comunque utili a scopo illustrativo. Nel mondo reale, MUA, MTA e server SMTP sono i componenti più essenziali della consegna di posta elettronica. 

SMTP relay

SMTP relay è il processo di trasmissione di e-mail tra server SMTP ospitati su domini diversi (da @gmail.com a @yahoo.com, per esempio). 

Gli MTA controllano se i nomi di dominio sono gli stessi. Se lo sono, il SMTP relay non avverrà. Ma se i domini non sono gli stessi, MTAs query Domain Name System (DNS) record per trovare l’indirizzo IP per il dominio del destinatario. Una volta individuato l’IP, instraderanno il messaggio tra uno o più MTA (SMTP relay) fino a quando non viene finalmente consegnato al server SMTP del destinatario. 

Come funziona SMTP?

Una sessione SMTP inizia quando il client apre una connessione TCP (Transmission Control Protocol) al server SMTP. Il server risponde con un messaggio di apertura, espresso con il codice 250. Questo processo è spesso chiamato handshake SMTP. 

Il client invia quindi un comando HELO (EHLO per ESMTP) e si identifica. Spesso segue il comando con il nome di dominio o l’indirizzo IP. In parole non tecniche, il cliente dice: “Ciao, il mio nome è John il cliente, sto inviando un’e-mail da gmail.com e il mio IP è 192.0.2.0”. Il server risponderà nuovamente con il codice 250. 

Successivamente, inizierà la fase di trasferimento delle e-mail. I contenuti delle e-mail verranno trasferiti passo dopo passo con i commandi  MAIL FROM (john@gmail.com), RCPT TO (oliver@gmail.com) e DATA⁠(“Ehi, come stai?”) . Se il server accetta la transazione, il client trasferirà le intestazioni delle e-mail. È necessario utilizzare un indicatore di fine linea (punto ‘.‘) una volta che tutto è stato trasmesso. 

Il server risponderà con il codice 250 se la transazione ha esito positivo. Il client avvierà la terminazione della connessione SMTP con il comando QUIT e il server chiuderà il canale di trasmissione con il codice 221. 

Questo è, ovviamente, un esempio semplificato senza un SMTP relay, inoltro, gateway o codici di errore. Per ulteriori informazioni su questi, si prega di fare riferimento alla RFC 5321.

E la coda SMTP? 

La coda SMTP è un insieme di messaggi di posta elettronica in attesa di essere recapitati. Le e-mail vengono solitamente messe in coda quando la ricezione del server SMTP non è pronta per accettare e-mail o si inviano grandi volumi allo stesso tempo. Quando il server risponde, le e-mail verranno consegnate una per una. La coda SMTP è una sorta di buffer tra l’utente e il server di ricezione.

Comandi e risposte SMTP

Abbiamo menzionato alcuni dei comandi e delle risposte SMTP nell’esempio precedente. Ma, durante l’invio di e-mail con SMTP, potresti incontrare altri comandi e risposte. 

In generale, i comandi sono stringhe di caratteri alfabetici che terminano con <CRLF>. Se seguono parametri aggiuntivi, i caratteri verranno terminati da <SP>.

Le risposte sono codici numerici di completamento che possono essere positivi o negativi. In genere, sono seguiti da una stringa di testo. 

I comandi e le risposte sono composti da un set di caratteri ASCII. 

Comandi

  • HELO/EHLO – avvia l’inizio della sessione SMTP.

    Sintassi: "EHLO" SP ( Domain / address-literal ) CRLF o "HELO" SP Domain CRLF
  •  MAIL FROM: avvia la transazione di posta e include il percorso inverso e talvolta parametri facoltativi.

    Sintassi: MAIL FROM:<reverse-path> [SP<mail-parameters>] <CRLF>
  • RCPT TO – indica il/i destinatario/i e include il suo/i suo/i indirizzo/i e-mail (alias forward-path) come argomento.

    Sintassi: RCPT TO:<forward-path> [ SP<rcpt-parameters>] <CRLF>
  • DATA – chiede l’autorizzazione del server per trasferire i dati e lo fa una volta che riceve una risposta positiva.

    Sintassi:  "DATA" CRLF
  • VRFY – chiede al server di verificare se la casella di posta nell’argomento esiste sull’host locale.

    Sintassi: "VRFY" SP String CRLF
  • EXPN – fa lo stesso di VRFY ma per la mailing list.

    Sintassi: "EXPN" SP Stringa CRLF
  •  NOOP – verifica la capacità del server di rispondere.

    Sintassi: "NOOP" [ SP String ] CRLF
  • QUIT – avvia la terminazione della connessione

    Sintassi: "QUIT" CRLF
  • HELP – chiede al server di verificare quali comandi supporta. Può includere un comando specifico come argomento.

    Sintassi: "NOOP" [ SP String ] CRLF
  • RSET – reimposta la connessione SMTP e cancella tutti i buffer e le tabelle di stato. La connessione SMTP verrà ripristinata allo stato iniziale.

    Sintassi: "RSET" CRLF

Il protocollo SMTP può anche supportare alcuni comandi ESMTP, come STARTTLS, AUTH e altri. 

Risposte

Risposte positive comuni 

  • 250 – l’azione richiesta è ok o completata 
  • 211 – stato del sistema o risposta a HELP
  • 220 – <domain> il servizio è pronto
  • 221 – <domain> chiusura del canale di trasmissione
  • 354 – start mail input (di solito risponde al comando DATA) 

Risposte negative o codici di errore

  • 500 – errore di sintassi o comando non riconosciuto 
  • 503 – sequenza di comandi errata
  • 252 – il server non può verificare l’utente. Accetterà comunque il messaggio e tenterà la consegna (risponde al comando VRFY)
  • 450 – cassetta postale non disponibile 
  • 510 – Indirizzo e-mail non valido

Porte SMTP

Le porte SMTP sono endpoint di comunicazione che aiutano a identificare la posizione esatta degli indirizzi Internet. Le porte più comuni utilizzate con SMTP sono 25, 465, 587 e 2525. 

  • 25 è la porta SMTP più vecchia, ma utilizzarla per l’invio di e-mail non è molto comune. Poiché non ha meccanismi di sicurezza, gli spammer ne abusano pesantemente. Per questo motivo, i provider di servizi Internet (ISP) di solito bloccano la porta numero 25. Si consiglia di utilizzarla solo come porta di relay. 
  • 465 è più sicura rispetto a 25, ma non è una porta SMTP ufficiale ed è ora deprecata. Supporta la crittografia SSL. Tuttavia, si consiglia di evitare di usarla quando possibile.
  • 587 è la porta SMTP predefinita consigliata con STARTTLS. Quasi tutti i fornitori di servizi di posta elettronica lo supportano. 
  • 2525 è un’alternativa a 587. Può essere utilizzato quando 587 è bloccato o non disponibile. 2525 non è mai stata riconosciuta come porta SMTP ufficiale. Indipendentemente da ciò, la maggior parte degli ISP consente transazioni attraverso questa porta. 

Confronto tra SMTP, IMAP e POP3

Oltre a SMTP, i protocolli di posta elettronica più comuni sono IMAP e POP3. SMTP è un server di posta elettronica in uscita utilizzato per l’invio e la consegna di e-mail. IMAP e POP3 sono protocolli di accesso ai messaggi utilizzati per recuperare i messaggi in arrivo dal server di posta elettronica. 

IMAP è un protocollo di accesso ai messaggi Internet che si connette al server e scarica i messaggi su richiesta. I messaggi non verranno eliminati una volta terminata la connessione. Con IMAP, gli utenti possono accedere alle loro e-mail da qualsiasi computer o dispositivo. 

POP3 o Post Office Protocol 3 si connette anche al server, ma scarica tutti i messaggi ricevuti. Una volta completato, eliminerà tutte le e-mail dal server. A differenza di IMAP, POP3 è dipendente dal dispositivo. 

Maggiori informazioni sulle differenze tra questi protocolli sono disponibili qui.

Come inviare email con SMTP 

Uno dei principali vantaggi di SMTP è che semplifica l’invio di e-mail da diverse app o dispositivi. La maggior parte dei linguaggi di programmazione consente agli utenti di instradare le e-mail in uscita tramite SMTP in modo nativo o con l’aiuto di diverse librerie. A differenza delle Web API (o Email API), l’integrazione SMTP non richiede competenze di codifica avanzate. 

Avrai bisogno di credenziali SMTP funzionanti (come host, porta, nome utente, password e crittografia) e il linguaggio di programmazione pertinente per completare tale attività. Puoi dare un’occhiata al nostro recente post sul blog per maggiori dettagli su questo.

SMTP come servizio – test e invio 

SMTP (o, più precisamente, server SMTP) viene fornito agli utenti come servizio per due scopi principali: test e invio. 

In termini di test, il servizio SMTP implica un falso server SMTP che cattura la posta in uscita. In questo modo, le e-mail non raggiungono le caselle di posta reali, creando un ambiente sicuro per i test. 

Quando si tratta di invio di e-mail, il servizio SMTP è sinonimo di servizio di inoltro SMTP. I provider di posta elettronica hanno i propri server SMTP che consentono agli utenti di inviare e-mail di marketing o transazionali. 

Idealmente, questi due servizi SMTP possono essere combinati in un unico strumento robusto come Mailtrap.

Mailtrap è una piattaforma di consegna Email Testing e Email Sending. È un’infrastruttura di posta elettronica completa che consente agli utenti di testare il server SMTP, inviare e-mail con esso e monitorare le loro prestazioni con analisi attuabili.

Email Testing è una Sandbox che cattura tutto il traffico SMTP in una casella di posta virtuale ed elimina le possibilità di spamming degli utenti. Puoi facilmente ispezionare ed eseguire il debug delle tue e-mail in staging con controlli HTML/CSS o spam, visualizzare informazioni tecniche o utilizzare funzionalità di inoltro manuale/automatico. Email Testing fornisce più caselle di posta in arrivo per diversi progetti e fasi di prodotto. 

Email Sending è un’infrastruttura con alti tassi di consegna delle email. Con la sua API e-mail e il servizio SMTP, l’integrazione è fluida e senza sforzo. Tutto quello che devi fare è verificare il tuo dominio e scegliere il metodo di integrazione preferito. Una volta fatto, puoi raggiungere le caselle di posta dei destinatari in pochi secondi. 

Email Sending ha anche analisi approfondite utilizzabili con report drill-down e dashboard di visualizzazione in elicottero che ti mantengono in cima alle tue metriche di consegna. 

Article by Diana Lepilkina Content Specialist @Mailtrap