This is an old revision of the document!
Table of Contents
IMAP protocol
Example of an IMAP session:
$ telnet mail.texnet.it 143 Trying 217.19.150.6... Connected to mail.texnet.it. Escape character is '^]'. * OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE ACL ACL2=UNION STARTTLS] Courier-IMAP ready. Copyright 1998-2005 Double Precision, Inc. See COPYING for distribution information. a1 CAPABILITY * CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE ACL ACL2=UNION STARTTLS a1 OK CAPABILITY completed a2 LOGIN niccolo ******** a2 OK LOGIN Ok. a3 LIST "" "*" * LIST (\Marked \HasNoChildren) "." "INBOX" a3 OK LIST completed a4 SELECT INBOX * FLAGS (\Draft \Answered \Flagged \Deleted \Seen \Recent) * OK [PERMANENTFLAGS (\* \Draft \Answered \Flagged \Deleted \Seen)] Limited * 2856 EXISTS * 2856 RECENT * OK [UIDVALIDITY 1163517848] Ok * OK [MYRIGHTS "acdilrsw"] ACL a4 OK [READ-WRITE] Ok a5 FETCH 5 FAST * 5 FETCH (FLAGS (\Recent) INTERNALDATE "25-Nov-2005 22:09:41 +0100" RFC822.SIZE 2763) a5 OK FETCH completed. a6 FETCH 3 (flags body[header.fields (subject)]) * 3 FETCH (FLAGS (\Recent) BODY[HEADER.FIELDS ("subject")] {94} Subject: Cron <clamav@pierargo> [ -x /usr/bin/freshclam ] && /usr/bin/freshclam >/dev/null ) * 3 FETCH (FLAGS (\Seen \Recent)) a6 OK FETCH completed. a7 LOGOUT
Migrating IMAP folder
imapsync
To migrate an IMAP account from one host1 to host2, there is the imapsync
tool. In this usage example mail messages not longer existing on host1 will be deleted also on host2:
#!/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
Problema con allegati con BODY vuoti: invece di saltare il messaggio il programma si blocca.
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.
Si prepara un file di configurazione $HOME/ImapCopy.cfg
con le seguenti opzioni:
SourceServer host1 SourcePort 143 DestServer host2 DestPort 143 converttimezone "UTC" "+0000" converttimezone "UT" "+0000" Copy "login1" "password1" "login2" "password2"
Lanciare il comando con l'opzione -l
in modo che venga creato il file di log imapcopy.log
.
isync
- Errore
malformed UIDVALIDITY status
, compilata versione 1.0.6 al posto della versione 1.0.4 fornita da Debian Jessie. Esiste un modo di fare trasferimento ricorsivo di tutte le cartelle? Provare l'opzione
-1
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:
mbsync --config mbsync.conf <channel_name>
offlineimap
Creare un file di configurazione offlineimap.conf
di questo tipo:
[general] accounts = Test [Account Test] localrepository = Local remoterepository = Remote [Repository Local] type = Maildir localfolders = /home/user1/Maildir [Repository Remote] type = IMAP # Remote server is Courier-IMAP, strip the INBOX prefix when copying locally. nametrans = lambda foldername: re.sub('^INBOX\.*', '.', foldername) remotehost = mail.host1.it remoteuser = user1 remotepass = password1
quindi eseguire
offlineimap -1 -c offlineimap.conf -d imap,maildir -l offlineimap.log
- Lo stato della sincronizzazione viene scritto in
$HOME/.offlineimap/
- La
Maildir
locale può essere anche vuota, viene riempita opportunamente. - L'opzione
nametrans
serve ad evitare che nella Maildir locale ogni cartella abbia un prefissoINBOX
(server remoto Courier-IMAP). Ogni tanto si blocca, bisogna fare un
kill -9
del processo.I messaggi importati hanno mode 0755, sistemare!
Nella Maildir locale viene creata una directory senza prefisso
.
per ogni cartella origine (server remoto Lotus Domino).
mailsync
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:
store first-server { server {mail.server1.it/user=user1/novalidate-cert} ref {mail.server1.it} pat * prefix INBOX passwd FirstSecret } store second-server { server {localhost/user=user2/novalidate-cert} ref {localhost} pat * prefix INBOX passwd SecondSecret } channel first-to-second first-server second-server { msinfo .msinfo }
Per lanciare la sincronizzazione per la prima volta si cancella un eventuale file di stato .msinfo
:
rm .msinfo mailsync -v -d -di -dc -f mailsync.conf first-to-second
Quota
Il protocollo IMAP supporta un meccanismo di “quota volontaria”, cioè i vari software (SMTP, IMAP, POP) devono collaborare a mantenere aggiornato un file con le statistiche di occupazione.
Per vedere se il server IMAP supporta correttamente la quota:
telnet 127.0.0.1 143 * OK [CAPABILITY IMAP4rev1 UIDPLUS ... QUOTA ...] Courier-IMAP ready. a1 LOGIN niccolo MySecret a1 OK LOGIN Ok. a2 GETQUOTAROOT INBOX * QUOTAROOT "INBOX" "ROOT" * QUOTA "ROOT" (STORAGE 6417 19532) a2 OK GETQUOTAROOT Ok. a3 LOGOUT
In questo caso il Courier-IMAP implementa una soft-quota, cioè non quella del kernel Linux. Questa softquota è mantenuta nel file ~/Maildir/maildirsize
e bisogna che tutti i programmi che scrivono/leggono nella Maildir lo tengano aggiornato. Ad esempio procmail
non lo fa.
Per aggiornare una-tantum il contenuto del file (modificando lo spazio disponibile):
maildirmake -q 20000000S Maildir
I programmi courier-imap
e courier-pop
si comportano correttamente se trovano il file ~/Maildir/maildirsize
, cioè aggiornano il totale dello spazio occupato quando viene eliminato un messaggio.
L'aggiornamento di maildirsize
all'arrivo di nuovi messaggi non viene fatto direttamente da Postfix o Exim, si deve utilizzare un opportuno filtro di consegna, come maildrop
.
Se qualcuno interviene direttamente sui file nella Maildir, è necessario rigenerare il file maildirsize
come visto sopra.
FAM/Gamin library
Il server Courier IMAP sfrutta il supporto FAM (File Alteration Monitor) o Gamin. Conviene installare il pacchetto Debian gamin. Se non è installata una di queste librerie produce i seguente messaggio di errore:
* OK [ALERT] Filesystem notification initialization error -- contact your mail administrator (check for configuration errors with the FAM/Gamin library)
<php>echo '<a rel=“me” href=“https://profiles.google.com/100662196154811835450”>Profilo Google+</a>' . “\n”;</php>