E' il protocollo standard per il servizio di posta elettronica. E' un protocollo di tipo
TCP/IP che definisce il formato del messaggio e l'agente di trasferimento messaggio
(MTA), il quale memorizza e invia il messaggio. SMTP era stato definito in origine per il
solo testo ASCII, ma la definizione del metodo di codifica MIME ed altri metodi di
codifica abilitano il protocollo alla possibilità di effettuare attachments ai messaggi SMTP standard. Questo protocollo gestisce il trasferimento della posta dal sistema di posta di una macchina alla posta di un’altra macchina. Non è suo compito accettare la posta diretta ad altri utenti della stessa macchina; queste sono operazioni che spettano al sistema di posta locale.
In sostanza SMTP si occupa solo della posta diretta a utenti di macchine remote.
Il client SMTP accerta l'indirizzo IP della macchina di destinazione con il DNS e lo utilizza con il port "well-known" di SMTP (25), per iniziare la connessione con il server SMTP nella macchina di destinazione. L'inoltro della posta richiede lo scambio di stringhe chiamate comandi. Tutti i comandi sono codificati come stringhe ASCII e comprendono un numero di 3 cifre oppure un comando in formato testo o entrambi.
I comandi più utilizzato sono i seguenti:
Hello(helo)
Questo comando serve per identificare il client (sender-SMTP), l’argomento contiene
l’host name dello stesso client;
Mail
Questo comando è utilizzato per inizializzare la vera e propria transazione. In questo caso
si deve indicare il mittente (reverse-path), a cui è riferita la creazione della e-mail;
Recipient (rept)
Questo comando è usato per identificare il destinatario della Email. Si possono creare più
destinatari con l' uso multiplo di questo comando;
Data
Una volta digitato questo comando il server capirà che i successivi dati fanno parte del
body della e-mail;
Quit
Questo comando è la fine della transazione, il server risponderà con un messaggio di
conferma e chiuderà la transazione stessa.
Di seguito vediamo un esempio in cui sono utilizzati tutti questi comandi:
stabilita la connessione TCP, il server SMTP invia il comando 220 al client per indicare che è pronto a ricevere la posta;
il client risponde ritornando un comando HELO insieme all'indirizzo IP della macchina su cui si trova. Il server risponde con l'identità della propria macchina;
il client invia l'intestazione della posta fornendo un comando MAIL seguito dalla riga FROM: presa dall'intestazione del messaggio;
il server replica con il comando generale 250, la conferma di ricezione;
il client continua inviando un comando RCPT seguito dalla riga TO: presa dall'intestazione della posta;
questo viene confermato ancora da un comando 250; qualunque ulteriore riga d'intestazione è inviata nello stesso modo;
l'inizio dei contenuti è segnalato con il comando DATA;
il server risponde con un comando 354;
il client spedisce la posta come sequenza di righe terminate da un punto;
il server conferma la ricezione col comando 250;
per terminare, il client invia un comando QUIT;
il server ritorna un comando 221 e chiude la connessione TCP.
L' elenco dei Reply number sono i seguenti:
211 System status, or system help reply
214 messaggio di Help
220
221
250 Richieste di azione completata, OK.
251 Utente non locale; si spedirà a <forward-path>
354 Inizia l'input dei dati; finisce con <CRLF>.<CRLF>
421 Servizio non avviabile
450 Richiesta di azione non avviabile [E.g., mailbox piena]
451 Richiesta di azione abbortita: errore locale durante il processo
452 Richiesta di azione abbortita: spazio di sistema insufficiente
500 Errore di sintassi, comando non riconosciuto
501 Errore di sintassy nei parametri o negli argomenti
502 Comando non implementato
503 Cattiva sequenza del comando
504 Parametri del comando non implementati
550 Richiesta di azione non presa: mailbox inavvibile
551 Utente non locale; perfavore prova <forward-path>
552 Richiesta di azione abbortita: si eccede l'allocazione di spazio
553 Richiesta di azione non presa: nome della mailbox non permesso
554 Transazione fallita
Lo standard SMTP è un protocollo "furbo", perché prevede alcune astuzie come quella di non obbligare il trasferimento di un messaggio più di una volta qualora questo abbia più destinatari, o quella di verificare prima l'esistenza del luogo di destinazione, evitando così di lasciare trasferire inutilmente i dati sul server per poi scoprire che il messaggio non è giunto a destinazione, per esempio a causa di un errore nella digitazione dell'indirizzo.
Tutto quanto riportato in questa pagina è a puro scopo informativo personale. Se non ti trovi in accordo con quanto riportato nella pagina, vuoi fare delle precisazioni, vuoi fare delle aggiunte o hai delle proposte e dei consigli da dare, puoi farlo mandando un email. Ogni indicazione è fondamentale per la continua crescita del sito.