User Tools

Site Tools


doc:appunti:linux:sa:imap

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
doc:appunti:linux:sa:imap [2013/10/14 18:22] – [offlineimap] niccolodoc:appunti:linux:sa:imap [2024/03/21 12:56] (current) – [offlineimap] niccolo
Line 41: Line 41:
 a6 OK FETCH completed. a6 OK FETCH completed.
 a7 LOGOUT a7 LOGOUT
 +</code>
 +
 +Some IMAP servers present all the folders as subfolders of the INBOX:
 +
 +<code>
 +a3 LIST "" "*"
 +* LIST (\HasNoChildren)       "." "INBOX.Sent"
 +* LIST (\HasNoChildren)       "." "INBOX.Trash"
 +* LIST (\HasNoChildren)       "." "INBOX.Spam"
 +* LIST (\Marked \HasChildren) "." "INBOX"
 +a4 CREATE INBOX.Archive
 +</code>
 +
 +For other IMAP servers, the folders are outside the INBOX:
 +
 +<code>
 +a3 LIST "" "*"
 +* LIST (\HasNoChildren)                 "." Spam
 +* LIST (\HasNoChildren \Drafts)         "." Drafts
 +* LIST (\HasNoChildren \UnMarked \Sent) "." Sent
 +* LIST (\HasNoChildren \Trash)          "." Trash
 +* LIST (\HasNoChildren)                 "." INBOX
 +a4 CREATE Archive
 </code> </code>
  
 ===== Migrating IMAP folder ===== ===== Migrating IMAP folder =====
  
-==== imapsync ====+==== offlineimap ====
  
-To migrate an IMAP account from one host1 to host2, there is the **''[[http://www.linux-france.org/prj/imapsync/|imapsync]]''** toolIn this usage example mail messages not longer existing on host1 will be deleted also on host2:+Sincronizza una cartella su server **IMAP remoto** con una **Maildir locale** oppure un altro **server IMAP**. Sembra il programma più flessibile e semplice da utilizzare rispetto a **isync**, **mailsync**, **interimap**, **imapsync** e **imapcopy**..
  
-<code bash> +**ATTENZIONE** :!: Le versioni **6.3.4** di Debian Wheezy e **6.5.4** hanno diversi bug.
-#!/bin/sh+
  
-login1=username_on_host1 +**ATTENZIONE** :!: La versione **7.3.0** (git20210225) di Debian 11.3 Bullseye ha un bug con le cartelle IMAP che **contengono degli spazi** (vedere pull risolutivo [[https://github.com/OfflineIMAP/offlineimap3/pull/80|#80]]). Un rimedio temporaneo è creare manualmente la cartella IMAP sul server ricevente. Esiste il pacchetto **offlineimap3_0.0~git20211018.e64c254+dfsg-1~bpo11+1_all.deb** in bullseye-backports.
-passwd1=SecretOnHost1 +
-login2=username_on_host2 +
-passwd2=SecretOnHost2+
  
-./imapsync \ +**ATTENZIONE** :!: Il programma effettua una sincronizzazione **bidirezionale**, ma noi siamo interessati alla migrazione di una mailbox da un server ad un altro, pertanto **la bidirezionalità è un rischio**. In caso di confusione sul nome delle cartelle tra i due repository e sullo stato dell'ultima sincronizzazione, c'è il **rischio concreto di eliminare i messaggi dal server di origine**
-    --host1 83.145.162.149 \ + 
-    --authmech1 LOGIN \ +**ATTENZIONE** :!: La versione **8.0.0** (Debian GNU/Linux 12 Bookworm) non riesce a gestire correttamente la sincronizzazione con server Courier IMAP in presenza di sottocartelle di primo livello o ulteriori. Vedere l'**[[https://github.com/OfflineIMAP/offlineimap3/issues/188|issue #188]]**
-    --user1 "$login1" \ + 
-    --password1 "$passwd1\ +Pertanto, prima di iniziare la sincronizzazione, è opportuno indagare quali cartelle sono presenti sul server di origine e **il loro percorso**. Inoltre, se si cambia il file di configurazione, è opportuno rimuovere tutti i file di stato che vengono salvati in **$HOME/.offlineimap/** relativi ad **%%Account-*%%** e **%%Repository-*%%**. 
-    --subscribed \ + 
-    --host2 127.0.0.1 \ +=== Esempio #1: da IMAP a Maildir === 
-    --authmech2 LOGIN + 
-    --user2 "$login2" \ +Il primo esempio riguarda una migrazione da repository **IMAP remoto** a **Maildir locale**. Prepariamo il file di configurazione **offlineimap-imap-maildir.conf**: 
-    --password2 "$passwd2" \ + 
-    --subscribe \ +<file> 
-    --delete2 --expunge2+[general] 
 +accounts = Test 
 + 
 +[Account Test] 
 +remoterepository = RemoteIMAP 
 +localrepository = Localhost 
 + 
 +[Repository RemoteIMAP] 
 +type = IMAP 
 +# Strip the "INBOXprefix when copying to a local Maildir, examples: 
 +# 'INBOX'       => '.' 
 +# 'INBOX.Trash' => '.Trash' 
 +# 'INBOX.Sent'  => '.Sent' 
 +nametrans = lambda foldername: re.sub('^INBOX\.*', '.', foldername) 
 +remotehost = mail.example.org 
 +remoteuser = username 
 +remotepass = MySecret 
 +createfolders = False 
 +sslcacertfile = /usr/share/ca-certificates/mozilla/Actalis_Authentication_Root_CA.crt 
 +ssl_version = tls1_2 
 +# If you don't want IMAPS on port 993, you can use STARTTLS on port 143. 
 +#ssl = no 
 +#starttls = yes 
 + 
 +[Repository Localhost] 
 +type = Maildir 
 +localfolders = /home/username2/Maildir 
 +</file> 
 + 
 +Per impostazione predefinita offlineimap tenta una connessione **SSL** su porta **993/TCP**, verificando il certificato del server remoto. Senza l'opzione **sslcacertfile** il client offlineimap non è in grado di inziare la sessione TLS e si blocca con il seguente errore: 
 + 
 +<code> 
 +offlineimap.error.OfflineImapError: No CA certificates and no server fingerprints configured. 
 +    You must configure at least something, otherwise having SSL helps nothing.
 </code> </code>
  
-FIXME Problema con allegati con BODY vuotiinvece di saltare il messaggio il programma si blocca. +Per vedere quale Certification Authority deve essere usata è necessario recuperare il certificato SSL dal server remoto, ad esempio con il comando:
-==== imapcopy ====+
  
-Il tool non supporta SSL né TLS, inoltre **non effettua una sincronizzazione**, ma una copia; quindi se viene eseguito due volte i messaggi vengono duplicati.+<code> 
 +openssl s_client -showcerts -connect mail.example.org:993 
 +</code>
  
-Si prepara un file di configurazione **''$HOME/ImapCopy.cfg''** con le seguenti opzioni:+Quindi si ispeziona la **certificate chain** alla ricerca di **O**rganization e **C**ommon **N**ame con valori del tipo: 
 + 
 +  * O = Actalis S.p.A., CN = Actalis Organization Validated Server CA G3 
 +  * O = Let's Encrypt, CN = R3 
 + 
 +Avendo installato il pacchetto **ca-certificates**, si cerca nella directory **/usr/share/ca-certificates/mozilla/** il certificato giusto da usare. Dopo aver abilitato SSL si può incappare anche nel seguente errore:
  
 <code> <code>
-SourceServer host1 +[SSL: DH_KEY_TOO_SMALL] dh key too small (_ssl.c:727)
-SourcePort 143 +
-DestServer host2 +
-DestPort 143 +
-converttimezone "UTC" "+0000" +
-converttimezone "UT"  "+0000" +
-Copy "login1"  "password1"  "login2"  "password2"+
 </code> </code>
  
-Lanciare il comando con l'opzione **''-l''** in modo che venga creato il file di log ''imapcopy.log''.+Questo significa che il server utilizza una versione debole di SSL, vulnerabile ad attacchi del tipo //Factoring RSA Export Keys// poiché usa una chiave Diffie-Hellman più corta di 768 byte. In questo caso, se non possiamo correggere il server, è necessario aggiungere l'opzione di configurazione ''ssl_version = tls1_2''.
  
-==== isync ====+Se si desidera utilizzare una connessione con STARTTLS su porta 143, è necessario aggiungere le opzioni ''ssl no'' e ''starttls yes''.
  
-  Errore **''malformed UIDVALIDITY status''**, compilata **versione 1.0.6** al posto della versione 1.0.4 fornita da Debian Jessie. +Si esegue il programma in modalità **%%--info%%**, senza alcun trasferimento di messaggi:
-  * FIXME Esiste un modo di fare trasferimento ricorsivo di tutte le cartelle? Provare l'opzione **''-1''** +
-  * FIXME Problemi con le cartelle che contengono spazi nel nome, vedere la soluzione di eseguire direttamente ''mbsync''+
-  * Lo stato della sincronizzazione viene scritto in ogni Maildir nel file **''.mbsyncstate''**.+
  
-=== Uso diretto di mbsync ===+<code> 
 +offlineimap --dry-run --info -c ./offlineimap-imap-maildir.conf 
 +</code>
  
-Per il problema delle cartelle che contengono spazi nel nome, si lancia **''%%isync --write%%''**. Viene generato un file **''mbsync.conf''** che deve essere corretto a mano aggiungendo le doppie virgolette. Quindi si esegue:+Nell'output si legge:
  
 <code> <code>
-mbsync --config mbsync.conf <channel_name>+... 
 +Remote repository 'RemoteIMAP': type 'IMAP' 
 +... 
 +Folderlist: 
 + INBOX ->  
 + INBOX.Drafts -.Drafts 
 + INBOX.Archives.2019 -.Archives.2019 
 + INBOX.Sent -> .Sent 
 + INBOX.Spam -> .Spam 
 + INBOX.Trash -> .Trash 
 + 
 +Local repository 'Localhost': type 'Maildir' 
 +Folderlist: 
 </code> </code>
-==== offlineimap ==== 
  
-La versione **6.3.4** di Debian Wheezy e **6.5.4** (attualmente in Sid) hanno diversi bug. Conviene prendere la versione 6.5.5-rc3 da Github. Per installarlo manualmente copiare offlineimap in **''/usr/local/bin/''** la directory **''offlineimap/''** in **''/usr/local/lib/python2.7/dist-packages/''**.+Come si vede il server di origine, oltre alla cartella **INBOX**, presenenta alcune sottocartelle che hanno il prefisso **INBOX.**la regola **re.sub()** nel file di configurazione serve a tradurre il nome delle cartelle dalla nomenclatura IMAP remota alla Maildir locale (ovviamente si deve verificare lo standard adottato dal server IMAP che gira sull'host di destinazione)In particolare:
  
-Creare un file di configurazione **''offlineimap.conf''** di questo tipo:+  * La INBOX deve essere la cartella radice della Maildir. 
 +  * Il prefisso INBOX delle sottocartelle deve essere rimosso. 
 +  * Ogni sottocartella deve avere il punto come prefisso del nome (directory nascosta Unix). 
 + 
 +Vengono create le cartelle **$HOME/.offlineimap/Repository-RemoteIMAP/** e **$HOME/.offlineimap/Repository-Localhost/**, per il momento vuote, ma che conterranno poi lo stato della sincronizzazione. 
 + 
 + 
 +=== Esempio #2: da IMAP a IMAP === 
 + 
 +In questo esempio di effettua la sincronizzazione fra due server IMAP, quindi senza fare accesso diretto al filesystem. Questo il file di configurazione **offlineimap-imap-imap.conf**:
  
 <file> <file>
Line 115: Line 187:
  
 [Account Test] [Account Test]
-localrepository Local +remoterepository RemoteIMAP 
-remoterepository Remote+localrepository LocalIMAP
  
-[Repository Local+[Repository RemoteIMAP
-type = Maildir +type = IMAP 
-localfolders = /home/user1/Maildir +Strip the "INBOX" prefix when copying to destination IMAP. 
-If the remote IMAP is Lotus Domino, remove the **''.''** prefix when syncing back+'INBOX      => 'INBOX' 
-#nametrans = lambda foldername: re.sub('^\.*', '', foldername)+# 'INBOX.Trash' => 'Trash' 
 +'INBOX.Sent'  => 'Sent' 
 +nametrans = lambda foldername: re.sub(r'^INBOX\.', '', foldername) 
 +remotehost = mail1.example.org 
 +remoteuser = username1 
 +remotepass = MySecret1 
 +createfolders = False 
 +sslcacertfile = /usr/share/ca-certificates/mozilla/DST_Root_CA_X3.crt
  
-[Repository Remote]+[Repository LocalIMAP]
 type = IMAP type = IMAP
-# Remote server is Courier-IMAP, strip the "INBOX" prefix when copying locally. +remotehost = mail2.example.org 
-nametrans = lambda foldername: re.sub('^INBOX\.*', '.', foldername) +remoteuser = username2 
-# Remote server is Lotus Domino, add an "." prefix when copying locally. +remotepass = MySecret2 
-#nametrans = lambda foldername: '.' + foldername +sslcacertfile = /usr/share/ca-certificates/mozilla/DST_Root_CA_X3.crt
-remotehost = mail.host1.it +
-remoteuser = user1 +
-remotepass = password1+
 </file> </file>
  
-quindi eseguire+Si esegue il programma in modalità **%%--info%%**:
  
 <code> <code>
-offlineimap -1 -c offlineimap.conf -d imap,maildir -l offlineimap.log+offlineimap --dry-run --info -c ./offlineimap-imap-imap.conf 
 +</code> 
 + 
 +Verifichiamo l'output: 
 + 
 +<code> 
 +Remote repository 'RemoteIMAP': type 'IMAP' 
 +... 
 +Folderlist: 
 + INBOX.Drafts -> Drafts 
 + INBOX 
 + INBOX.Sent -> Sent 
 + INBOX.Spam -> Spam 
 + INBOX.Trash -> Trash 
 + 
 +Local repository 'LocalIMAP': type 'MappedIMAP' 
 +... 
 +Folderlist: 
 + Drafts 
 + INBOX 
 + Sent 
 + Spam 
 + Trash 
 +</code> 
 + 
 +Si capisce che i due server IMAP utilizzano una struttura diversa: il primo ha il prefisso ''INBOX.'' per ogni sottocartella, mentre il secondo no. Anche in questo caso è stato necessario utilizzare l'opzione **nametrans** con una opportuna **re.sub()** leggermente diversa dall'esempio #1. Si verifica comunque che il nome ''INBOX'' non viene trasformato, mentre per le sottocartelle avviene la corretta trasformazione che consiste semplicememte nel rimuovere il prefisso ''INBOX.'', compreso il punto. 
 + 
 +=== Sincronizzazione === 
 + 
 +La sincronizzazione avviene semplicemente eseguendo il comando con l'opportuno file di configurazione. In questo esempio si esegue un thread singolo (opzione **%%-1%%**) e si scrive nel file di log (opzione **%%-l%%**) il debug del protocollo imap e maildir (opzione **%%-d%%**): 
 + 
 +<code> 
 +offlineimap -1 -c offlineimap-imap-imap.conf -d imap,maildir -l offlineimap.log
 </code> </code>
  
   * Lo stato della sincronizzazione viene scritto in **''$HOME/.offlineimap/''**   * Lo stato della sincronizzazione viene scritto in **''$HOME/.offlineimap/''**
   * La ''Maildir'' locale può essere anche vuota, viene riempita opportunamente.   * La ''Maildir'' locale può essere anche vuota, viene riempita opportunamente.
-  * L'opzione **''nametrans''** serve ad evitare che nella Maildir locale ogni cartella abbia un prefisso **''INBOX''** (server remoto Courier-IMAP)+  * Potrebbe essere necessario specificare l'opzione **''nametrans''** per entrambi i repository, in modo che la sincronizzazione bidirezionale crei le giuste cartelle sul server remoto, ma noi abbiamo preferito utilizzare l'opzione ''createfolders = False'' in modo che non vi sia propagazione di cartelle verso il server origine. 
-  * L'opzione **''nametrans''** può servire anche ad aggiungere il prefisso **''.''** nelle cartelle locali quando il server remoto non le ha (server remoto Lotus Domino)+ 
-  * L'opzione **''nametrans''** per Lotus Domino deve avere una corrispondente nella configurazione locale: quando si sincronizza da locale a remoto il prefisso **''.''** deve essere tolto+=== Soluzione problemi === 
-  * La versione **6.5.4** ogni tanto va in loop (race condition). Occorre la versione **6.5.5**. + 
-  Con la versione **6.5.4** i messaggi importati hanno **mode 0755**, usare la versione **6.5.5**.+Vedere **[[offlineimap3]]**. 
 + 
 + 
 +==== isync ==== 
 + 
 +Consente la sincronizzazione di una **Maildir locale** con un server **IMAP remoto**. 
 + 
 +  * Errore **''malformed UIDVALIDITY status''**, compilata **versione 1.0.6** al posto della versione 1.0.4 fornita da Debian Jessie
 +  * FIXME Esiste un modo di fare trasferimento ricorsivo di tutte le cartelle? Provare l'opzione **''-1''** 
 +  FIXME Problemi con le cartelle che contengono spazi nel nome, vedere la soluzione di eseguire direttamente ''mbsync''
 +  * Lo stato della sincronizzazione viene scritto in ogni Maildir nel file **''.mbsyncstate''**. 
 + 
 +=== Uso diretto di mbsync === 
 + 
 +Per il problema delle cartelle che contengono spazi nel nome, si lancia **''%%isync --write%%''**. Viene generato un file **''mbsync.conf''** che deve essere corretto a mano aggiungendo le doppie virgoletteQuindi si esegue: 
 + 
 +<code> 
 +mbsync --config mbsync.conf <channel_name> 
 +</code>
  
 ==== mailsync ==== ==== mailsync ====
 +
 +Consente la sincronizzazione di un server **IMAP remoto** con il **filesystem locale** (non Maildir) oppure **altro server IMAP**.
  
 **Non supporta il formato Maildir** su filesystem locale. Il programma in effetti si appoggia sulla libreria **c-client** per accedere agli archivi di posta, in passato Debian includeva una patch per supportare Maildir, ma questa patch è stata rimossa (verificato in  **libc-client2007e** di Debian Jessie). **Non supporta il formato Maildir** su filesystem locale. Il programma in effetti si appoggia sulla libreria **c-client** per accedere agli archivi di posta, in passato Debian includeva una patch per supportare Maildir, ma questa patch è stata rimossa (verificato in  **libc-client2007e** di Debian Jessie).
  
-Con questo file di configurazione si sincronizza un server IMAP (remoto) con uno che gira in localhost:+Con questo file di configurazione **mailsync.conf** si sincronizza un server IMAP (remoto) con uno che gira in localhost:
  
 <file> <file>
Line 183: Line 311:
 mailsync -v -d -di -dc -f mailsync.conf first-to-second mailsync -v -d -di -dc -f mailsync.conf first-to-second
 </code> </code>
 +
 +==== interimap ====
 +
 +Effettua la sincronizzazione fra due server IMAP, ma richiede la capability **QRESYNC** su entrambi.
 +
 +==== imapsync ====
 +
 +:!: Non presente in Debian 10 Buster. Obsoleto?
 +
 +To migrate an IMAP account from one host1 to host2, there is the **''[[http://www.linux-france.org/prj/imapsync/|imapsync]]''** tool. In this usage example mail messages not longer existing on host1 will be deleted also on host2:
 +
 +<code bash>
 +#!/bin/sh
 +
 +login1=username_on_host1
 +passwd1=SecretOnHost1
 +login2=username_on_host2
 +passwd2=SecretOnHost2
 +
 +./imapsync \
 +    --host1 83.145.162.149 \
 +    --authmech1 LOGIN \
 +    --user1 "$login1" \
 +    --password1 "$passwd1" \
 +    --subscribed \
 +    --host2 127.0.0.1 \
 +    --authmech2 LOGIN \
 +    --user2 "$login2" \
 +    --password2 "$passwd2" \
 +    --subscribe \
 +    --delete2 --expunge2
 +</code>
 +
 +FIXME Problema con allegati con BODY vuoti: invece di saltare il messaggio il programma si blocca.
 +
 +==== imapcopy ====
 +
 +:!: Non presente in Debian 10 Buster. Obsoleto?
 +
 +Il tool non supporta SSL né TLS, inoltre **non effettua una sincronizzazione**, ma una copia; quindi se viene eseguito due volte i messaggi vengono duplicati.
 +
 +Si prepara un file di configurazione **''$HOME/ImapCopy.cfg''** con le seguenti opzioni:
 +
 +<code>
 +SourceServer host1
 +SourcePort 143
 +DestServer host2
 +DestPort 143
 +converttimezone "UTC" "+0000"
 +converttimezone "UT"  "+0000"
 +Copy "login1"  "password1"  "login2"  "password2"
 +</code>
 +
 +Lanciare il comando con l'opzione **''-l''** in modo che venga creato il file di log ''imapcopy.log''.
 +
 ===== Quota ===== ===== Quota =====
  
Line 224: Line 407:
 </code> </code>
  
-====== ====== +====== Courier IMAP ======
- +
-----+
  
-<php>echo '<rel="me" href="https://profiles.google.com/100662196154811835450">Profilo Google+</a>' . "\n";</php>+La connessione cifrata STARTTLS si appoggia su [[authdaemon_problem]]. Per effettuare debug lato client si può usare Firefox attivando la **Console degli errori** dal menu **Strumenti**. Durante l'aggiornamento da Weezy Jessie ad esempio si deve risolvere il problema del file ''/etc/courier/dhparams.pem'che deve passare da 1024 ad almeno 2048 bit.
doc/appunti/linux/sa/imap.1381767742.txt.gz · Last modified: 2013/10/14 18:22 by niccolo