[successivo] [precedente] [indice]

Simple Mail Transfer Protocol

La posta elettronica e' senza dubbio uno degli applicativi; si ritiene che quasi meta' dei pacchetti scambiati in rete appartengano al protocollo SMTP. Il messaggio medio di posta scambiata e' di 1500 byte, ma alcuni messaggi arrivano anche ad alcuni megabyte di dimensione, poiche la posta viene utilizzata come mezzo di file transfer.

L'utente di un sistema di posta elettronica interagisce con un programma che costituisce l'elemento Mail User Agent (MUA). Programmi MUA comuni in ambiente UNIX sono elm, pine, MH, mush, ecc.

Lo scambio di posta tra sistemi connessi in rete e' effettuatio dall'altro elemento dell'ambiente, il Mail Transfer Agent (MTA). Un tipico MTA per UNIX e' sendmail. E' responsabilita' dell'amministratore di sistema la configurazione dello MTA.

I documenti di riferimento del protocollo SMTP sono RFC821 e RFC822.

Il Protocollo

La comunicazione tra due MTA usa il codice NVT ASCII. I comandi sono inviati dal client al server ed il server risponde con codici numerici e stringhe di messaggio opzionali. Il numero di comandi e' piu' limitato che in FTP, circa una dozzina, di cui alcuni quasi mai usati.

E' interessante notare che l'idea della posta elettronica e' nata in sordina, non per progetto ufficiale, e i programmatori hanno proprio modificato e semplificato il protocollo TFP.

Solo cinque comandi sono usati nello scambio posta, che si svolge come segue:

  1. Il clent compie una Active Open al porto TCP 25 del server, che stabilisce la connessione. Il server risponde con un messaggio di benvenuto (codice 220) che inizia col nome di dominio completo del server.
  2. Il client si identifica con il comando HELO, il cui argomento e' il proprio nome di dominio completo.
  3. Il client invia il comando MAIL che identifica il mittente del messaggio, e il comando RCPT che identifica il destinatario. Vi possono essere piu' RCPT per destinatari multipli.
  4. Il contenuto del messaggio e' inviato con il comando DATA. Il termine del messaggio e' denotato da un singolo carattere punto sull'ultima riga.
  5. Lo scambio e' terminato dal comando QUIT.

Vi sono alcuni comandi aggiuntivi che tutte le implementazioni di SMTP devono supportare:

Altri comandi sono utili, ma solo opzionali:

Componenti

Un messaggio di posta elettronica consta di tre componenti:

  1. La busta.

    Questa e' la coppia di messaggi MAIL e RCPT usati dallo MTA per l'invio.

  2. La testata.

    E' usata dal MUA. Vi sono svariati campi di testata definiti in RFC822. Un campo testata consiste nel nome del campo, il carattere due punti e il valore del campo. I campi piu' comuni sono Received, Message-ID, From, Date, Reply-To. I campi che iniziano coi caratteri X- sono definiti dall'utente.

  3. Il corpo.

    E' il contenuto del messaggio vero e proprio, ed e' separato dalla testata da una linea vuota. Ogni linea puo' essere al massimo di 1000 caratteri.

La testata ed il corpo insieme si dicono anche il contenuto del messaggio. Per lo MTA il contenuto di un messaggio e' opaco.

Quando un MUA passa un muovo messaggio di posta al suo MTA, questi tenta un recapito immediato. Se la connessione con lo MTA remoto fallisce, molto spesso lo MTA locale riprova dopo un breve intervallo di tempo e poi continua a provare a intervalli regolari per alcuni giorni, prima di dichiarare il destinatario irraggiungibile.

Sviluppi Recenti

SMTP Esteso

Il documento RFC1425 descrive una nuova versione di SMTP, ESMTP (Extended). Il client che desidera farne uso invia il comando EHLO invece di HELO. Un server compatibile risponde col codice 250; la risposta e' di solito multilinea, ed ogni linea contiene una parola chiave e opzionalmente un argomento, a specificare le estensioni SMTP supportate dal server.

Un server che non riconosce il comando EHLO e quindi le estensioni, semplicemente inviera' un codice di errore.

Cambiamento Testata: Caratteri non ASCII

Definito da RFC1522, questo e' un metodo per inserire caratteri non ASCII nella testata di un messaggio.

La testata puo' contenere delle parole codificate, col formato

=?charset?codifica?testo?=

charset e' il codice di caratteri usato per la codifica, puo' essere us-ascii oppure iso-8859-X, ove X e' una cifra singola.

codifica e' un singolo caratter e puo' essere:

Cambiamento al Corpo: MIME

.

Il Multipurpose (o Multimedia) Internet Mail Extensions e' definito in RFC1521 e consiste di nuovi campi testata che specificano il formato del corpo che segue.

Per poter usare pienamente estensioni MIME il server deve supportare SMTP Esteso, ed in particolare l'estensione 8BITMIME. Se il server non e' estso o non supporta questa estensione, allora il corpo del messaggio deve essere NVT ASCII a 7 bit per carattere.

Tutto cio' che serve per scambiare messaggi MIME e' un MUA da entrambi i lati che comprenda i campi di testata MIME che vengono usati. Possono venire definiti campi aggiuntivi in implementazioni specifiche: spesso il trattamento di campi MIME da parte di un MUA e' basato sulla consultazione di un file di configurazione (mailcap in UNIX).

Lo MTA non deve preoccuparsi delle estensioni MIME.

MIME definisce cinque nuovi campi di testata:

Per esempio:

Mime-Version: 1.0
Content-Type: Text/Plain; charset=US-ASCII

Il campo Content-Type consiste di due stringhe separate da una barra: il tipo ed il sottotipo. Con l'affermarsi di navigatori World Wide Web multimediali il numero dei tipi e sottotipi in circolazione sta aumentando velocemente. Questo campo specifica il formato del corpo.

Il campo Content-Transfer-Encoding specifica la codifica da usare e puo' avere i valori