Dieses Howto soll einen möglichen Weg aufzeigen, wie man E-Mail zwischen einem Dovecot IMAP Server und dem Zarafa IMAP Gateway migrieren kann, ohne die Passwörter der zu migrierenden Benutzer zu kennen. Hierbei wird unter anderem die Funktion der Master Benutzer von Dovecot genutzt, da diese schon ausreichend im Netz dokumentiert ist, werde ich hier nicht weiter drauf eingehen. Das Gegenstück zum Master Benutzer ist bei Zarafa der “local_admin_user”. Dieser bietet die Möglichkeit auf jedes gewünschte Passwort ohne weitere Überprüfung des Passwortes zuzugreifen. Dies ist bei weitem allerdings nicht so elegant wie der Master Benutzer bei Dovecot, da so jeder der einen gültigen Benutzernamen kennt auf dieses Postfach zugreifen kann (vgl. Zarafa Admin Handbuch Kapitel 4.11. Configure Zarafa Gateway die “Important notice”). Daher sollte ein entsprechend modifiziertes Zarafa IMAP Gateway entweder nur im lokalen Netzwerk genutzt werden, oder gar nur auf Verbindungen von localhost reagieren.

# GATEWAY SETTINGS

server_bind = 127.0.0.1

# Please refer to the administrator manual or manpage why HTTP is used rather than the UNIX socket.
server_socket = file:///var/run/zarafa</pre>

Die für die gateway.cfg relevanten Zeilen sind hier, wie oben abgebildet, server_bind und server_socket. Sollte ein von Standard abweichender run_as_user gesetzt sein, so muss dieser eventuell noch in der server.cfg bei local_admin_users aufgenommen werden. Und natürlich sollte IMAP für die entsprechenden Benutzer oder den kompletten Server aktiviert sein. Leider fehlen dem Zarafa Gateway die Möglichkeit sich z.B. innerhalb eines Multiserver-Setups per sslkey_file und sslkey_pass authentifizieren, daher muss das auf diese Weise manipulierte zarafa-gateway auf einem System laufen, auf dem auch ein zarafa-server Prozess läuft. Nach der Installation von Offlineimap auf dem Zarafa Host, muss als nächstes eine entsprechende Konfiguration angelegt werden. Diese kann, da das Zarafa Gateway bereits als local_admin läuft, unter einem beliebigen lokalen Benutzer erstellt werden.

accounts = UserA,UserB
fsync = False
ui = TTY.TTYUI

[Account UserA]
localrepository = UserA-Zarafa
remoterepository = UserA-Dovecot
status_backend = sqlite

[Account UserB]
localrepository = UserB-Zarafa
remoterepository = UserB-Dovecot
status_backend = sqlite

[Repository UserA-Zarafa]
type = IMAP
remotehost = 127.0.0.1
remoteuser = UserA
remotepass = $RANDONPASSWORD

[Repository UserA-Dovecot]
type = IMAP
remotehost = $DOVECOTSERVER
remoteuser = UserA*master
remotepass = $MASTERPASSWORD

[Repository UserB-Zarafa]
...

Wie bereits geschrieben kann beim Passwort innerhalb von Repository UserA-Zarafa ein beliebiger Wert angegeben werden, da das Zarafa Gateway diesen nicht überprüfen wird. Eine weitere (kosmetische) Einstellung wäre die automatische Angleichung der Ordnernamen. Innerhalb von Dovecot werden gesendete Objekte im Ordner “Sent” abgelegt, Zarafa allerdings hat diese im Ordner “Gesendete Objekte” (zumindest innerhalb eines deutschen Postfachs). Hierfür kann die Funktion “Name translation” innerhalb von Offlineimap genutzt werden. Zwar reicht in der mit Debian Squeeze ausgelieferten Version noch die einseitige Angleichung, leider habe ich dies bisher noch nicht erfolgreich umgesetzt. Anbei mein bisheriger Versuch:

nametrans = lambda foldername: re.sub ('^Junk>, 'Junk E-Mail',
        re.sub ('^Junk-E-Mail>, 'Junk E-Mail',
        re.sub ('^Drafts>, 'Entwürfe',
        re.sub ('^Sent>, 'Gesendete Objekte',
        re.sub ('^Trash>, 'Gelöschte Objekte',
        re.sub ('^Queue>, 'Postausgang',
        foldername))))))

Den fehlenden Schritt der Angleichung erst einmal überwunden, könnte Offlineimap genutzt werden um definierte Zarafa Postfächer über Dovecot abrufen zu können. Fortsetzung: Automatische Anpassung der Ordnernamen