Per gestire i messaggi di posta elettronica (email), la suite TCP/IP prevede diversi
protocolli. Il protocollo SMTP si utilizza per la spedizione di messaggi e
per lo scambio di messaggi tra server; i protocolli POP e IMAP,
invece, si usano per la ricezione (download) dei messaggi da un server di posta
ad un client.
Il sistema di gestione delle email è basato sullo scambio di messaggi tra utenti, ogni
utente possiede un indirizzo email nella forma nome@dominio
. La parte dominio
dell’indirizzo individua un server da contattare, mentre la parte di nome
individua
una casella di posta (inbox) all’interno del server (ovviamente dominio
o
nome
potrebbero non esistere).
Lo scambio di messaggi avviene sia tra client e server, sia tra server e server,
il meccanismo è simile a quanto avviene in un sistema postale, la lettera viene
consegnata all’ufficio più vicino che la smista attraverso il sistema all’ufficio che
sta più vicino al destinatario per la consegna.
I protocolli per la gestione della posta sono di due tipi:
- protocollo SMTP per la consegna dei messaggi e
- protocolli POP e IMAP per la consultazione della propria casella di posta.
Nell’esempio che segue vediamo come una tipica comunicazione email viene gestita dal
sistema di client e server mail e quali dei protocolli sono coinvolti in ogni passo
della comunicazione.
Ad esempio se Alice vuole mandare una mail a Bob usando il suo client di posta
(ad esempio Thunderbird, Outlook, …), il client creerà un pacchetto SMTP per il
messaggio e lo consegna al mail server impostato per l’account (esempio mail.cisco.com
).
Successivamente il mail server utilizza il protocollo SMTP per consegnare alla sua controparte
(esempio mail.nyu.edu
) il messaggio spedito da alice@cisco.com
nella casella (inbox)
bob@nyu.edu
.
Infine, quando Bob sincronizza il proprio client di posta con il server associato al
suo account (mail.nyu.edu
), client e server dialogano mediante uno tra POP e IMAP.
Importante
Se destinatario e mittente hanno lo stesso dominio (esempio entrambi @cisco.com
), lo
stesso server che riceve, via SMTP il messaggio dal mittente lo memorizza nella casella
del destinatario per consegnarlo, via POP o IMAP, quando questo richiede l’accesso alla
propria casella.
Attenzione: Client Web
Oggi è sempre più diffuso l’utilizzo di client web, ad esempio accedendo da un browser
a mail.google.com
si può accedere alla propria casella senza scaricare nulla sul proprio
dispositivo ed utilizzando un’interfaccia HTML mediante protocollo HTTP.
In questo caso, l’applicazione web per la gestione della casella
SMTP
Il protocollo Simple Mail Transfer Protocol (SMTP) è utilizzato per spedire un messaggio di posta
dal mittente alla casella del destinatario. Come visto sopra, ci sono due modi di utilizzo del
protocollo:
- tra cliente e server per l’invio di un messaggio di posta;
- tra server e server per lo scambio di messaggi di posta.
L’attuale specifica di SMTP è contenuta nell’RFC 5321.
Porte note SMTP
SMTP utilizza il protocollo TCP
per il livello di trasporto, un server SMTP si trova in
attesa di connessioni sulla porta 25
per le comunicazioni da altri server e sulla porta
587
(sempre TCP) per le comunicazioni da client.
È importante notare che il mail server cisco.com
, quando consegna il messaggio al mail
server nyu.edu
si comporta come un client, nel senso che è lui ad aprire la connessione
TCP. Per meglio distinguere il ruolo di un “agente” SMTP si indica con
- Mail User Agent (MUA) il client di posta (che usa la porta
587
) - Mail Transfer Agent (MUA) il server di posta che consegna un messaggio (usando la porta
25
).
Nell’esempio sopra, il client di Alice è l’MUA, mentre il server mail cisco.com
è l’MTA.
Funzionamento di SMTP
Dop aver aperto la connessione TCP alla porta corretta, il protocollo SMTP prevede una
sequenza di comandi per lo scambio di messaggi.
HELO
utilizzato dal client per “presentarsi” al serverMAIL FROM:
indica chi è il mittente del messaggioRCPT TO:
indicati quali sono i destinatari del messaggioDATA
indica il contenuto del messaggio (termina con una riga contenente il solo punto .
)QUIT
chiude la connessione
la sequenza MAIL FROM:
, RCTP TO:
, DATA
può essere ripetuta se più messaggi
devono essere spediti dallo stesso client allo stesso server (a meno che non sia
stato spedito il comando QUIT
che chiude la connessione).
Di seguito un esempio di conversazione tra un server S
SMTP e un clinet
C
SMTP (Fonte SMTP su Wikipedia (EN))
S: 220 smtp.example.com ESMTP Postfix
C: HELO relay.example.org
S: 250 Hello relay.example.org, I am glad to meet you
C: MAIL FROM:<bob@example.org>
S: 250 Ok
C: RCPT TO:<alice@example.com>
S: 250 Ok
C: RCPT TO:<theboss@example.com>
S: 250 Ok
C: DATA
S: 354 End data with <CR><LF>.<CR><LF>
C: From: "Bob Example" <bob@example.org>
C: To: "Alice Example" <alice@example.com>
C: Cc: theboss@example.com
C: Date: Tue, 15 Jan 2008 16:02:43 -0500
C: Subject: Test message
C:
C: Hello Alice.
C: This is a test message with 5 header fields and 4 lines in the message body.
C: Your friend,
C: Bob
C: .
S: 250 Ok: queued as 12345
C: QUIT
S: 221 Bye
{The server closes the connection}
POP
Il Post Office Protocol (POP) è utilizzato per recuperare da una casella di posta
i messaggi in essa contenuti. Attualmente la versione utilizzata è POP3 definita
nell’RFC 5024.
Porte note POP3
Al protocollo POP3 sono riservate due porte note, la porta TCP numero 110
e la
porta TCP numero 995
. La seconda delle due porte note è riservata alla versione
secure del protocollo chiamata POP3S (simile ad http).
Funzionamento di POP3
Una volta stabilita la connessione TCP tra client (C
) e server (S
), i due
instaurano un “dialogo” attraverso comandi impartiti dal client a cui il server
risponde. I principali comandi POP3 sono i seguenti:
USER
il client si identifica presso il server (primo comando)PASS
il client fornisce la propria password (secondo comando)STAT
richiede il numero e la dimensione totale dei messaggiLIST
restituisce la lista dei messaggiRETR
restituisce il messaggio con indice indicatoDELE
elimina il messaggio con indice indicatoQUIT
chiude la connessione
Qui sotto vediamo un esempio di comunicazione tra client e server durante la quale
due messaggi vengono recuperate e cancellati (Fonte: Wikipedia POP (EN)).
C: STAT
S: +OK 2 320
C: LIST
S: +OK 2 messages (320 octets)
S: 1 120
S: 2 200
S: .
C: RETR 1
S: +OK 120 octets
S: <the POP3 server sends message 1>
S: .
C: DELE 1
S: +OK message 1 deleted
C: RETR 2
S: +OK 200 octets
S: <the POP3 server sends message 2>
S: .
C: DELE 2
S: +OK message 2 deleted
C: QUIT
S: +OK dewey POP3 server signing off (maildrop empty)
Attenzione: Limiti di POP3
Il protocollo POP3 non prevede la differenziazione tra messaggi letti e messaggi
non letti, dal punto di vista di POP3 la casella di posta è una sequenza di messaggi
numerati 1,2,...
.
Inoltre POP3 non prevede alcun tipo di organizzazione dei messaggi all’interno
della casella, non sono quindi previste cartelle, posta in arrivo, posta inviati
né altre modalità di organizzazione e classificazione dei messaggi.
Per questi motivi, la gestione di una casella di posta con accesso mediante POP3
risulta difficoltosa. Il protocollo IMAP è stato creato proprio per
sopperire a queste mancanze del protocollo POP3.
IMAP
Il protocollo Internet Message Access Protocol (IMAP) è utilizzato per recuperare
da una casella di posta i messaggi oltre che ad organizzarli nella stessa casella.
Il protocollo IMAP è definito nell’RFC 9051 (attualmente la revisione 2 della
versione 4 del protocollo).
Porte note IMAP
Al protocollo IMAP sono riservate due porte note, la porta TCP numero 143
e la
porta TCP numero 993
. La seconda delle due porte note è riservata alla versione
secure del protocollo chiamata IMAPS (simile a POP).
Funzionamento di IMAP
Il funzionamento di IMAP assomiglia a quello di POP3, ma con l’importante differenza
rappresentata dal concetto di cartella o mailbox. Le cartelle sono dei modi
di organizzare logicamente i messaggi all’interno del server. È perciò possibile
tener traccia di varie cose non possibili in POP: messaggi non letti, messaggi archiviati,
cestino, … Altra differenza importante è la possibilità di recuperare (FETCH
)
solo i messaggi di una specifica cartella.
Di seguito presentiamo una breve lista dei principali comandi IMAP.
LOGIN
procede all’autenticazione presso il serverSELECT
seleziona una cartellaCREATE
crea una nuova cartella sul serverDELETE
elimina una cartellaLIST
restituisce l’elenco della cartella selezionataCLOSE
chiude la cartella selezionataFETCH
recupera i messaggi da una cartellaLOGOUT
chiude l’attuale sessione
S: * OK IMAP4rev1 Service Ready
C: a001 login mrc secret
S: a001 OK LOGIN completed
C: a002 select inbox
S: * 18 EXISTS
S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
S: * 2 RECENT
S: * OK [UNSEEN 17] Message 17 is the first unseen message
S: * OK [UIDVALIDITY 3857529045] UIDs valid
S: a002 OK [READ-WRITE] SELECT completed
C: a003 fetch 12 full
S: * 12 FETCH (FLAGS (\Seen) INTERNALDATE "17-Jul-1996 02:44:25 -0700"
RFC822.SIZE 4286 ENVELOPE ("Wed, 17 Jul 1996 02:23:25 -0700 (PDT)"
"IMAP4rev1 WG mtg summary and minutes"
(("Terry Gray" NIL "gray" "cac.washington.edu"))
(("Terry Gray" NIL "gray" "cac.washington.edu"))
(("Terry Gray" NIL "gray" "cac.washington.edu"))
((NIL NIL "imap" "cac.washington.edu"))
((NIL NIL "minutes" "CNRI.Reston.VA.US")
("John Klensin" NIL "KLENSIN" "MIT.EDU")) NIL NIL
"<B27397-0100000@cac.washington.edu>")
BODY ("TEXT" "PLAIN" ("CHARSET" "US-ASCII") NIL NIL "7BIT" 3028
92))
S: a003 OK FETCH completed
C: a004 fetch 12 body[header]
S: * 12 FETCH (BODY[HEADER] {342}
S: Date: Wed, 17 Jul 1996 02:23:25 -0700 (PDT)
S: From: Terry Gray <gray@cac.washington.edu>
S: Subject: IMAP4rev1 WG mtg summary and minutes
S: To: imap@cac.washington.edu
S: cc: minutes@CNRI.Reston.VA.US, John Klensin <KLENSIN@MIT.EDU>
S: Message-Id: <B27397-0100000@cac.washington.edu>
S: MIME-Version: 1.0
S: Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
S:
S: )
S: a004 OK FETCH completed
C a005 store 12 +flags \deleted
S: * 12 FETCH (FLAGS (\Seen \Deleted))
S: a005 OK +FLAGS completed
C: a006 logout
S: * BYE IMAP4rev1 server terminating connection
S: a006 OK LOGOUT completed
Riferimenti