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 [2021/03/08 18:33] – [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>
  
Line 49: Line 72:
 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**.. 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**..
  
-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 GithubPer installarlo manualmente copiare offlineimap in **''/usr/local/bin/''** e la directory **''offlineimap/''** in **''/usr/local/lib/python2.7/dist-packages/''**.+**ATTENZIONE** :!: Le versioni **6.3.4** di Debian Wheezy e **6.5.4** hanno diversi bug. 
 + 
 +**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. 
 + 
 +**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**.
  
-**ATTENZIONE** :!: Il programma offre una funzione di sincronizzazione **bidirezionale**, ma noi siamo interessati soprattutto alla migrazione 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**.+**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 ulterioriVedere l'**[[https://github.com/OfflineIMAP/offlineimap3/issues/188|issue #188]]**.
  
 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-*%%**. 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-*%%**.
  
-=== Da IMAP a Maildir ===+=== Esempio #1: da IMAP a Maildir ===
  
 Il primo esempio riguarda una migrazione da repository **IMAP remoto** a **Maildir locale**. Prepariamo il file di configurazione **offlineimap-imap-maildir.conf**: Il primo esempio riguarda una migrazione da repository **IMAP remoto** a **Maildir locale**. Prepariamo il file di configurazione **offlineimap-imap-maildir.conf**:
Line 75: Line 102:
 nametrans = lambda foldername: re.sub('^INBOX\.*', '.', foldername) nametrans = lambda foldername: re.sub('^INBOX\.*', '.', foldername)
 remotehost = mail.example.org remotehost = mail.example.org
-remoteuser = username1+remoteuser = username
 remotepass = MySecret remotepass = MySecret
 createfolders = False createfolders = False
-sslcacertfile = /usr/share/ca-certificates/mozilla/DST_Root_CA_X3.crt+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] [Repository Localhost]
Line 84: Line 115:
 localfolders = /home/username2/Maildir localfolders = /home/username2/Maildir
 </file> </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>
 +
 +Per vedere quale Certification Authority deve essere usata è necessario recuperare il certificato SSL dal server remoto, ad esempio con il comando:
 +
 +<code>
 +openssl s_client -showcerts -connect mail.example.org:993
 +</code>
 +
 +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>
 +[SSL: DH_KEY_TOO_SMALL] dh key too small (_ssl.c:727)
 +</code>
 +
 +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''.
 +
 +Se si desidera utilizzare una connessione con STARTTLS su porta 143, è necessario aggiungere le opzioni ''ssl = no'' e ''starttls = yes''.
  
 Si esegue il programma in modalità **%%--info%%**, senza alcun trasferimento di messaggi: Si esegue il programma in modalità **%%--info%%**, senza alcun trasferimento di messaggi:
Line 119: Line 178:
  
  
-=== Da IMAP a IMAP ===+=== 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**: 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**:
Line 138: Line 197:
 # 'INBOX.Sent'  => 'Sent' # 'INBOX.Sent'  => 'Sent'
 nametrans = lambda foldername: re.sub(r'^INBOX\.', '', foldername) nametrans = lambda foldername: re.sub(r'^INBOX\.', '', foldername)
-remotehost = imap-remote.example.org+remotehost = mail1.example.org
 remoteuser = username1 remoteuser = username1
 remotepass = MySecret1 remotepass = MySecret1
 +createfolders = False
 sslcacertfile = /usr/share/ca-certificates/mozilla/DST_Root_CA_X3.crt sslcacertfile = /usr/share/ca-certificates/mozilla/DST_Root_CA_X3.crt
  
 [Repository LocalIMAP] [Repository LocalIMAP]
 type = IMAP type = IMAP
-remotehost = imap-local.example.org+remotehost = mail2.example.org
 remoteuser = username2 remoteuser = username2
 remotepass = MySecret2 remotepass = MySecret2
 sslcacertfile = /usr/share/ca-certificates/mozilla/DST_Root_CA_X3.crt sslcacertfile = /usr/share/ca-certificates/mozilla/DST_Root_CA_X3.crt
 </file> </file>
 +
 +Si esegue il programma in modalità **%%--info%%**:
 +
 +<code>
 +offlineimap --dry-run --info -c ./offlineimap-imap-imap.conf
 +</code>
 +
 +Verifichiamo l'output:
  
 <code> <code>
Line 171: Line 239:
 </code> </code>
  
-=== Altro ===+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.
  
-Creare un file di configurazione **''offlineimap.conf''** di questo tipo:+=== Sincronizzazione ===
  
-<file+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%%**):
-[general] +
-accounts = Test +
- +
-[Account Test] +
-localrepository = Local +
-remoterepository = Remote +
- +
-[Repository Local] +
-type = Maildir +
-localfolders = /home/user1/Maildir +
-# If the remote IMAP is a Lotus Domino, remove the **''.''** prefix when syncing back. +
-#nametrans = lambda foldername: re.sub('^\.*', '', foldername) +
- +
-[Repository Remote] +
-type = IMAP +
-# Remote server is Courier-IMAP, strip the "INBOX" prefix when copying locally. +
-nametrans = lambda foldername: re.sub('^INBOX\.*', '.', foldername) +
-# Remote server is Lotus Domino, add an "." prefix when copying locally. +
-#nametrans = lambda foldername'.' + foldername +
-remotehost = mail.host1.it +
-remoteuser = user1 +
-remotepass = password1 +
-</file> +
- +
- +
- +
-quindi eseguire+
  
 <code> <code>
-offlineimap -1 -c offlineimap.conf -d imap,maildir -l offlineimap.log+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 lo ha (server remoto Lotus Domino). In questo caso ci deve essere un **''nametrans''** corrispondente nella configurazione locale: quando si sincronizza da locale a remoto il prefisso **''.''** deve essere tolto+ 
-  La versione **6.5.4** ogni tanto va in loop (race condition). Occorre la versione **6.5.5**. +=== Soluzione problemi === 
-  * Con la versione **6.5.4** i messaggi importati hanno **mode 0755**, usare la versione **6.5.5**.+ 
 +Vedere **[[offlineimap3]]**. 
  
 ==== isync ==== ==== isync ====
doc/appunti/linux/sa/imap.1615224815.txt.gz · Last modified: 2021/03/08 18:33 by niccolo