Simple Mail Transfer Protocol

Da Wikipedia, l'enciclopedia libera.
(Reindirizzamento da SMTP)

Simple Mail Transfer Protocol (SMTP) è il protocollo standard per la trasmissione via internet di e-mail. In italiano si potrebbe tradurre come "Protocollo elementare di trasferimento postale".

I protocolli utilizzati per ricevere posta sono invece il protocollo POP e l'IMAP.

Descrizione[modifica | modifica wikitesto]

È un protocollo relativamente semplice, testuale, nel quale vengono specificati uno o più destinatari di un messaggio, verificata la loro esistenza il messaggio viene trasferito. È abbastanza facile verificare come funziona un server SMTP mediante un client telnet. Il protocollo SMTP utilizza come protocollo di livello transport TCP. Il client apre una sessione TCP verso il server sulla porta 25 (recentemente modificata in 587 da molti Provider per limitare lo spam). Per associare il server SMTP a un dato nome di dominio (DNS) si usa un Resource Record di tipo MX (Mail eXchange).

Poiché SMTP è un protocollo testuale basato sulla codifica ASCII (in particolare ASCII NVT), non è permesso trasmettere direttamente testo composto con un diverso set di caratteri e tantomeno file binari. Lo standard MIME permette di estendere il formato dei messaggi mantenendo la compatibilità col software esistente. Per esempio, al giorno d'oggi molti server SMTP supportano l'estensione 8BITMIME, la quale permette un trasferimento di un testo che contiene caratteri accentati (non-ASCII) senza bisogno di trascodificarlo. Altri limiti di SMTP, quale la lunghezza massima di una riga, impediscono la spedizione di file binari senza trascodifica. (Nota che per i file binari inviati con HTTP si utilizza il formato MIME senza bisogno di una trascodifica.)

SMTP è un protocollo che permette soltanto di inviare messaggi di posta, ma non di richiederli ad un server: per fare questo il client di posta deve usare altri protocolli, quali il POP3 (Post Office Protocol) e l'IMAP (Internet Message Access Protocol).

Storia[modifica | modifica wikitesto]

SMTP iniziò a diffondersi nei primi anni '80. A quel tempo era un'alternativa a UUCP, che era più adatto a gestire il trasferimento di e-mail fra computer la cui connessione era intermittente. L'SMTP, d'altra parte, funziona meglio se i computer sono sempre collegati alla rete.

Sendmail fu uno dei primi (se non proprio il primo) mail transfer agent ad implementare il protocollo SMTP. Fino al 2001 sono stati scritti almeno 50 programmi che implementano il protocollo SMTP come client (mittente dei messaggi) o server (destinatario del messaggio). Server molto diffusi sono Exim di Philip Hazel, Postfix di Wietse Venema, qmail di D. J. Bernstein, Courier di Sam Varshavchik e Microsoft Exchange Server.

Comandi SMTP[modifica | modifica wikitesto]

HELO: Inviato da un client per l'autoidentificazione, solitamente con un nome di dominio.

EHLO: Consente al server di identificare il supporto per i comandi ESMTP (Extended Simple Mail Transfer Protocol).

MAIL FROM: Identifica il mittente del messaggio. Utilizzato nella forma MAIL FROM:.

RCPT TO: Identifica i destinatari del messaggio. Utilizzato nella forma RCPT TO:.

TURN: Consente al client e al server di invertire i ruoli e inviare la posta nella direzione opposta senza dovere stabilire una nuova connessione.

ATRN: Il comando ATRN (Authenticated TURN) utilizza, a propria discrezione, uno o più domini come parametro. Il comando ATRN deve essere rifiutato se la sessione non è stata autenticata.

SIZE: Fornisce un meccanismo per mezzo del quale il server SMTP può indicare la dimensione massima supportata per i messaggi. I server compatibili devono fornire delle estensioni della dimensione per indicare la massima dimensione consentita per i messaggi. I client non devono inviare messaggi di dimensione superiore a quella indicata dal server.

ETRN: Un'estensione di SMTP. ETRN viene inviato da un server SMTP per richiedere che un altro server invii gli eventuali messaggi di posta elettronica di cui dispone.

PIPELINING: Consente di inviare un flusso di comandi senza aspettare una risposta dopo ogni comando.

CHUNKING: È un comando ESMTP che sostituisce il comando DATA. Questo comando invia un comando BDAT con un argomento contenente il numero di byte totale del messaggio in modo che l'host SMTP non debba continuamente eseguire la scansione per determinare la fine dei dati. Il server destinatario conta i byte nel messaggio e, quando la dimensione del messaggio corrisponde al valore inviato dal comando BDAT, il server presuppone di avere ricevuto tutti i dati del messaggio.

DATA: Inviato da un client per avviare il trasferimento del contenuto di un messaggio.

DSN: È un comando ESMTP che attiva le notifiche dello stato del recapito.

RSET: Annulla l'intera transazione del messaggio e ripristina il buffer.

VRFY: Verifica che una cassetta postale sia disponibile per il recapito di messaggi. Ad esempio, vrfy ted verifica che sul server locale risieda la cassetta postale di Ted. Questo comando è disattivato per impostazione predefinita nelle implementazioni di Exchange.

HELP: Restituisce l'elenco dei comandi supportati dal servizio SMTP.

QUIT: Termina la sessione.

Esempio di comunicazione SMTP[modifica | modifica wikitesto]

Quella che segue è una transazione SMTP valida. Le righe inviate dal client sono precedute da "C:", mentre quelle inviate dal server da "S:". Su molti computer si può stabilire una connessione mediante il comando telnet:

 telnet www.example.com 25

Questo comando apre una connessione a www.example.com sulla porta 25 TCP.

 S: 220 www.example.com ESMTP Postfix
 C: HELO mydomain.com
 S: 250 Hello mydomain.com, pleased to meet you
 C: MAIL FROM: <sender@mydomain.com>
 S: 250 sender@mydomain.com ... Sender ok
 C: RCPT TO: <friend@example.com>
 S: 250 friend@example.com ... Recipient Ok
 C: DATA
 S: 354 End data with "." on a line by itself
 C: Subject: messaggio di prova
 C: From: sender@mydomain.com
 C: To: friend@example.com
 C:
 C: Ciao,
 C: questa è una prova.
 C: .
 S: 250 Ok: queued as 12345
 C: QUIT
 S: 221 Bye

Sebbene non sia obbligatorio, quasi tutti i client richiedono al server quali estensioni del protocollo SMTP il server supporta usando il saluto EHLO. Questi client usano HELO soltanto nel caso in cui il server non risponda ad EHLO.

La sicurezza del protocollo SMTP[modifica | modifica wikitesto]

Una delle limitazioni del protocollo SMTP originario è che non gestisce l'autenticazione dei mittenti. Oltre al rischio di spam, esiste la possibilità di inviare e-mail facendo apparire come mittente l'indirizzo corrispondente ad un altro account. Senza accedere all'account di terzi, è possibile stabilire una connessione al mail-server e scrivere un messaggio in codice SMTP contenente i comandi relativi a mittente e destinatario, dare i relativi parametri e il corpo della e-mail.

Per ovviare a questi problemi è stata sviluppata un'estensione chiamata SMTP-AUTH.

Nonostante questo, lo spam rimane ancor oggi un grave problema della posta elettronica. Tuttavia, non si ritiene praticabile una revisione radicale del protocollo SMTP, per via del gran numero di implementazioni del protocollo attuale (ad esempio, è stato proposto Internet Mail 2000 come protocollo alternativo).

Per questo motivo sono stati proposti diversi protocolli ausiliari per assistere le transazioni SMTP. L'Anti-Spam Research Group dell'IRTF sta lavorando su varie proposte di autenticazione e-mail centrate sulla flessibilità, leggerezza e scalabilità.

Gli standard RFC relativi[modifica | modifica wikitesto]

Pubblicato nel 2008, il RFC 5321 – "The Simple Mail Transfer Protocol" è il documento di specifica principale per quanto riguarda il protocollo SMTP e rende obsoleti il RFC 821 (conosciuto anche come STD 10), RFC 974, RFC 1869 e RFC 2821. Inoltre, i seguenti RFC estendono le funzionalità del protocollo SMTP: (in lingua originale)

  • RFC 1123 – Requirements for Internet Hosts—Application and Support (STD 3)
  • RFC 1870 – SMTP Service Extension for Message Size Declaration (rende obsoleto RFC 1653)
  • RFC 2505 – Anti-Spam Recommendations for SMTP MTAs (BCP 30)
  • RFC 2920 – SMTP Service Extension for Command Pipelining (STD 60)
  • RFC 3030 – SMTP Service Extensions for Transmission of Large and Binary MIME Messages
  • RFC 3207 – SMTP Service Extension for Secure SMTP over Transport Layer Security (rende obsoleto RFC 2487)
  • RFC 3461 – SMTP Service Extension for Delivery Status Notifications (rende obsoleto RFC 1891)
  • RFC 3463 – Enhanced Status Codes for SMTP (rende obsoleto RFC 1893 )
  • RFC 3464 – An Extensible Message Format for Delivery Status Notifications (rende obsoleto RFC 1894)
  • RFC 3798 - Message Disposition Notification
  • RFC 3834 – Recommendations for Automatic Responses to Electronic Mail
  • RFC 4952 – Overview and Framework for Internationalized E-mail
  • RFC 4954 – SMTP Service Extension for Authentication (rende obsoleti RFC 2554)
  • RFC 5068 – E-mail Submission Operations: Access and Accountability Requirements (BCP 134)
  • RFC 5322 – Internet Message Format (rende obsoleto RFC 822 aka STD 11, and RFC 2822)
  • RFC 5336 - SMTP Extension for Internationalized Email Addresses (aggiorna RFC 2821, RFC 2822, and RFC 4952)
  • RFC 5504 - Downgrading Mechanism for Email Address Internationalization
  • RFC 6409 – Message Submission for Mail (rende obsoleti RFC 4409, RFC 2476)
  • RFC 6522 – The Multipart/Report Content Type for the Reporting of Mail System Administrative Messages (rende obsoleti RFC 3462, RFC 1892)

(tradotti in italiano)

Voci correlate[modifica | modifica wikitesto]

Telematica Portale Telematica: accedi alle voci di Wikipedia che parlano di reti, telecomunicazioni e protocolli di rete