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 [email protected]
+OK Password required for [email protected].
Viene inviato il nome utente in questo caso rappresentato dall'intero indirizzo [email protected] Il server risponde +OK, ovvero che ha accettato l'utente e richiede la password
PASS hmj2001np
+OK [email protected] 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 [email protected])
id 3E8868D4001242B0 for [email protected]; 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: [email protected]
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.
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
Come per gli altri protocolli a livello applicativo, un client di posta che supporta IMAP si occuperà per l'utente di scambiare i messaggi con il server.