|
Guida
ai protocolli Internet POP3 e IMAP
|
Protocollo
POP3 Overview Live Discussion - Skill: 3- INTERMEDIATE
Post Office Protocol 3 (POP3) è attualmente il protocollo
più utilizzato per il download della posta elettronica.
Il protocollo POP3 descritto nella RFC 1939, fornisce le funzioni
base per scaricare e cancellare la posta da un mail server.
Per eseguire il processo di download viene instaurata una connessione
di tipo TCP tra il client ed il server POP3 in ascolto di default
sulla porta 110.
Una sessione
POP3 consiste in una serie di comandi di tipo case-insesitive
scambiati tra client e server seguiti da uno o più argomenti
e conclusi con un CRLF (INVIO).
La sessione
passa attraversi diversi stati:
AUTHORIZATION
state: ci troviamo in questo stato in seguito all'avvenuta connessione
TCP. Il server mostra il messaggio di greeting (Saluto) ed il
client deve autenticarsi ed ottenere quindi l'autorizzazione
per gestire la posta;
TRANSACTION
state: ad autenticazione avvenuta si passa in stato fase dove
è possibile inviare i comandi al server per gestire i
messaggi di posta;
UPDATE
state: dopo aver inviato il comando QUIT si passa nella fase
di aggiornamento. Vengono eseguiti i comandi di cancellazione
precedentemente memorizzati e successivamente la connessione
TCP termina;
E' possibile
che su un server POP3 sia impostato un tempo di inattività,
trascorso il quale si viene automaticamente disconnessi senza
passare in UPDATE state. Questo significa che la connessione
TCP termina e gli eventuali comandi di cancellazione impartiti
al server non saranno presi in considerazione.
Una tipica
sessione POP3 è caratterizzata dalle seguenti fasi:
1. Il client
POP3 si connette al server POP3 costantemente in ascolto sulla
porta 110in attesa di connessioni.
2. Una
volta connessi il server invia un messaggio di saluto al client
solitamente indicando il nome e/o la versione del software server.
3. Si passa
quindi alla fase di autenticazione dove il client deve inviare
al server POP3 i comandi USER <nomeutente> e PASS <password>.
Una volta che il client è stato autenticato è
possibile eseguire le operazioni come leggere, cancellare un
messaggio ecc.
4. E' possibile
inviare i comandi al pop server il quale risponde con +OK in
caso di comando eseguito correttamente, e con -ERR nel caso
in cui non riesca ad interpretare il comando.
5. La sessione
viene terminata con il comando QUIT.
I principali
comandi utilizzati dal protocollo POP3 sono i seguenti:
USER <nomeutente>:
Identifica l'utente che si connette al server;
PASS <password>: Invia in chiaro la password dell'utente
che si sta autenticando;
STAT: Restituisce il numero di messaggi presenti e lo spazio
da essi occupato;
LIST <numero messaggio>: Senza parametri indica la dimensione
di ogni messaggio, altrimenti solo quella del messaggio indicato;
RETR <numero messaggio>: Visualizza il messaggio indicato;
TOP <numero messaggio>: Visualizza un numero predefinito
di linee dalla testa del messaggio;
DELE <numero messaggio>: Cancella dal server il messaggio
indicato;
NOOP: Non esegue nessuna operazione restituisce solo un messaggio
+OK se il server risponde;
RSET: Cancella le operazioni di cancellazione DELE in precedenza
inviate al server;
QUIT: Termina la sessione POP3 corrente e si disconnette dal
server;
Un esempio
di sessione POP3 da linea di comando:
homer@Joker:~$ telnet pop.springmail.com 110
Collegamento al pop server di nome pop.springmail.com tramite
il programma telnet sulla porta 110
Trying 213.92.5.75...
Connected to pop.springmail.com.
Escape character is '^]'.
+OK ifm-pop (version 4.0.0) at all-1.inet.it starting.
Il server risponde, ed è pronto per l'autenticazione,
ora siamo in AUTHORIZATION state
USER homer@springmail.com
+OK Password required for homer@springmail.com.
Viene inviato il nome utente in questo caso rappresentato dall'intero
indirizzo homer@springmail.com Il server risponde +OK, ovvero
che ha accettato l'utente e richiede la password
PASS hmj2001np
+OK homer@springmail.com has 1 visible message (0 hidden) in
1173 octets.
Viene inviata la password ed il processo di autenticazione termina
con successo. Ci troviamo ora in TRANSACTION state
STATS
-ERR Unknown command: "stats".
Inviando un comando errato, STATS anziché STAT, la risposta
è un -ERR
STAT
+OK 1 1256
Stat viene eseguito con successo (+OK) ed indica che c'è
un messaggio di 1256 byte
LIST
+OK 1 visible messages (1256 octets)
1 1256
.
LIST visualizza tutti i messaggi, è presente un solo
messaggio
RETR 1
+OK 1256 octets
Return-Path:
Received: from [::ffff:193.70.193.55] by hal-5.inet.it via I-SMTP-4.3.7-430
id ::ffff:193.70.193.55+8UyItiMrJDJ; Wed, 02 Apr 2003 22:47:27
+0200
Received: from email.it (62.10.125.8) by mail1c.webmessenger.it
(6.7.016) (authenticated as arnaldo.z@email.it)
id 3E8868D4001242B0 for homer@springmail.com; Wed, 2 Apr 2003
22:47:24 +0200
Message-ID:
Date: Wed, 02 Apr 2003 22:47:21 +0200
From: Arnaldo Zitti
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US;
rv:1.3) Gecko/20030312
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: homer@springmail.com
Subject: Il protocollo POP3
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 8bit
X-UIDL: A0Y7UQ00N4rWVMr9ot4i
Salve,
questo è un messaggio di prova, come sample per
l'INFOBOX sul POP3 su OpenSkills.
--
Arnaldo aka [Homer]
.
Il comando RETR visualizza l'intero messaggio
DELE 1
+OK Message 1 has been deleted.
.
Viene cancellato il messaggio 1 con il comando DELE ed il server
ne da conferma
In realtà il messaggio non viene cancellato ora, ma solo
in UPDATE state
QUIT
+OK Pop server at all-1.inet.it signing off.
Una volta dato il comando QUIT si entra in UPDATE state, ed
i messaggi verrano realmente cancellati
Connection closed by foreign host.
homer@Joker:~$
La connessione TCP è terminata e si ritorna al prompt
Durante
una sessione POP3 tramite un client di posta eletronica come
KMail, Outlook Express, Eudora od altri, è il client
stesso che in base ai parametri di configurazione dell'account
si occupa per noi di scambiare i messaggi con il server.
--- LINK
RFC POP3 - Url: http://rfc.openskills.info/rfc/1939
DESCRIPTION Protocollo IMAP Overview Live Discussion - Skill:
3- INTERMEDIATE
Internet Mail Access Control (IMAP) e' un protocollo per la
gestione della posta elettronica che permette di compiere le
elaborazioni direttamente sul server remoto.
Il protocollo
IMAP giunto alla versione 4, descritto nella RFC 2060, è
nato come candidato per la sostituzione del protocollo POP3
e presenta infatti una maggiore flessibilita', ed un sistema
di gestione piu' esteso e complesso. IMAP si basa sul concetto
di elaborare tutta la posta su un server remoto e centralizzato,
in modo di avere a disposizione l'intero insieme dei propri
messaggi da qualsiasi macchina ci si connetta, al contrario
di quanto accade tramite POP3, il quale scarica in locale i
messaggi degli utenti.
Le funzionalita'
offerte da IMAP sono:
- Accesso e gestione dei messaggi di posta direttamente sul
server;
- Possibilità di creare, cancellare e rinominare mailbox;
- Supporto della modalità di lavoro offline per i client
e successiva sincronizzazione quando possibile;
- Ricerca e selezione dei messaggi in base ad attributi quali
testo o contenuto MIME;
Una sessione
IMAP consiste in una serie di comandi inviati dal client al
server, il quale resta in ascolto sulla porta TCP 143, e terminati
da CRLF (Invio). Ogni comando deve avere un identificatore,
ovvero un prefisso alfanumerico (Es. A0001) chiamato tag che
lo precede il cui compito è quello di far corrispondere
le risposte dels server alle rispettive domande del client.
Una sessione
IMAP consiste nelle seguenti fasi:
1 - Enstaurazione della connessione da parte del client con
l'IMAP server (in ascolto sulla porta 143);
2 - Risposta del server con il messaggio di benvenuto;
3 - Autenticazione e successiva gestione delle mail da parte
del client;
4 - Termine della connessione al seguito della richiesta da
parte client o per via della scadenza del tempo di timeout;
ATTRIBUTI
DEI MESSAGGI IMAP
Avendo la possibilita' di gestire la posta in modo centralizzato
sul server, e potendo accedere quindi da diversi client, IMAP
implementa una sistema di attributi in grado di indicare lo
stato corrente di un messaggio. Per ogni messaggio vengono definiti
uno o piu' flag, i quali iniziano con il carattere "\",
che ne indicano lo stato:
- \Seen: indica che il messaggio e' stato letto;
- \Answered: indica che e' stata inviato un messagio di reply
a al messaggio;
- \Flagged: indica che sul messaggio e' stato impostato un flag
urgent o Special Attention;
- \Deleted: indica che il messaggio e' stato marcato per la
cancellazione;
- \Draft: indica che il messaggio non e' completo ed e' quindi
marcato come bozza;
- \Recent: indica che il messaggio e' appena giunto nella mailbox;
STATI DI
UNA SESSIONE IMAP
Una sessione IMAP puo' attraversare quattro stati:
- Non-Authenticated State;
- Authenticated State;
- Selected State;
- Logout State;
In relazione allo stato della sessione, sono disponibili determinati
comandi per l'elaborazione dei messaggi.
Comandi
in Non-Authenticated State
In Non-Authenticated State, si trovano gli utenti che sono collegati
al server ma che si devono ancora autenticare per avere la possibiilta'
di gestire la propria posta. I comandi disponibili in questo
stato sono:
AUTHENTICATE: indica il metodo di autenticazione da utilizzare;
LOGIN <utente> <password>: invia al server il nome
utente e la password per autenticarsi;
Comandi
in Authenticated State
Una volta forniti i corretti valori di login e password si passa
in Authenticated State. Le operazioni possibili in questo stato
sono: scegliere, esaminare, creare, cancellare, rinominare una
mailbox, controllarne lo stato e gestire le sottoscrizioni ad
altre caselle. I comandi utilizzati sono:
Select <mailbox>: seleziona la mailbox con cui lavorare;
Examine <mailbox>: seleziona la mailbox ma con accesso
in sola lettura;
Create <mailbox>: crea una nuova mailbox;
Delete <mailbox>: cancella una mailbox;
Rename <vecchio-nome-mailbox> <nuovo-nome-mailbox>:
rinomina una mailbox;
Subscribe <mailbox>: aggiungela mailbox alla lista delle
caselle attive da visualizzare in un client IMAP;
Unsubscribe <mailbox>: elimina la mailbox alla lista delle
caselle attive da visualizzare in un client IMAP ;
List <riferimento> <mailbox>: restituisce un sottoinsieme
dei nomi disponibili al client;
LSUB <riferimento> <mailbox>: restituisce un sottoinsieme
delle casella sottoscritte dall'utente;
Status <mailbox> <stato>: indica lo stato della
mailbox;
Append <mailbox> <messaggio>: aggiunge un messaggio
alla mailbox selezionata;
Comandi
Selected State
In selected state, ovvero quando si e' scelto su quale casella
elaborare sono disponibili i comandi per la gestione dei messaggi:
Check: funzione di manutenzione del server IMAP;
Close: riporta in Authenticated State e rimuove i messaggi con
flag \Delete attivo;
Expunge: rimane nello stato Selected e rimuove i messaggi con
flag \Delete attivo;
Search [setcaratteri] <parametri>: cerca i messaggi che
soddisfano i parametri di ricerca indicati;
Fetch <messaggi> <dati>: visualizza determiniti
dati di un messaggio (Es. Subject, data, testo ecc);
Store <messaggi> <valore-dati>: cambia i dati che
si voglio modificare nel messaggio. Viene solitamente usato
per cambiare i flag di stato;
Copy <messaggi> <mailbox>: copia i dati nella casella
specificata;
Uid <comando> <argomenti>: esegue i comandi impartiti
in base al numero Uid (Unique Identifier) anzichè il
numero messaggio;
Comandi
Logout State
Una volta che il client effettua una richiesta di chiusura della
connessione, si passa in logout state, successivamente appena
pronto il server terminare il collegamento.
Comandi
disponibili in ogni stato
Alcuni comandi non sono associati ad un particolare stato del
server e quindi sono sempre disponibili:
CAPABILITY: indica le funzioni supportate dal server;
NOOP: non esegue nulla, risponde in modo positivo se il server
è attivo. Utilizzato per evitare la disconnessione causa
timeout;
LOGOUT: indica al server che il client vuole terminare la connessione;
Un esempio
di sessione IMAP tramite telnet:
[homer@Enigma
homer]# telnet imap.joker.net 143
* OK [CAPABILITY IMAP4REV1 LOGIN-REFERRALS STARTTLS AUTH=LOGIN]
joker.net IMAP4rev1 2001.315 at Sun, 13 Jul 2003 22:09:17 +0200
(CEST)
Il server risponde e visualizza la versione del protocollo.
Siamo in Non-Authenticated State.
a100 LOGIN homer onslls
a100 OK [CAPABILITY IMAP4REV1 IDLE NAMESPACE MAILBOX-REFERRALS
SCAN SORT THREAD=REFERENCES THREAD=ORDEREDSUBJECT MULTIAPPEND]
User homer authenticated
Viene eseguito il login e l'utente è accettato. Siamo
in Authenticated State.
a101 select inbox
Viene selezionata la mailbox inbox (la posta in arrivo). Siamo
in Selected State.
* 2 EXISTS
* NO Trying to get mailbox lock from process 925
* 0 RECENT
* OK [UIDVALIDITY 1058126897] UID validity status
* OK [UIDNEXT 3] Predicted next UID
* FLAGS (NonJunk \Answered \Flagged \Deleted \Draft \Seen)
* OK [PERMANENTFLAGS (NonJunk \* \Answered \Flagged \Deleted
\Draft \Seen)] Permanent flags
* OK [UNSEEN 1] first unseen message in /var/spool/mail/homer
a101 OK [READ-WRITE] SELECT completed
La prima voce 2 EXISTS indica che sono presenti due messaggi
a102 fetch 1:2 (flags body[header.fields (subject)])
Viene effettuata una richiesta di visualizzazione dei subject
delle due mail presenti...
* 1 FETCH (FLAGS (\Seen NonJunk) BODY[HEADER.FIELDS ("SUBJECT")]
{37}
Subject: Protocollo IMAP Overview
)
* 2 FETCH (FLAGS (\Seen NonJunk) BODY[HEADER.FIELDS ("SUBJECT")]
{20}
Subject: Prova 2
)
a102 OK FETCH completed
a103 FETCH 1 (body[text])
Richiesta del corpo del messaggio 1
* 1 FETCH (BODY[TEXT] {105}
Messaggio di prova,
relativo all'Infobox sul protocollo IMAP per Openskills
--
Arnaldo aka Homer
)
a104 STORE 1 +FLAGS (\Deleted)
Il messaggio 1 viene marcato con il flag \Deleted ovvero da
cancellare
* 1 FETCH (FLAGS (\Seen \Deleted NonJunk))
a104 OK STORE completed
a105 EXPUNGE
Vengono cancellati i messaggi con il flag \Deleted attivo (in
questo caso il messaggio 1)
* 1 EXPUNGE
* 1 EXISTS
* 0 RECENT
a105 OK Expunged 1 messages
a106 LOGOUT
Una volta lanciato il comando logout si entra in Logout State
* BYE joker.net IMAP4rev1 server terminating connection
a106 OK LOGOUT completed
Il server invia il messaggio BYE e termina la connessione
|