Simple Mail Transfer Protocol: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m Corretto: "affidamento su"
FrescoBot (discussione | contributi)
m Bot: template:apostrofo e modifiche minori
Riga 51:
SMTP è un protocollo [[connection oriented]], [[text based]], nel quale un mail sender comunica con un mail receiver inviando stringhe di comandi e fornendo le informazioni necessarie attraverso un canale di comunicazione affidabile, tipicamente basato su [[TCP/IP|TCP]]. Una sessione SMTP consiste nello scambio di comandi generati da un client SMTP e le corrispettive risposte del server SMTP. Una sessione può includere zero o più transazioni SMTP. Una ''transazione SMTP'' consiste in tre sequenze di comandi e risposte:
# '''<code>MAIL FROM</code>''': comando per definire l’indirizzo di ritorno, chiamato anche return-path<ref>{{Cita web|url=https://cr.yp.to/smtp/mail.html|titolo=The MAIL, RCPT, and DATA verbs}}</ref>, reverse-path<ref name="tools.ietf.org"/>, bounce address, mfrom o envelope sender.
# '''<code>RCPT TO</code>''': comando per definire il destinatario del messaggio. Questo comando può essere inviato più volte, una per ogni destinatario (gli indirizzi fanno parte della struttura (envelope)).
# '''<code>DATA</code>''': comando inviato per segnalare l’inizio del messaggio di testo, il contenuto del messaggio, come definito nell'envelope. Consiste di un header ed un body, separati da una linea vuota. <code>DATA</code> tuttavia è un insieme di comandi ai quali il server risponde due volte: la prima volta come conferma di ricezione del testo (acknowledge), la seconda dopo la sequenza di end-of-data per accettare o rifiutare l’intero messaggio.
Oltre alle risposte intermedie al comando '''<code>DATA</code>''', ogni risposta del server può essere positiva (caratterizzata dal codice 2xx) o negativa. Le riposte negative possono essere permanenti (5xx) o temporanee (4xx). Un rifiuto ('''reject''') rappresenta un fallimento permanente e il client dovrebbe inviare un bounce message al server dal quale ha ricevuto il messaggio. Un '''drop''' è una risposta positiva, seguita dal messaggio di rifiuto, invece che dal messaggio di avvenuta consegna.
Riga 162:
L'inizio della trasmissione del testo della mail è identificata dal comando <code>DATA</code>, dopo il quale il testo è trasmesso linea per linea e termina con la sequenza <code><CR><LF>.<CR><LF></code>detta sequenza di ''end-of-data''. Poiché una linea può contenere solamente un punto (.) come parte del testo, il client manda ''due'' punti consecutivi ogni volta che una linea inizia con un punto. Analogamente il server sostituisce ogni sequenza di due punti consecutivi con uno solo (questa tecnica è chiamata ''dot-stuffing'').
 
La risposta positiva del server all’all{{'}}''end-of-data'' significa che il server si è preso in carico la consegna del messaggio. Un messaggio può essere duplicato se, in questa fase, avviene un problema di comunicazione, causato per esempio da un calo di corrente. Finché il mittente non riceve il messaggio con codice <code>250</code>, si suppone che il messaggio non sia stato consegnato. Analogamente dopo che il destinatario ha deciso di accettare il messaggio, il mittente assume che il messaggio sia stato consegnato. Tuttavia, durante questo arco di tempo (tempo che intercorre tra quando il messaggio è stato inviato a quando il client riceve la risposta caratterizzata dal codice 250), entrambi gli agent hanno copie attive di messaggi che tentano di consegnare<ref>{{Cita web|url=https://tools.ietf.org/html/rfc1047|titolo=RFC 1047}}</ref> e questo può causare problemi di messaggi duplicati. Per limitare questo fenomeno solitamente si specifica un tempo di timeout compreso tra 5 e10 minuti<ref>{{Cita web|url=https://tools.ietf.org/html/rfc5321#section-4.5.3.2.6|titolo=RFC 5321 sezione 4.5.3.2.6}}</ref>.
 
Il comando <code>QUIT</code> termina la sessione. Se la mail ha altri destinatari, il client si connetterà ad un opportuno server SMTP per i successivi destinatari. Le informazioni che il client invia coi comandi <code>HELO</code> e <code>MAIL FROM</code>, sono inserite (non mostrate nel codice di esempio) nella mail come campi ''header'' aggiuntivi, dal server destinatario, aggiungendo rispettivamente i campi ''Received'' e ''Return-Path''.