La sigla SMTP si riferisce al protocollo standard per la trasmissione via internet di e-mail che, in italiano, suona come Protocollo elementare di trasferimento postale. Si tratta di un protocollo relativamente semplice, nel quale vengono specificati uno o più destinatari di un messaggio testuale. Verificata la loro esistenza, il messaggio viene effettivamente trasferito. E' abbastanza facile verificare come funziona un server SMTP mediante un client telnet.
L'SMTP usa il protocollo di trasmissione TCP e, per accedervi, la porta 25. Per associare il server SMTP a un dato nome di dominio (DNS) si usa un record denominato MX (Mail Exchange). L'SMTP iniziò a diffondersi nei primi anni '80. A quel tempo era una alternativa all'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). Fra i server più diffusi si può citare Exim di Philip Hazel, Postfix di [Wietse Venema], qmail di D. J. Bernstein, e Microsoft Exchange Server .
Poichè inizialmente l'SMTP era un protocollo testuale (basato sulla codifica ASCII), non permetteva di trasmettere direttamente file binari. Furono dunque sviluppati standard come MIME per la codifica dei file binari ed il loro trasferimento attraverso SMTP. Al giorno d'oggi molti server SMTP supportano l'estensione 8BITMIME, la quale permette un trasferimento più agevole dei file binari, come se fossero file di testo.
L'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, o Post Office Protocol, l'IMAP, o Internet Message Access Protocol.
Indice |
telnet www.example.com 25
Questo comando apre una connessione a www.example.com sulla porta SMTP.
S: 220 www.example.com ESMTP Postfix C: HELO mydomain.com S: 250 Hello mydomain.com C: MAIL FROM: <sender@mydomain.com> S: 250 Ok C: RCPT TO: <friend@example.com> S: 250 Ok C: DATA S: 354 End data with <CR><LF>.<CR><LF> 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.
Nonostante questo, lo spam rimane ancor oggi un grave problema. 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à.
Il protocollo è descritto nella RFC 821, ma lavora in stretta collaborazione con altri standard come la RFC 822 che descrive la sintassi degli headers della mail, la RFC 1049 che definisce le strutture dati per interpretare correttamente il contenuto delle mail e la RFC 974 che si occupa del routing delle mail tramite DNS.
Lo standard definito dalla RFC 821, aveva diversi limiti riguardanti per esempio la dimensioni dei messaggi oppure la trasmissione di mail non in inglese o diverse dal semplice plain text. Per ovviare a questa restrizione è stato necessario estendere il protocollo tramite la RFC 1425 riguardante le SMTP Service Extensions. Per maggiori informazioni si possono consultare direttamente i documenti ufficiali della rete, alcuni link dei quali sono riportati di seguito.
I principali comandi SMTP, accompagnati da una breve spiegazione, sono elencati di seguito perchè, altrimenti, è possibile ottenere una spiegazione più esauriente e completa a partire dal link indicato:
HELO
:EHLO
:MAIL FROM:
<indirizzo mittente>:RCPT TO:
<indirizzo destinatario> :DATA
:RSET
:VRFY
<stringa>:HELP
:NOOP
:QUIT
:Una sessione SMTP è costituita da almeno sei fasi:
HELO
seguito dal FQDN (Fully Qualified Domani Name). Se il
server accetta rispondo con un messaggio 250 (Ok);MAIL
FROM:
<indirizzo mittente>. Il server risponde con
250 (Ok) per ogni destinatario accettato;RCPT TO:
<indirizzo destinatario> ed
il server risponde per ogni destinatario accettato un codice 250 (Ok);DATA.
Il server risponde con un codice 354 e
indica come marcare il termine del messaggio. I campi come Date, Subject,
To, Cc, From vanno inseriti tra i dati della mail;.
il server
memorizza la mail. A questo punto è possibile, scrivere un nuovo
messaggio oppure inviare il comando QUIT
, dopo il quale il
server invia i messaggi e risponde con un codice 221 (Closing) e la
connessione TCP viene terminata;
Esempio di una sessione SMTP da linea di comando:
telnet localhost 25
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
Escape character is '^]'.
220 cezanne.swan.org ESMTP Sendmail 8.13.5/8.13.5;
Mon, 16 Apr 2007 23:14:54 +0200
Tramite il programma telnet viene contattato il server SMTP
sulla porta TCP 25
E' possibile notare dal messaggio ESMTP Service che il server supporta
le SMTP Service Extensions
HELO
501 5.0.0 HELO requires domain address
HELO
swan.org
250 cezanne.swan.org Hello localhost [127.0.0.1], pleased to meet you
L'autenticazione avviene con HELO anzichè EHLO e quindi il client
non usufruisce delle SMTP Service Extensions qui supportate
HELP
214-2.0.0 This is sendmail version 8.13.5
214-2.0.0 Topics:
214-2.0.0 HELO EHLO MAIL RCPT DATA
214-2.0.0 RSET NOOP QUIT HELP VRFY
214-2.0.0 EXPN VERB ETRN DSN AUTH
214-2.0.0 STARTTLS
214-2.0.0 For more info use "HELP <topic>".
214-2.0.0 To report bugs in the implementation send email to
214-2.0.0 sendmail-bugs@sendmail.org.
214-2.0.0 For local information send email to Postmaster at your site.
214 2.0.0 End of HELP info
HELP MAIL
214-2.0.0 MAIL From:<sender> [ <parameters> ]
214-2.0.0 Specifies the sender. Parameters are ESMTP extensions.
214-2.0.0 See "HELP DSN" for details.
214 2.0.0 End of HELP info
Il client richiede una lista dei comandi disponibili tramite help e successivamente un aiuto per il comando MAIL
MAIL FROM:
antonio@swan.org
250 2.1.0 antonio@swan.org... Sender ok
RCPT TO:
antonio@localhost
250 2.1.5 antonio@localhost... Recipient ok
DATA
Inizia l'inserimento del corpo della mail
354 Enter mail, end with "." on a line by itself
From:antonio@swan.org
To:antonio@localhost
Ciao,
questo è un messaggio di prova
per esemplificare il funzionamento
del protocollo SMTP.
Antonio
.
Il comando "." punto termina l'inserimento del messaggio; Il server SMTP lo accetta
250 2.0.0 l3GLEsMI002555 Message accepted for delivery
QUIT
221 2.0.0 cezanne.swan.org closing connection
Connection closed by foreign host.
La connessione TCP termina e si ritorna al prompt
Il client di posta elettronica (Kmail, Outlook o Eudora) si occupa solitamente di comunicare con il server al posto nostro in base alla propria configurazione.
Il server SMTP dopo aver ricevuto il messaggio da inoltrare, lo imbusta opportunamente, aggiungendo un header di informazioni e poi lo consegna al destinatario. Quello che si ottiene è riportato di seguito
From antonio@swan.org Mon Apr 16 23:20:35 2007 Return-Path:Received: from swan.org (localhost [127.0.0.1]) by cezanne.swan.org (8.13.5/8.13.5) with SMTP id l3GLEsMI002555 for antonio@localhost; Mon, 16 Apr 2007 23:18:33 +0200 Date: Mon, 16 Apr 2007 23:14:54 +0200 Message-Id: <200704162118.l3GLEsMI002555@cezanne.swan.org> From: antonio@swan.org To: antonio@cezanne.swan.org Ciao, questo e' un messaggio di prova per esemplificare il funzionamento del protocollo SMTP. Antonio
Si confronti le informazioni che sono state rispetto a quelle che il server ha effettivamente ricevuto tramite i comandi del protocollo SMTP.