Z-Push
Z-Push ist eine freie Implementierung des Active-Sync Protokolls. Damit lassen sich, wie bei Microsoft Exchange, Kontakte, eMails und Kalender direkt an ein mobiles Endgerät "pushen".
Installation
Voraussetzungen
Diese Beschreibung geht von einem Ubuntu-System 10.04 x64 aus. Z-Push lässt sich natürlich auch auf anderen Derivaten einrichten, allerdings können diese Angaben dann abweichen. Folgendes ist im Vorfeld schon notwendig:
- Webserver, z. B. Apache mit PHP5
- IMAP bzw. MAPI-Server (z. B. Dovecot, Zarafa)
Anleitung
Zuerst das tar-gz von der Projektwebseite herunterladen http://z-push.sourceforge.net/soswp/ und anschließend entpacken. Den Ordner z-push dann in das Webserver-Root-Verzeichnis kopieren.
mv z-push /var/www/
Anschließend müssen noch die Berechtigungen für den Unterodner state angepasst werden
chown root:www-data /var/www/z-push -R
chmod 775 /var/www/z-push/state/
Nun muss auf dem Webserver ein Alias eingerichtet werden. Je nach Konfiguration der vHosts kann das von Fall zu Fall variieren. Man kann den Alias z. B. in dem default vHost unter /etc/apache2/sites-available/default
eintragen:
Alias /Microsoft-Server-ActiveSync /var/www/z-push/index.php
Hinweis: Es ist sinnvoll, z-push als SSL-Vhost einzurichten, damit die Kommunikation verschlüsselt erfolgt. Andernfalls kann die Datenübertragung mitgelesen werden.
Wenn man Zarafa verwendet ist die Konfiguration abgeschlossen. Verwendet man einen anderen IMAP-Dienst, z. B. Dovecot muss man noch die config.php editieren:
(...) // The data providers that we are using (see configuration below) $BACKEND_PROVIDER = "BackendIMAP"; // ************************ // BackendIMAP settings // ************************ // Defines the server to which we want to connect // recommended to use local servers only define('IMAP_SERVER', 'localhost'); // connecting to default port (143) define('IMAP_PORT', 143); // best cross-platform compatibility (see http://php.net/imap_open for options) define('IMAP_OPTIONS', '/tls/novalidate-cert'); (...)
Fertig! Nun kann man zuerst im Browser testen, indem man http://[Server-IP]/Microsoft-Server-ActiveSync aufruft. Es sollte eine Benutzername-/Passwortabfrage erfolgen. Hier das gleiche angeben, wie bei der Authentifizierung an Webmail. Bei Dovecot ist der Benutzername i. d. R. die komplette eMail, bei Zarafa nur der vordere Teil bis zum "@"-Zeichen. Wenn nach der Eingabe kein Fehler kommt, ist es ein gutes Zeichen, dass alles korrekt funktioniert. Dann kann man im nächsten Schritt die Einrichtung auf dem Smartphone wagen.
Smartphone
Wenn man es bis hierher geschafft hat, ist man fast am Ziel. Ich erkläre hier die Anbindung an einem Android 2.2 Gerät mit der Standard-Email-Anwendung:
- Neues eMail-Konto hinzufügen
- E-Mail-Adresse und Passwort eingeben
- Manuelle Einrichtung anklicken
- Microsoft Exchange ActiveSync auswählen
- Domain-/Benutzername varriert je nach verwendetem Mailserver. Bei Dovecot komplette eMail angeben, bei Zarafa nur den vorderen Teil
- bei Server die IP-Adresse bzw. Subdomain eingeben. Bitte beachten, dass der Alias funktionieren muss.
- wenn z-push, wie empfohlen, als HTTPS eingerichtet ist, dann "SSL verwenden" auswählen
- wenn man ein self-signed Zertifikat verwendet, müssen alle SSL-Zertifikate akzeptiert werden
Hinweis: Wenn man nicht Zarafa verwendet, dann können Kontakte und Kalender nicht synchronisiert werden. Diese Häkchen dann bitte entfernen.
Troubleshooting
Es werden unendlich Mails gepusht
Wenn eine eMail unendlich auf dem Smartphone zugestellt wird, ist es sehr wahrscheinlich, dass der state
-Ordner nicht die richtigen Berechtigungen hat. Der Apache braucht auf diesen Ordner Schreibrechte:
chown root:www-data /var/www/z-push/state
chmod 775 /var/www/z-push/state
Somit sollte das Problem behoben sein
eMail-Body unlesbar
Wenn eMails, die von Smartphone versendet wurden, nicht lesbar sind, liegt es sehr wahrscheinlich an der fehlenden base64-Verschlüsselung. Die Smartphones übermitteln den Body-Text i. d. R. im base64-Format. Z-Push muss den eMail-Body beim Weiterreichen an den Mailserver deshalb wieder in base64 umwandeln. Hier handelt es sich um einen Bug im Z-Push (Version 1.51). Abhilfe schafft hier folgender Fix:
Datei /var/www/z-push/backend/imap.php
öffnen und zur Zeile 255 wechseln:
// encode the body to base64 if it was sent originally in base64 by the pda
// contrib - chunk base64 encoded body
if ($body_base64 && !isset($forward)) $body = chunk_split(base64_encode($body));
Problem ist hier die Variable $forward. Diese wird immer gesetzt, da sie mit dem Standardwert false belegt wird. Deshalb muss diese If-Bedingung wie folgt geändert werden:
if ($body_base64 && isset($forward) && !$forward) $body = chunk_split(base64_encode($body));
Nun sollten die eMails korrekt dargestellt werden.
Links
http://www.cklog.net/push-email-with-dovecot-mail-server/
http://z-push.sourceforge.net/soswp/index.php?pages_id=39&t=Download
http://dfwarden.blogspot.com/2011/01/android-z-push-issues.html