PushMail von Linux -> Iphone IOS6

veröffentlicht am : Di, 25. 09. 2012 geändert am: Di, 25. 09. 2012

Kategorie: iPhone und iPad --> Computer

Schlagworte:


So, das hat ein wenig gedauert...

Also, das Problem kennt jeder, der einen eigenen Root-Server hat und mit dem iPhone von dort auch kerne PushMails bekommen würde - und das am besten kostenlos (ohne Exchange und Co.) und ohne viel "Drum Rum".

Lange Zeit ging das gar nicht, man musste auf externe Dienstleister setzen und seinen Account z.B. zu google syncen oder sowas wie die PushMail App verwenden (dazu müssen aber alle Mails an einen fremden Server gesendet werden, der dann wiederum das "Pushen" übernimmt). Alles nicht so der Brüller...

Zum Glück fand ich kürzlich Z-Push, ein kleines Open-Source Projekt, welches versucht, dieses Problem zu lösen. Ist eigentlich Teil einer größeren Groupware-Lösung (Zarafa) aber da es unter GPL läuft, darf man es ja gerne verwenden.

Die Installation ist eigentlich denkbar einfach und kann an vielen Stellen nachgelesen werden, aber hier ein paar Tipps, damit es auch bei euch klappt (Beispiele beziehen sich auf ein Ubuntu System):

  1. Ihr braucht einen am besten schon fertig konfigurierten Apache, hier wäre es auch sinnvoll wenn HTTPS schon funktionieren würde (zwingend nötig).
  2. PHP5 sollte installiert sein und so konfiguriert, dass es für besagten Server läuft
  3. ihr solltet auf dem Server schon einen IMAP-Server laufen haben, ich nutze dafür Dovecot
  4. einige PHP-Module werden benötigt, darunter: php-mail und php-pear (mit apt-get installieren)
  5. dann die aktuelle Version runter laden (z.B. von hier ) und irgendwo auspacken. bei mir liegt das alles in /var/www
  6. ich hab dann einen link angelegt ln -s z-push-2.0.3-1476 z-push damit fällt ein upgrade leichter
  7. Dann noch den apache richtig configurieren. Dazu müssen einige Zeilen in die conf für diesen Server gepackt werden - bei mir liegt das in /etc/apache2/sites-available/server-ssl.conf
Alias /Microsoft-Server-ActiveSync /var/www/z-push/index.php
 <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>
 ErrorLog /var/log/apache2/zpush.example.com-error.log
 LogLevel warn
 CustomLog /var/log/apache2/zpush.example.com-access.log combined
 ServerSignature Off
Das mit dem Alias MUSS sein, sonst klemmt es... Apache neu starten nicht vergessen!

Ihr solltet jetzt noch die conifg.php anpassen. Dort sind insbesondere folgende Einträge wichtig:

BACKEND_PROVIDER = "BackendImap";
 define('IMAP_SERVER', 'localhost');
 define('IMAP_PORT', 143);
 define('IMAP_OPTIONS', '/notls/norsh');
 define('IMAP_DEFAULTFROM', '');

 define('IMAP_SENTFOLDER', 'Sent');
 define('IMAP_DELETEDITEMSFOLDER', 'Trash');
 define('IMAP_DRAFTSFOLDER', 'Draft');
 define('IMAP_INLINE_FORWARD', true);
 define('IMAP_USE_IMAPMAIL', true);
 define('IMAP_USE_FETCHHEADER', true);

ich hab die Kommentare dazwischen aus dem Beispielfile mal weggelöscht, wegen der Übersicht. Die Optionen sollten sich eigentlich von selbst erklären. Einige davon sind defaultmäßig schon gesetzt, andere leider nicht. Da müsst ihr vermutlich auch ein wenig rum-experimentieren, bis ihr die richtigen Settings habt.

So funktioniert es aber ganz gut, wenn ihr nun auf https://SERVER/Microsoft-Server-ActiveSync mit dem Browser geht, sollte so was wie "GET NOT SUPPORTED" als Fehlermeldung kommen. Evtl. kommen da auch noch mehr Fehlermeldungen, die meistens bedeuten, dass irgendein PHP-Modul fehlt.

Per Default ist z-Push auf MAPI configuriert, ihr solltet also, falls ihr das nicht nutzen wollt, die entsprechende Backend-Zeile auskommentieren oder löschen, sonst kommt es beim Sync zu Fehlern.

Wenn ihr so weit gekommen seit, solltet ihr eigentlich schon in der Lage sein, Pushmails zu bekommen (z-push kann noch weit mehr, also auch Termine und kontakte, todos etc syncen, aber das hab ich bisher nicht genutzt - dafür gibt’s ja die cloud).

Dazu müsst ihr in eurem IOS-Device (z.B. iphone) ein neues Exchange-Konto anlegen. Wichtig: Das Feld "Domain" leer lassen, die Zugangsdaten wie gewohnt eingeben.

Voila... das sollte klappen... es dauert ein wenig, bis alles syncrhonisiert ist, aber dann habt ihr PushMail...

Oder?

Naja... Fast... HTML-Mails gehen nicht. Das findet man ziemlich schnell raus, denn es wird immer nur der Plaintext anteil einer MultipartMail angezeigt - da fällt einem mal wieder auf, wie viel HTML-Mails man eigentlich bekommt.

Da gibt es momentan noch keine offizielle Lösung dafür (in dem Code wird HTML sogar explizit entfernt), aber wenn ihr euch den Branch as12.1 zieht, damit funktioniert es.

Um diesen Entwickler-Stand zu installieren, müsst ihr einfach nur svn auf eurem Server installiert haben und folgende Zeile eingeben:

svn checkout http://svn.berlios.de/svnroot/repos/z-push/branches/as12.1/

Das ganze hab ich in /var/www ausgeführt, da liegt ja auch schon das finale z-push. Jetzt nur noch den Link von as12.1 auf z-push anlegen und die config.php erneut anpassen (siehe oben).

Das Config-File bitte nicht kopieren, da in diesem noch eine Menge zusätzliche Informationen sind, die sonst fehlen. Ich habe folgende Änderungen (mal abgesehen von den oben schon erwähnten) vorgenommen

define('SYNC_CONFLICT_DEFAULT', SYNC_CONFLICT_OVERWRITE_SERVER);
define('BACKEND_CHARSET','UTF-8');
define('SINK_FORCERECHECK', 300);
define('PING_INTERVAL', 60);

Schaut euch die Kommentare in den beiden config-Files an, dann sollte es klar sein, was diese Optionen genau setzen.

Vergesst aber nicht, MAPI zu deaktivieren. Dazu solltet ihr am Ende des Config-File in dem dort definierten "BACKENDCOMBINED" alles außer IMAP deaktivieren:

define('BACKENDCOMBINED_CONFIG', serialize(array(
            'backends' => array(
                     'i' => array(
                          'name' => 'BackendIMAP',
                      ),
                 // 'v' => array(
                       // 'name' => 'BackendiConDir',
                 // ),
                 // 'c' => array(
                       // 'name' => 'BackendiCalDir',
                 // ),
    ),
    'delimiter' => '/',
     //creating a new folder in the root folder should create a folder in one backend
     'rootcreatefolderbackend' => 'i', 
   ))
 );

So, damit habe ich Push-HTML-Emails! Voila...

ACHTUNG: dieser Entwicklerstand wird natürlich von niemandem supportet und kann sich jederzeit ändern. Ich hab damit keine Probleme, das heißt aber nicht, dass da keine sind. Nutzung auf eigene Gefahr ;-)

 

Ein kleines Problem bleibt da aber immer noch: in IOS  kann man bei Exchange-Konten keine mehreren Absenderadressen angeben. Bei "einfachen" IMap-Accounts ist es möglich, einfach kommagetrennt mehrere Emailaddressen anzugeben (wobei man dazu den Umweg über die Notizen-App wählen muss, da man bei der Eingabe in den Settings kein "Komma" zur Verfügung hat). Bei Exchange funktioniert das leider nicht.

Ich habe momentan keine andere Lösung gefunden, als ein "Dummy" Account. Das legt man mit einem ungültigen IMAP oder Pop3-Account an, und als Postausgangsserver wird dann z.B. der von uns gerade Konfigurierte verwendet. Das ist unschön und umständlich, aber ich finde keine bessere Lösung. Vorschläge sind jederzeit willkommen!

erstellt Stephan Bösebeck (stephan)