ActiveSync, z‑push, autodiscover

So, jetzt habe ich das mal alles schön zusammengeklöppelt.

Ziel war: Auf den iDe­vices Push­mail zu haben. Nor­ma­ler­wei­se braucht man das nicht, wenn der Cli­ent IMAP IDLE kann — aber IOS kann das eben nicht. Man­che sagen, weil das ziem­lich viel Strom kos­tet; ich weiß es nicht.
Das hat zur Fol­ge, daß Mails erst dann abge­ru­fen wer­den, wenn man in die Mail-App geht. Funk­tio­niert zwar, ist aber nicht schön. Mit dem Exch­an­ge von der Fir­ma funk­tio­niert Push­mail sehr schön, aber ich habe eben kein Exch­an­ge und wer­de sicher­lich auch nie eins haben — das wal­te Hugo!
Der Mecha­nis­mus hin­ter dem Push­mail, wie es Exch­an­ge macht, heißt Acti­ve­Sync, und da gibt es eine Open­So­ur­ce-Imple­men­tie­rung: z‑push.

Auf gehts!
Einen neu­en vhost erzeugt, push.sokoll.com, mit SSL selbst­ver­ständ­lich. Wild­card-Zer­ti­fi­ka­te sind übri­gens eine tol­le 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 wech­seln in die Docu­men­tRoot und holen uns das aktu­el­le z‑push (heu­te: 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 bear­bei­ten:

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 even­tu­ell php-Pake­te nach­in­stal­lie­ren. backend/imap/config.php habe ich in Ruhe gelas­sen, dort steht drin, man möge sich per IMAP auf local­host ver­bin­den. Das ist zwar kei­ne ver­schlüs­sel­te Ver­bin­dung, aber da es local­host ist, inter­es­siert uns das nicht.

Mein IMAP-Ser­ver (dove­cot) horch­te nicht auf local­host, also müs­sen 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 Prin­zip war es das. Wir wol­len es aber noch schi­cker haben: Auto­dis­co­ver. Ein Mecha­nis­mus von Micro­soft, mit dem man dem Mail­cli­ent nur noch die Email-Adres­se und das Paß­wort über­ge­ben muß, den Rest (Ser­ver, Ports, Ver­schlüs­se­lung) fin­det der Cli­ent sel­ber. Es gibt zwar auch automx — aber da hät­te ich einen klei­nen Medi­en­bruch, da ich eine Web­site ansur­fen muß.

Also einen neu­en 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 eini­ge Kopf­schmer­zen gemacht, bis ich doch eine gefun­den habe, die funk­tio­niert, und zwar beim Apfel­schwein — herz­li­chen Dank! Zu Doku­men­ta­ti­ons­zwe­cken liegt mei­ne hier. nach autodiscover.php umbe­nen­nen, ins rich­ti­ge Ver­zeich­nis wer­fen, Varia­blen anpas­sen, fertig.

Apa­chen und Dove­cot rel­oa­den, das wars.

 

Und so sieht es dann aus:

Einen neu­en Exch­an­ge-Account anlegen:

IMG_1258

Email-Adres­se und Paß­wort ein­ge­ben, die Beschrei­bung ist frei wählbaar:

IMG_1259

Für kur­ze Zeit taucht ein Bild­schirm auf, der sagt: “Alles OK

IMG_1260

Da z‑sync nur Mail macht, wäh­len wir auch nur Mail aus (Für den Rest haben wir ja own­cloud mit Card/CalDAV :-))

IMG_1261

Alles schick!

Mit­ge­lie­fert wer­den zwei klei­ne php-Skrip­te für die Kom­man­do­zei­le: z‑push-top.php zeigt die ver­bun­de­nen User, Gerä­te, IP-Adres­sen und den aktu­el­len Sta­tus an, z‑push-admin.php gibt ver­schie­de­ne Infor­ma­tio­nen und über die regis­trier­ten 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

4 Comments

Add a Comment
  1. Hi,

    vie­len Dank für die tol­le Anleitung.
    Lei­der funk­tio­niert die­se bei mir nicht :-/
    Ich ver­wen­de ein Debi­an 7.8 Sta­ble mit Mail­Cow (https://www.debinux.de/mailcow/)
    Als web­ser­ver kommt Nginx zum Ein­satz und erhal­te eine Feh­ler Mel­dung im Browser:
    This page con­ta­ins the fol­lo­wing errors:

    error on line 1 at column 3: xml­Par­se­PI : no tar­get name
    Below is a ren­de­ring of the page up to the first error.

    Ich hof­fe das Du mir da wei­ter Hel­fen kannst.

    Mit freund­li­chen Grüßen
    Andreas 

  2. Du hast in irgend­ei­nem betei­lig­ten XML-File

  3. Hal­lo,
    ich fin­de die Anlei­tung total super! Bekommt man das so auch auf einem Syn­o­lo­gy NAS zum Laufen?
    Gruß
    Jan 

    1. Hal­lo Jan!

      Hast du es auf einem Syn­o­lo­gy zum lau­fen gebracht?

      Gruß
      Ralf 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert