offlineimap-Konfiguration für posteo, GMX und mailbox.org

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