Nach meinen vorherigen Beiträgen zu Zarafa und Offlineimap war der nächste Schritt das gelernte auch tatsächlich in die Tat umzusetzen. Anbei eine kleine Zusammenfassung meiner “learnings” nach einem Monat Offlineimap als Brücke zwischen Zarafa und Dovecot. Für den regelmäßigen Abgleich benutze ich das folgende Skript welches ich auf meinem Zarafa-System über cron.hourly ausführe.

#!/bin/bash
read -r pid < ~/.offlineimap/pid

if ps $pid &>/dev/null; then
  echo "offlineimap ($pid): another instance running." >&2
  #kill -9 $pid
  exit 0
fi

offlineimap -o -u Noninteractive.Quiet > /dev/null

Quelle: http://pbrisbin.com/posts/mutt_gmail_offlineimap

Der Ursprüngliche Zweck dieses Skript war es eine sich (potentiell) aufgehangenen Offlineimap-Prozess zu killen und einen neuen anzustoßen. Da ich aber die Menge der abzugleichenden E-Mails recht klein halte (nur Posteingang und gesendete Objekte) war es bisher bei mir nicht nötig Offlineimap hart zu beenden. Das Skript schickt mir daher bei doppelter Ausführung lediglich ein simples “another instance running” anstelle einer kryptischen Python Fehlermeldung. Am besten hat der Abgleich bei mir funktioniert, als Dovecot das führende System war, also der Mailstore in den neue E-Mails geliefert werden. Dies stütze ich auf zwei Beobachtungen:

  1. ca. einmal am Tag hat mir Offlineimap einen Fehler geschmissen, da es eine (in den meisten Fällen Spam-) E-Mail nicht von Zarafa nach Dovecot kopieren konnte.
  2. das Zarafa IMAP Gateway hat (zumindest bei mir) wesentlich besser performed, wenn es (viele) E-Mails auf die Festplatte geschrieben hat, statt (viele) Mails von der Platte zu lesen. Was vermutlich auf einen ansonsten recht gelangweilten Cell Cache zurückzuführen ist.

Auf der anderen Seite scheint Offlineimap, zumindest in Debian Squeeze, nicht mit eingerichteten ACLs in Dovecot zurechtzukommen. Folgende Fehlermeldung habe ich erhalten nachdem ich testweise ACLs auf dem Dovecot System eingerichtet habe:

WARNING: ERROR in syncfolder for $USER folder  INBOX : Error from select: ('NO', ["Mailbox doesn't exist: INBOX"])

Da es aber nur ein kurzer Test war, habe ich dies nicht weiter verfolgt. Zumindest für reine Migrationen hat sich Offlineimap meiner Meinung nach aber nicht bewährt (was ja auch nicht der primäre Einsatzzweck des Programmes ist), da Imapsync wesentlich schneller arbeitet (im meinem Fall teilweise bis zu 10 Nachrichten pro Sekunde gegenüber Offlineimap mit gefühlten drei Nachrichten pro Sekunde).

Notiz am Rande: die Android App K-9 hat kürzlich ein Update bekommen und fügt sich nun (optisch) besser in Android >= 4.0 ein https://f-droid.org/repository/browsb/?fdfilter=k-9&fdid=com.fsck.k9 oder inzwischen auch in Google Play.

Abschließendes Fazit: während dieser Ansatz für Systeme mit sehr wenigen Nutzern und unter Begrenzung der abzugleichenden Ordner vielleicht funktionieren könnte, ist es in meinen Augen eine zu große Bastellösung mit vielen potentiellen Störquellen. Das nächste Projekt, mit dem ich bereits angefangen habe, ist die Dokumentation der Nutzung von Dovecot 2.1, bzw. des mit dieser Version eingeführten imapc Backends, zur Realisierung eines Caching IMAP Proxies. Eine erste Version des Dokumentes ist bereits fertiggestellt und steht auf Anfrage zur Verfügung.