So, jetzt habe ich das mal alles schön zusammengeklöppelt.
Ziel war: Auf den iDevices Pushmail zu haben. Normalerweise braucht man das nicht, wenn der Client IMAP IDLE kann — aber IOS kann das eben nicht. Manche sagen, weil das ziemlich viel Strom kostet; ich weiß es nicht.
Das hat zur Folge, daß Mails erst dann abgerufen werden, wenn man in die Mail-App geht. Funktioniert zwar, ist aber nicht schön. Mit dem Exchange von der Firma funktioniert Pushmail sehr schön, aber ich habe eben kein Exchange und werde sicherlich auch nie eins haben — das walte Hugo!
Der Mechanismus hinter dem Pushmail, wie es Exchange macht, heißt ActiveSync, und da gibt es eine OpenSource-Implementierung: z‑push.
Auf gehts!
Einen neuen vhost erzeugt, push.sokoll.com, mit SSL selbstverständlich. Wildcard-Zertifikate sind übrigens eine tolle Erfindung 🙂
<VirtualHost 195.110.60.28:443> RewriteEngine On RewriteRule ^/Microsoft-Server-ActiveSync$ /webroot/com/sokoll/push/index.php DocumentRoot /webroot/com/sokoll/push ServerName push.sokoll.com ServerAdmin rainer@sokoll.com LogFormat "%v %l %u %t \"%r\" %>s %b" combined CustomLog /var/log/apache2/push.sokoll.com-access_log combined ErrorLog /var/log/apache2/push.sokoll.com-error_log <IfModule headers_module> Header append MS-Server-ActiveSync: 14.0 Header append MS-ASProtocolVersions: 1.0,2.0,2.1,2.5,12.0,12.1,14.0 Header append MS-ASProtocolCommands: Sync,SendMail,SmartForward,SmartReply,GetAttachment,GetHierarchy,CreateCollection,DeleteCollection,MoveCollection,FolderSync,FolderCreate,FolderDelete,FolderUpdate,MoveItems,GetItemEstimate,MeetingResponse,ResolveRecipients,ValidateCert,Provision,Search,Ping,Notify,ItemOperations,Settings </IfModule> SSLEngine on SSLCertificateFile /etc/ssl/private/wildcard.sokoll.com.crt SSLCertificateKeyFile /etc/ssl/private/wildcard.sokoll.com.key SSLProtocol -ALL +TLSv1 +TLSv1.1 +TLSv1.2 SSLHonorCipherOrder on SSLCipherSuite ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA:DHE-RSA-CAMELLIA128-SHA:AES128-SHA:HIGH:!aNULL:!MD5:!ADH <Directory /webroot/com/sokoll/push> 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> </VirtualHost>
Wir wechseln in die DocumentRoot und holen uns das aktuelle z‑push (heute: 2.1.3) und packen das aus.
Bei mir sieht das dann so aus:
allinclusive:/webroot/com/sokoll/push # ls -l total 168 -rw-rw-r-- 1 wwwrun www 11571 Jun 11 18:03 INSTALL -rw-rw-r-- 1 wwwrun www 36212 Jan 28 2013 LICENSE drwxrwxr-x 8 wwwrun www 4096 Jun 25 18:52 backend -rw-rw-r-- 1 wwwrun www 13611 Nov 28 18:45 config.php drwxrwxr-x 2 wwwrun www 4096 Jun 25 18:52 include -rw-rw-r-- 1 wwwrun www 13790 Sep 17 2013 index.php drwxrwxr-x 11 wwwrun www 4096 Jun 25 18:52 lib drwxrwxr-x 2 wwwrun www 4096 Jun 25 18:52 tools -rw-rw-r-- 1 wwwrun www 2040 Jun 25 18:51 version.php -rwxrwxr-x 1 wwwrun www 34476 Feb 28 2013 z-push-admin.php -rwxrwxr-x 1 wwwrun www 29586 Jan 4 2013 z-push-top.php allinclusive:/webroot/com/sokoll/push #
config.php bearbeiten:
allinclusive:/webroot/com/sokoll/push # diff -u config.php.org config.php --- config.php.org 2014-12-03 17:52:57.425843135 +0100 +++ config.php 2014-11-28 18:45:02.302475244 +0100 @@ -45,7 +45,7 @@ * Default settings */ // Defines the default time zone, change e.g. to "Europe/London" if necessary - define('TIMEZONE', ''); + define('TIMEZONE', 'Europe/Berlin'); // Defines the base path on the server define('BASE_PATH', dirname($_SERVER['SCRIPT_FILENAME']). '/'); @@ -196,7 +196,7 @@ * Backend settings */ // the backend data provider - define('BACKEND_PROVIDER', ''); + define('BACKEND_PROVIDER', 'BackendIMAP'); /********************************************************************************** * Search provider settings @@ -266,4 +266,4 @@ */ ); -?> \ No newline at end of file +?> allinclusive:/webroot/com/sokoll/push #
INSTALL lesen und eventuell php-Pakete nachinstallieren. backend/imap/config.php habe ich in Ruhe gelassen, dort steht drin, man möge sich per IMAP auf localhost verbinden. Das ist zwar keine verschlüsselte Verbindung, aber da es localhost ist, interessiert uns das nicht.
Mein IMAP-Server (dovecot) horchte nicht auf localhost, also müssen wir das ändern:
allinclusive:/etc/dovecot/conf.d # diff -u 10-master.conf.org 10-master.conf --- 10-master.conf.org 2014-11-28 12:39:50.850711901 +0100 +++ 10-master.conf 2014-11-28 13:07:19.034694100 +0100 @@ -16,7 +16,8 @@ service imap-login { inet_listener imap { - port = 0 + address = localhost + port = 143 } inet_listener imaps { port = 993 allinclusive:/etc/dovecot/conf.d #
Im Prinzip war es das. Wir wollen es aber noch schicker haben: Autodiscover. Ein Mechanismus von Microsoft, mit dem man dem Mailclient nur noch die Email-Adresse und das Paßwort übergeben muß, den Rest (Server, Ports, Verschlüsselung) findet der Client selber. Es gibt zwar auch automx — aber da hätte ich einen kleinen Medienbruch, da ich eine Website ansurfen muß.
Also einen neuen vhost einrichten 🙂
<VirtualHost 195.110.60.28:443> DocumentRoot /webroot/com/sokoll/autodiscover ServerName autodiscover.sokoll.com ServerAdmin rainer@sokoll.com CustomLog /var/log/apache2/autodiscover.sokoll.com-access_log combined ErrorLog /var/log/apache2/autodiscover.sokoll.com-error_log SSLEngine on SSLCertificateFile /etc/ssl/private/wildcard.sokoll.com.crt SSLCertificateKeyFile /etc/ssl/private/wildcard.sokoll.com.key SSLProtocol -ALL +TLSv1 +TLSv1.1 +TLSv1.2 SSLHonorCipherOrder on SSLCipherSuite ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA:DHE-RSA-CAMELLIA128-SHA:AES128-SHA:HIGH:!aNULL:!MD5:!ADH Alias /Autodiscover/Autodiscover.xml "/webroot/com/sokoll/autodiscover/autodiscover.php" Alias /AutoDiscover/AutoDiscover.xml "/webroot/com/sokoll/autodiscover/autodiscover.php" <Directory /webroot/com/sokoll/autodiscover> AllowOverride none Order allow,deny Allow from all </Directory> </VirtualHost>
Die autodiscover.php hat mir dann einige Kopfschmerzen gemacht, bis ich doch eine gefunden habe, die funktioniert, und zwar beim Apfelschwein — herzlichen Dank! Zu Dokumentationszwecken liegt meine hier. nach autodiscover.php umbenennen, ins richtige Verzeichnis werfen, Variablen anpassen, fertig.
Apachen und Dovecot reloaden, das wars.
Und so sieht es dann aus:
Einen neuen Exchange-Account anlegen:
Email-Adresse und Paßwort eingeben, die Beschreibung ist frei wählbaar:
Für kurze Zeit taucht ein Bildschirm auf, der sagt: “Alles OK”
Da z‑sync nur Mail macht, wählen wir auch nur Mail aus (Für den Rest haben wir ja owncloud mit Card/CalDAV :-))
Alles schick!
Mitgeliefert werden zwei kleine php-Skripte für die Kommandozeile: z‑push-top.php zeigt die verbundenen User, Geräte, IP-Adressen und den aktuellen Status an, z‑push-admin.php gibt verschiedene Informationen und über die registrierten Geräte, das ist ganz witzig.
Synchronized by user: rainer@sokoll.com ----------------------------------------------------- DeviceId: applc39jhx51f39c Device type: iPhone UserAgent: Apple-iPhone5C2/1202.435 Device Model: iPhone5C2 Device friendly name: iPhone 5 Device OS: iOS 8.1.1 12B435 Device OS Language: de ActiveSync version: 14.0 First sync: 2014-11-28 18:52 Last sync: 2014-12-03 19:57 Total folders: 62 Synchronized folders: 2 Synchronized data: Emails(2) Status: OK WipeRequest on: not set WipeRequest by: not set Wiped on: not set Attention needed: No errors known
Geht aber auch mit Android:
Synchronized by user: rainer@sokoll.com ----------------------------------------------------- DeviceId: sec03d95a650e199 Device type: SAMSUNGSMT UserAgent: SAMSUNG-SM-T110/101.40202 ActiveSync version: 14.0 First sync: 2014-11-28 19:45 Last sync: 2014-11-28 19:51 Total folders: 60 Synchronized folders: 1 Synchronized data: Emails Status: OK WipeRequest on: not set WipeRequest by: not set Wiped on: not set Attention needed: No errors known
Hi,
vielen Dank für die tolle Anleitung.
Leider funktioniert diese bei mir nicht :-/
Ich verwende ein Debian 7.8 Stable mit MailCow (https://www.debinux.de/mailcow/)
Als webserver kommt Nginx zum Einsatz und erhalte eine Fehler Meldung im Browser:
This page contains the following errors:
error on line 1 at column 3: xmlParsePI : no target name
Below is a rendering of the page up to the first error.
Ich hoffe das Du mir da weiter Helfen kannst.
Mit freundlichen Grüßen
Andreas
Du hast in irgendeinem beteiligten XML-File
”
Hallo,
ich finde die Anleitung total super! Bekommt man das so auch auf einem Synology NAS zum Laufen?
Gruß
Jan
Hallo Jan!
Hast du es auf einem Synology zum laufen gebracht?
Gruß
Ralf