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.
Post Office Protocol e Interactive Mail Access Protocol: sintassi