Z-Push und das iPhone

23 comments

Posted on 19th January 2009 by Benj in Howtos |iPhone |Linux

,

Seit Firmware 2.0 ist es möglich, das iPhone über einen Exchange abzugleichen und sämtliche Mails über die Push-Funktion zu empfangen. Aber nicht jeder möchte gleich einen eigenen Exchange-Server betreiben – auch das Weiterleiten von Mails an einen gratis Exchange-Account ist nicht sonderlich nett.

Leute mit einem eigenen Mailserver können da auf eine elegantere Art und Weise die Push Funktionalität nutzen, alles was dazu benötigt wird ist ein Mailserver mit IMAP und das Opensource Webtool Z-Push.

  1. Zuerst müssen die entsprechenden PHP Module installiert werden
    aptitude install php5-imap php-mail php-mail-mime
  2. Jetzt kann Z-Push heruntergeladen und entpackt werden
    wget http://download.berlios.de/z-push/z-push-1.2.1.tar.gz
    tar xvfz z-push-1.2.1.tar.gz
  3. Kopiert nun den neuen Ordner z-push in euer Webserver-Verzeichnis – hier bei mir /srv/www/
    mv z-push /srv/www
    chown -R www-data.www-data /srv/www/z-push
  4. Erstellt oder modifiziert nun einen vHost für Apache, bei mir habe ich einen vHost unter /etc/apache/site-available mit dem Namen “homepage”. In diesem habe ich folgenden Text eingetragen:
    vHost Inhalt: Show
    Wie ihr am Ende den vHost erstellt ist egal, wichtig sind folgende Punkte:

    Alias /Microsoft-Server-ActiveSync /var/www/z-push/index.php
    </directory><directory /var/www/z-push>
      Options -Indexes
      AllowOverride none
      Order allow,deny
      allow from all
      php_flag magic_quotes_gpc off
      php_flag register_globals off
      php_flag magic_quotes_runtime off
      php_flag short_open_tag on
    </directory>

    Kommt nicht auf die Idee den Z-Push Ordner nach “Microsoft-Server-ActiveSync” zuschieben – es geht nicht!
    Die PHP Optionen könnt ihr im vHost oder auch in einer .htaccess Datei definieren – ich mache dies in der vHost der Übersicht zu liebe.

  5. Nun müssen wir Z-Push noch konfigurieren, als erstes kopiert die ‘backend/ics.php’ zur Seite – diese benötigen wir nicht.
    mv /var/www/z-push/backend/ics.{php,bak}

    Öffnet nun ‘/var/www/z-push/config.php’ in einem beliebigen Editor und passt folgende Stellen entsprechend eurem Server an:

    $BACKEND_PROVIDER ="BackendIMAP";
    define('IMAP_SERVER', 'imap.server.com');
    define('IMAP_PORT', 143);
    define('IMAP_OPTIONS', '/notls/norsh/novalidate-cert');
    define('IMAP_SENTFOLDER', '');

    Standardmässig laufen alle IMAP Server auf 143 – wer will kann dies auch auf IMAPS setzen, dazu einfach den Port 993 verwenden, plus /notls/norsh/ssl/novalidate-cert für die IMAP Optionen – sonst bekommt ihr Probleme mit der Authentifizierung.

So das ist alles was ihr auf dem Server machen müsst – testen könnt ihr das Ganze indem ihr auf http://www.server.com/Microsoft-Server-ActiveSync geht – ihr solltet nach Benutzername und Passwort gefragt werden. Nachdem Login sollte etwas stehen wie: GET not supported.

Damit nun auch das iPhone mehr oder weniger sauber mit Z-Push funktioniert müssen zwei Dinge noch gemacht werden:

  1. erstens dürfen die Mails nicht als gelesen markiert werden, da ihr sonst keine Benachrichtigung bekommt
  2. zweitens passen wir Z-Push so an, dass ihr die Mails verschieben könnt! Löschen ist im Moment leider noch nicht möglich mit dem iPhone

Mails nicht als gelesen markieren
Sucht in der “backend/imap.php” nach folgender Zeile:

$mail = @imap_fetchheader($this->_mbox, $id, FT_PREFETCHTEXT | FT_UID) . @imap_body($this->_mbox, $id, FT_PEEK | FT_UID);

und ersetzt diesen mit

$mail = @imap_fetchheader($this->_mbox, $id, FT_UID) . @imap_body($this->_mbox, $id, FT_PEEK | FT_UID);

Mails verschieben können
Sucht in der “backend/diffbackend.php” nach folgender Stelle:

function ImportMessageMove($id, $newfolder) {

und setzt nun vor “return true;”

$this->_backend->MoveMessage($this->_folderid, $id, $newfolder);

Mit diesen beiden Anpassungen könnt ihr die Push-Funktionalität mit jedem beliebigen IMAP Account und dem iPhone (fast) komplett ausnutzen.

23 Comments
  1. Lenin says:

    hi – sehr guter artikel – die tweaks am ende haben mir sehr geholfen – ich habe eine kleine frage, kann z-push mit verschiedenen email accs umgehen (die vom gleichen server behandelt werden?!) – bei mir geht das im moment aufjedenfall nicht…

    schonmal danke^^

    19th January 2009 at 18:34

  2. Kilrathy says:

    Hi, danke für dein Feedback!
    Also damals als ich Z-Push produktiv liefen lies, konnte ich meine und mein Kollege seine eigene Domain abrufen – solange die Domains auf den gleichen Mailserver gehostet werden, sollte dies gehen. Denn Z-Push macht ja nur IMAP auf den Mailserver.

    19th January 2009 at 18:41

  3. Marcus R. says:

    Habs so gemacht wie beschrieben. Bei mir kommt der Fehler:

    Fatal error: Class 'BackendICS' not found in C:xampphtdocsz-pushindex.php on line 102

    19th January 2009 at 18:49

  4. Kilrathy says:

    Hast du in der config.php auch $BACKEND_PROVIDER = "BackendIMAP"; gesetzt und nicht $BACKEND_PROVIDER = "BackendICS";? Die backend ics auch zur Seite kopiert?

    19th January 2009 at 19:49

  5. marcelkraan says:

    i have my inbox in an other folder… incomming but z-push is not giving that trough?
    any idea?

    19th January 2009 at 21:36

  6. Lars says:

    Hallo,

    auf meinem Server läuft das irgendwie nicht. Wieso auch immer. hab einen Vserver von 1blu.de mit Depian 4.0 drauf.

    19th January 2009 at 07:15

  7. Kilrathy says:

    Sorry dass ich dich korrigier, aber es heisst nicht DePian sondern DeBian! Und da du den Distri namen nicht wirklich im Griff hast, geht ich mal davon aus, dass du auch nicht wirklich Erfahrung hast mit Fehler suchen in Logfiles…?

    19th January 2009 at 10:55

  8. Lars says:

    doch ich kenn mich nen bissl damit aus.
    Ich weiss auch das es Debian heisst, hab diesen Server seit ca. 2 Jahren also ohne eine gewisse Erfahrung geht das alles net.

    Hab auch schon etliches per SSH-Verbindung installiert, aber nun stehe ich mal auf dem Schlauch..

    19th January 2009 at 07:02

  9. Kilrathy says:

    Nun die Eingrenzung ist schwer da du mir keine Angaben machst, was nicht geht? Funktioniert der Link http://www.server.com/Microsoft-Server-ActiveSync… Du solltest eine Benutzer/Passwort Abfrage erhalten…

    Was meint das access/error Log vom Apache? Debug Log vom Z-Push? Nutze für das pasten von Logfiles http://pastebin.com/

    19th January 2009 at 07:31

  10. choise says:

    hi eine frage, geht das löschen mittlerweile irgendwie

    19th January 2009 at 23:11

  11. choise says:

    ach ja, also soweit mit dem GET Fehler im Browser komm ich.
    Aber wie muss ich mein iPhone konfigurieren?
    Exchange ?
    Exchange und dann als Server meinedomain.de/Microsoft…etc ?

    19th January 2009 at 23:22

  12. Kilrathy says:

    Ja, mit dem angepassten Code von hier geht das löschen….

    Jain, als Server nur "meinedomain.de", den rest fügt das iPhone im normalfall selber an resp sucht dort. am besten du machst eine subdomain "push.meinedomain.de" dann ist's ein bisschen einfacher.

    19th January 2009 at 05:17

  13. choise says:

    seltsam warum das bei mir nicht funktioniert.

    habe bei mir das ding unter "projekte.meinedomain.de" liegen.
    in der httpd.conf der subdomain sind die entsprechenden einstellungen gemacht.
    wenn ich "projekte.meinedomain.de/Microsof.." aufrufe, gelange ich zum Login mit besagtem GET Fehler.

    versuche ich allerdings am iphone den server "projekte.meinedomain.de" zu benutzen, kommt ein Fehler.

    Noch eine idee?

    19th January 2009 at 09:49

  14. Kilrathy says:

    Hast du den vhost gleich meinem Beispiel gebaut? Ich habs leider ewigs nicht mehr benutzt.
    Entweder gehts ohne das Microsoft-blbla oder du musst es auch noch schreiben… kontroller auch die Serverlogs, was sagen die, wenn du versuchst mit dem iPhone zu verbinden?

    19th January 2009 at 06:07

  15. Jens says:

    Hallo,
    super Anleitung. Danke.
    Mails lesen geht auch wunderbar, ich dachte nur, bei Push würde ich eine Meldung aufs iPhone bekommen wenn ich eine neue Mail bekommen habe. Das ist leider nicht so.
    Mache ich was falsch, oder gehe ich von falschen vorraussetzungen aus?
    Danke Jens

    19th January 2009 at 21:58

  16. Kilrathy says:

    Push im Zusammenhang mit Mails bedeutet, dass du direkt benachrichtigt wirst, wenn eine Mail in der Mailbox eintrifft. Nicht jedoch eine solche Meldung wie man es von Zeitungs-Apps oder WhatsApp kennt.

    19th January 2009 at 08:38

  17. Jens says:

    Hallo, danke für Deine Antwort.
    Wie schnell soll das denn dann gehen. Nach 5 min hat es immer noch nicht "Pling" gemacht.
    Bei imap habe ich 15min eingestellt und das funktioniert auch.

    Mfg Jens

    19th January 2009 at 13:07

  18. Kilrathy says:

    Also wenn Push mit Mail funktioniert, dann mindest nach 5 Minuten sollte es klappen.
    Ich habe die aktuelle z-push schon länger nicht mehr probiert.

    19th January 2009 at 07:06

  19. Frank says:

    Vielen vielen Dank. Ich habe erst seid wenigen Tagen ein Iphone und es funktioniert wirklich super mit deiner Anleitung. Installiert habe ich die Version 1.4.1RC und nutze als imap ein dovecot.

    MfG
    Frank

    19th January 2009 at 21:30

  20. Stephan says:

    Auch von mir ein Danke. Übrigens funktioniert löschen und verschieben inzwischen auch über iPhone tadellos. Was Mails angeht: ein vollwertiger Exchange-Fake. Perfekt.

    19th January 2009 at 14:06

  21. Jan says:

    Hallo Leute,

    erstmal vorweg, ich finde diese Anleitung hier super! Aber jetzt habe ich ein kleines Problem. Ich nutze einen Apache 2.2.19 mit PHP 5.2.11 unter Windows 2003 Server. Ich habe alles konfiguriert wie es oben steht und der PUSH Service ist auch unter der URL erreichbar und fordert eine Auth von mir. Wenn ich mich dann aber einloggen möchte werde ich abgewiesen (die Daten sind aber richtig). Als Mailserver nutze ich den aktuellsten hMailServer. Hat jemand eine Idee?

    Danke

    19th January 2009 at 14:52

  22. Jan says:

    Übrigens so sieht meine debug.txt aus:

    07/13/11 15:58:53 [4932] Start
    07/13/11 15:58:53 [4932] Z-Push version: 1.5.4-707
    07/13/11 15:58:53 [4932] Client IP: *****
    07/13/11 15:58:53 [4932] Access denied: no password sent.
    07/13/11 15:58:53 [4932] end
    07/13/11 15:58:53 [4932] ——–

    Access denied: no password sent. Das wunder mich etwas! Das Kennwort habe ich eingetragen

    19th January 2009 at 14:59

  23. cef__ says:

    Sauber, danke! :)

    19th January 2009 at 17:47

Leave a comment