2012-03-31 22 views
11

Sto implementando un client IMAP, e ho un problema con la sincronizzazione della cassetta postale IMAP.IMAP sincronizzazione

In primo luogo, va bene per andare a prendere nuove mail dal server IMAP, ma non so come trovare i messaggi eliminati da una cassetta postale.

Devo recuperare tutti i messaggi dal server e confrontarlo con i dati locali per la sincronizzazione?

risposta

21

L'approccio più comune è quello di eseguire i seguenti due comandi per ciascuna cartella:

. EXAMINE "<foldername>" 
. FETCH 1:* (UID FLAGS) 

Il primo comando seleziona una cartella restituisce il UIDVALIDITY della cartella. Se questo valore corrisponde precedentemente restituito UIDVALIDITY per questa cartella, si può fare affidamento sul UID. Il secondo comando restituisce (almeno) il UID e tutti FLAGS per ogni mail nella cartella selezionata.

  • si dovrebbe usare il UID per rilevare quali mail sono stati aggiunti o rimossi. Si noti che il contenuto di un'e-mail non può essere modificato senza cambiare anche lo UID.
  • In IMAP di base, i FLAGS sono gli unici attributi che possono essere modificati per una e-mail. I flag contengono informazioni sulla posta in lettura (\Seen) e messaggi di posta elettronica cancellati (\Deleted).

Questo approccio è utilizzato dalla maggior parte dei client e la maggior parte dei server IMAP è ottimizzata per loro. Il fattore limitante è solitamente la larghezza di banda disponibile tra client e server.

Le seguenti situazioni sono un po 'più complicato:

  • Cosa si deve fare se UIDVALIDITY non corrisponde? Le specifiche IMAP richiedono che i server facciano del loro meglio per evitare modifiche non necessarie a questo valore.
  • Dovrebbe esserci un'ottimizzazione per le mail spostate (effettivamente le e-mail copiate)? Nell'IMAP di base, non è possibile rilevare che un'e-mail sia una copia di un'altra e-mail, indipendentemente dal fatto che l'e-mail nella cartella di origine esista ancora o che sia già stata eliminata e cancellata.
+1

L'estensione UIDPLUS può aiutare con le e-mail spostate/copiate. Un altro metodo per scoprire i messaggi cancellati è usare UID SEARCH: cartella "EXAMINE" "' then 'UID SEARCH 1: *'. Ciò fornirà un elenco di tutti gli UID attualmente presenti nella cassetta postale, che possono essere confrontati con la cache locale. – Max

10

Forse troppo tardi per la vostra applicazione, ma si può trovare una strategia di sincronizzazione completa IMAP in questo RFC: http://tools.ietf.org/html/rfc4549!