ActiveSync für Zimbra mit Z-Push
Mit der PHP-Lösung Z-Push (http://z-push.org/) und der Erweiterung Z-Push Zimbra Backend (http://sourceforge.net/projects/zimbrabackend/) können Sie auch der Community Edition von Zimbra das proprietäre Protokoll ActiveSync für die einfache Synchronisiation von Mobilgeräten beibringen. Dabei wird das Synchronisieren von E-Mails, Kontakten und Kalender, nicht aber das von Notizen, unterstützt.
Installation
Als Voraussetzung für die Installation benötigen Sie einen Webserver mit PHP. Laden Sie Z-Push herunter und entpacken Sie den Ordner in Ihrem Root-Verzeichnis (im Idealfall legen Sie dafür einen eigenen virtuellen Host an).
Auf meinem System (OpenSuse) musste ich auch noch das PHP-Paket posix nach installieren.
Danach laden Sie das Zimbra Backend herunter, benennen den darin enthaltenen Ordner z-push-2 in zimbra um und kopieren diesen nach <z-push>/backend/.
Zuletzt benötigt Z-Push noch einen Ordner für Arbeitsdateien und einen Ordner für Log-Dateien mit den entsprechenden Zugriffsrechten für jenen Nutzer unter dem auch der Webserver ausgeführt wird. Erstellen Sie dafür die Ordner /var/lib/z-push/ und /var/log/z-push/.
Konfiguration
Jetzt können wir Z-Push für den Betrieb mit unserem Zimbra-Mailserver konfigurieren. Ändern Sie dazu in der Datei <z-push>/config.php im Abschnitt Backend settings die folgende Zeile
define('BACKEND_PROVIDER', '');
auf
define('BACKEND_PROVIDER', "BackendZimbra");
Nun müssen wir in der Datei <z-push>/backend/zimbra/config.php noch die URL unseres Zimbra-Mailservers eintragen und eine Direktive setzen, dass Zimbra nicht versucht die Domain für die Verbindung vorzugeben (Wichtig, wenn eine interne IP-Adresse für die Verbindung genutzt werden soll).
define('ZIMBRA_URL', 'https://your.mailserver.com');
define('ZIMBRA_DISABLE_URL_OVERRIDE', true);
Werfen Sie auch einen Blick in die vom Zimbra Backend mitgelieferte Installationsanleitung <z-push>/backend/zimbra/INSTALL. In jedem Fall müssen Sie für den Betrieb von Z-Push mit Zimbra die folgende Codeänderung an der Funktion RowCmp() zu finden in der Datei <z-push>/lib/default/diffbackend/diffstate.php vornehmen:
static public function RowCmp($a, $b) {
// TODO implement different comparing functions
// return $a["id"] < $b["id"] ? 1 : -1;
// VJS - For ZIMBRA backend - need to use STRING comparisons - and allow strcmp to return 0 for equal
// Zimbra->Logon() function will test compare two equal strings to verify presence of this fix.
return strcmp( $b["id"], $a["id"] ) ;
}
Troubleshooting
Sollte Z-Push beim Aufruf im Browser anstelle einer Benutzerauthentifizierung nur eine weiße Seite anzeigen liegt dies unter Umständen an einem PHP-Fehler verursacht durch ein fehlendes PHP-Modul. Prüfen Sie dazu die Fehlerlogs Ihres Webservers.
Diese weiße Seite erhalten Sie je nach Versionssprung auch nach einem Update von Z-Push auf eine neue Version. Das Problem können Sie durch Löschen des Inhalts des Arbeitsverzeichnisses /var/lib/z-push lösen - wobei hier alle Synchronisationen zurückgesetzt werden und sich Ihre Geräte darauf hin frisch synchronisieren (was unter Umständen zum Löschen der Daten führen kann). Oder eleganter durch Ausführen des Migrationsscripts unter <z-push>/tools. Nähere Informationen dazu finden Sie unter /var/log/z-push/z-push-error.log.