Z-Push

Aus Cowwwiki
Version vom 25. März 2011, 23:40 Uhr von Benjaminfras (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

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