User Tools

Site Tools


doc:appunti:linux:sa:offlineimap3

This is an old revision of the document!


offlineimap3 sincronizzazione IMAP: UID validity

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 step incrementali.

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
doc/appunti/linux/sa/offlineimap3.1711099740.txt.gz · Last modified: 2024/03/22 10:29 by niccolo