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
Last revisionBoth sides next revision
doc:appunti:linux:sa:imap [2013/10/14 09:33] – [offlineimap] niccolodoc:appunti:linux:sa:imap [2024/03/20 17:48] – [IMAP protocol] 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 \ +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-*%%**. 
-    --user1 "$login1" \ + 
-    --password1 "$passwd1\ +=== Esempio #1: da IMAP a Maildir === 
-    --subscribed \ + 
-    --host2 127.0.0.1 \ +Il primo esempio riguarda una migrazione da repository **IMAP remoto** a **Maildir locale**. Prepariamo il file di configurazione **offlineimap-imap-maildir.conf**: 
-    --authmech2 LOGIN + 
-    --user2 "$login2" \ +<file> 
-    --password2 "$passwd2" \ +[general] 
-    --subscribe \ +accounts = Test 
-    --delete2 --expunge2+ 
 +[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:
-  * Problemi con le cartelle che contengono spazi nel nome: risolto lanciando **''%%isync --write%%''**, quindi corretto a mano il file generato ''mbsync.conf'' e lanciato il backend **''mbsync''**. +
-  * Esiste un modo di fare trasferimento ricorsivo di tutte le cartelle? Provare l'opzione **''-1''**+
  
-==== offlineimap ====+<code> 
 +offlineimap --dry-run --info -c ./offlineimap-imap-maildir.conf 
 +</code>
  
-Creare un file di configurazione **''offlineimap.conf''** di questo tipo:+Nell'output si legge: 
 + 
 +<code> 
 +... 
 +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> 
 + 
 +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: 
 + 
 +  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 105: Line 185:
  
 [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 a destination IMAP. 
 +# 'INBOX'       => 'INBOX' 
 +# '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
-remotehost = mail.host1.it +remotehost = mail2.example.org 
-remoteuser = user1 +remoteuser = username2 
-remotepass = password1+remotepass = MySecret2 
 +sslcacertfile = /usr/share/ca-certificates/mozilla/DST_Root_CA_X3.crt
 </file> </file>
  
-quindi eseguire+Si esegue il programma in modalità **%%--info%%**:
  
 <code> <code>
-offlineimap -c offlineimap.conf+offlineimap --dry-run --info -c ./offlineimap-imap-imap.conf
 </code> </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>
 +
 +  * Lo stato della sincronizzazione viene scritto in **''$HOME/.offlineimap/''**
 +  * La ''Maildir'' locale può essere anche vuota, viene riempita opportunamente.
 +  * 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.
 +
 +=== Soluzione problemi ===
 +
 +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 virgolette. Quindi 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 158: Line 309:
 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 199: Line 405:
 </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.txt · Last modified: 2024/03/21 12:56 by niccolo