Table of Contents
offlineimap3 sincronizzazione IMAP: UID validity problem
Con il tool offlineimap3 è possibile tenere sincronizzati due account IMAP in modo bidirezionale. Ovviamente è possibile utilizzare lo strumento anche per migrare un account IMAP da un server ad un altro.
In caso di migrazione si può sfruttare il concetto di sincronizzazione per effettuare la copia verso il nuovo server senza interrompere il servizio e procedere con più passaggi fino a che la quasi totalità della mailbox non sia sincronizzata. Solo prima dell'ultima iterazione di sincronizzazione si interrompe il servizio e si punta il client sul nuovo server.
Problema UID validity
Lo UIDVALIDITY è un intero 32 a bit che identifica in modo univoco una cartella IMAP. In genere non cambia da un accesso ai successivi, a meno che la cartella non sia stata eliminata e poi creata nuovamente. Un altro motivo per cui la UIDVALIDITY può cambiare ad ogni accesso è che sul server si sia esaurita la quota disco, per cui il server IMAP non è in grado di salvare la UIDVALIDITY corrente e ne genera una nuova ad ogni sessione.
offlineimap3 utilizza lo UIDVALIDITY della cartella e lo UID di ogni messaggio per sapere se il messaggio è già stato sincronizzato da un server all'altro, nel caso in cui venga riscontrata un cambiamento fra il valore fornito dal server IMAP e il valore memorizzato in una sincronizzazione precedente viene generato un messaggio di errore del tipo:
UID validity problem for folder INBOX (repo Manitu) (saved 1121762284; got 709908459);
Questo errore non impedice la propagazione dei nuovi messaggi, ma interrompe la sincronizzazione bidirezionale.
La soluzione proposta nelle FAQ What is the UID validity problem for folder? in realtà resetta ogni memoria delle sincronizzazioni precedenti, pertanto i messaggi verranno scaricati nuovamente e andranno a duplicare quelli esistenti.
Lo UIDVALIDITY su un sistema GNU/Linux con server IMAP Courier viene memorizzato nel file $HOME/Maildir/courierimapuiddb.
Lo UIDVALIDITY su un sistema GNU/Linux con server IMAP Dovecot viene memorizzato (in esadecimale) nel file $HOME/Maildir/dovecot-uidvalidity, viene anche creato un file di lunghezza zero con nome del tipo $HOME/Maildir/dovecot-uidvalidity.[uid_hex].
Alla prima esecuzione di offlineimap3 gli UIDVALIDITY dei due server in sincronizzazione vengono memorizzati in file del tipo $HOME/.offlineimap/Repository-[SERVER_NAME]/FolderValidity/[FOLDER_NAME].
Per interrogare un server IMAP circa la UIDVALIDITY di una cartella si possono usare i seguenti comandi:
telnet imap.server.org 143
a1 CAPABILITY a2 LOGIN login_name MySecret a3 LIST "" "*" a4 SELECT INBOX ... * 242 EXISTS * 0 RECENT * OK [UIDVALIDITY 1195040922] Ok ... a7 LOGOUT
Origine del problema
Non è chiaro il motivo per cui la UID validity della cartella IMAP sorgente è cambiato fra una sincronizzazione e la successiva. Una causa potrebbe essere qualche problema durante le operazioni IMAP, nel nostro caso il server Courier IMAP ogni tanto logga i seguenti messaggi di errore:
Mar 21 11:13:16 imap_server imapd: error copying a message, user=login_name, errno=122
Purtroppo non ci sono ulteriori dettagli sul motivo di tale errore.