offlineimap erlaubt mehrere Remote-IMAP-Accounts mit einer lokalen Maildir-Verzeichnisstruktur zu synchronisieren. Werden mehrere IMAP-Accounts in ein lokales Maildir synchronisiert, muß man sich überlegen, wie man die Verzeichnisse anlegt. Der folgende Artikel beschreibt ein Setup für posteo.de.
Die lokale Maildir-Struktur (unterhalb von ~/Maildir) sieht dabei folgendermaßen aus :
.posteo .posteo.ablage .posteo.ablage.2020 .posteo.ablage.2021 .posteo.Drafts .posteo.Sent .posteo.Trash .otheraccount .otheraccount.folder
Die Benahmung der Ordner orientiert sich an Maildir++, wie sie von Courier und Dovecot unterstützt wird. Es ist somit möglich, das lokale Maildir selbst wieder über einen IMAP-Server anzubieten. Die Ordner-Struktur eines Account wird jeweils auf einen Unterordner abgebildet (im Beispiel sind alle posteo-Ordner) unterhalb von posteo verfügbar.
Damit dies funktioniert, muß in der offlineimaprc die Option nametrans
und folderfilter
entsprechend konfiguriert werden:
[general] pythonfile = ~/.offlineimaprc_pythonfile.py ... [Account posteo] localrepository = posteo-local remoterepository = posteo-remote ... [Repository posteo-local] type = Maildir localfolders = ~/Maildir sep = . ... [Repository posteo-remote] type = IMAP remotehost = posteo.de ssl = yes sslcacertfile = /etc/ssl/certs/ca-certificates.crt remoteuser = xyz@posteo.de nametrans = oimaptransfolder_posteo folderfilter = lambda foldername: foldername in [ 'INBOX', 'Drafts', 'Sent', 'ablage.2020', 'ablage.2021' ]
oimaptransfolder_posteo
ist eine Python-Funktion, die in der Datei ~/.offlineimaprc_pythonfile.py
definiert ist:
def oimaptransfolder_posteo(foldername): '''Translates posteo folder names to local folder names''' if foldername == "INBOX": retval = ".posteo" else: retval = ".posteo." + foldername return retval
Damit wird die Inbox im Ordner .posteo
gemappt und alle Unter-Ordner tauchen jeweils auch unterhalb auf.
Posteo benutzt den Punkt .
als IMAP-Folderseperator und alle Ordner sind auf der Ebene der INBOX. GMX benutzt beispielsweise /
als Folderseperator, die die Konfiguration sieht dann folgendermaßen aus:
def oimaptransfolder_gmx(foldername): '''Translates GMX IMAP folder names to local folder names''' if foldername == "INBOX": retval = ".gmx" else: retval = ".gmx." + foldername retval = re.sub("/", ".", retval) return retval
mailbox.org hat ebenfalls /
als Folderseperator; dort sind aber alle Ordner Unterordner von INBOX, somit muß “INBOX” entfernt werden:
def oimaptransfolder_mailboxorg(foldername): '''Translates mailbox.org IMAP folder names to local folder names''' # On mailbox.org server all folders are subfolder of INBOX retval = re.sub('^INBOX', '.roots', foldername) retval = re.sub("/", ".", retval) return retval