blog.bartlweb - a technologist's external brain

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.

Dieser Artikel hat dir deinen Tag gerettet?
... und mühevolles Probieren, Recherchieren und damit Stunden an Zeit gespart? ... oder einfach nur dein Problem gelöst?

Dann würde ich mich freuen, wenn Du meine Zeit für die Erstellung dieses Blogartikels mit einer kleinen Spende honorierst:

Kommentare

Noch kein Kommentar vorhanden.
Sei der Erste - ich freue mich über deine Anmerkungen, Kritik und Fragen.

Kommentar schreiben

Deine E-Mailadresse wird nur für Benachrichtigungen und Rückfragen verwendet und wird nicht veröffentlicht.

Benachrichtigungen können jederzeit wieder abbestellt werden.

Bitte tippe die Zahlenkombination "1446" ein, nur dann kann ich deinen Kommentar entgegennehmen.

Bitte fülle dieses Feld nicht aus, nur dann kann ich deinen Kommentar entgegennehmen.