diff --git a/conf/nginx.conf b/conf/nginx.conf
index db1a38a2..eb9a6335 100644
--- a/conf/nginx.conf
+++ b/conf/nginx.conf
@@ -53,6 +53,20 @@ server {
fastcgi_pass unix:/tmp/php-fastcgi.www-data.sock;
}
+ # Microsoft Exchange autodiscover.xml for email
+ location /autodiscover/autodiscover.xml {
+ include fastcgi_params;
+ fastcgi_param SCRIPT_FILENAME /usr/local/bin/mailinabox-exchange-autodiscover.php;
+ fastcgi_pass unix:/tmp/php-fastcgi.www-data.sock;
+ }
+
+ # Z-Push (Microsoft Exchange ActiveSync)
+ location /Microsoft-Server-ActiveSync {
+ include /etc/nginx/fastcgi_params;
+ fastcgi_param SCRIPT_FILENAME /usr/local/lib/z-push/index.php;
+ fastcgi_pass unix:/tmp/php-fastcgi.www-data.sock;
+ }
+
# ADDITIONAL DIRECTIVES HERE
}
diff --git a/setup/web.sh b/setup/web.sh
index 2aad8d05..8366bef7 100755
--- a/setup/web.sh
+++ b/setup/web.sh
@@ -36,9 +36,14 @@ rm -f /etc/init.d/php-fastcgi
ln -s $(pwd)/conf/phpfcgi-initscript /etc/init.d/php-fastcgi
update-rc.d php-fastcgi defaults
-# Put our webfinger server script into a well-known location.
-cp tools/webfinger.php /usr/local/bin/mailinabox-webfinger.php
-chown www-data.www-data /usr/local/bin/mailinabox-webfinger.php
+# Put our webfinger and Exchange autodiscover.xml server scripts
+# into a well-known location.
+for f in webfinger exchange-autodiscover; do
+ cp tools/$f.php /usr/local/bin/mailinabox-$f.php
+ chown www-data.www-data /usr/local/bin/mailinabox-$f.php
+done
+
+# Make some space for users to customize their webfinger responses.
mkdir -p $STORAGE_ROOT/webfinger/acct;
chown -R $STORAGE_USER $STORAGE_ROOT/webfinger
diff --git a/setup/zpush.sh b/setup/zpush.sh
new file mode 100755
index 00000000..a7347eb3
--- /dev/null
+++ b/setup/zpush.sh
@@ -0,0 +1,54 @@
+#!/bin/bash
+#
+# Z-Push: The Microsoft Exchange protocol server.
+# Mostly for use on iOS which doesn't support IMAP.
+#
+# Although Ubuntu ships Z-Push (as d-push) it has a dependency on Apache
+# so we won't install it that way.
+#
+# Thanks to http://frontender.ch/publikationen/push-mail-server-using-nginx-and-z-push.html.
+
+source setup/functions.sh # load our functions
+source /etc/mailinabox.conf # load global vars
+
+# Prereqs.
+
+apt_install \
+ php-soap php5-imap
+
+php5enmod imap
+
+# Copy Z-Push into place.
+
+if [ ! -d /usr/local/lib/z-push ]; then
+ ZPUSH=z-push-2.1.3-1892
+ wget -O /tmp/zpush.tgz http://download.z-push.org/final/2.1/$ZPUSH.tar.gz
+ tar -C /tmp -zxf /tmp/zpush.tgz
+ mv /tmp/$ZPUSH /usr/local/lib/z-push
+ ln -s /usr/local/lib/z-push/z-push-admin.php /usr/sbin/z-push-admin
+ ln -s /usr/local/lib/z-push/z-push-top.php /usr/sbin/z-push-top
+ rm /tmp/zpush.tgz;
+fi
+
+# Configure. Tell is to connect to email via IMAP using SSL. Since we connect on
+# localhost, the certificate won't match (it may be self-signed and invalid anyway)
+# so don't check the cert.
+sed -i "s/define('BACKEND_PROVIDER', .*/define('BACKEND_PROVIDER', 'BackendIMAP');/" /usr/local/lib/z-push/config.php
+#sed -i "s/define('IMAP_SERVER', .*/define('IMAP_SERVER', '$PRIMARY_HOSTNAME');/" /usr/local/lib/z-push/backend/imap/config.php
+sed -i "s/define('IMAP_PORT', .*/define('IMAP_PORT', 993);/" /usr/local/lib/z-push/backend/imap/config.php
+sed -i "s/define('IMAP_OPTIONS', .*/define('IMAP_OPTIONS', '\/ssl\/norsh\/novalidate-cert');/" /usr/local/lib/z-push/backend/imap/config.php
+
+
+# Some directories it will use.
+
+mkdir -p /var/log/z-push
+mkdir -p /var/lib/z-push
+chmod 750 /var/log/z-push
+chmod 750 /var/lib/z-push
+chown www-data:www-data /var/log/z-push
+chown www-data:www-data /var/lib/z-push
+
+# Restart service.
+
+service php-fastcgi restart
+
diff --git a/tools/exchange-autodiscover.php b/tools/exchange-autodiscover.php
new file mode 100755
index 00000000..77b0b966
--- /dev/null
+++ b/tools/exchange-autodiscover.php
@@ -0,0 +1,92 @@
+(.*?)<\/AcceptableResponseSchema>/', $post_body, $match);
+ $AcceptableResponseSchema = $match[1];
+
+ if ($AcceptableResponseSchema == "http://schemas.microsoft.com/exchange/autodiscover/mobilesync/responseschema/2006") {
+ // There is no way to convey the user's login name with this?
+ ?>
+
+
+
+
+
+
+ MobileSync
+ https://
+ https://
+
+
+
+
+
+(.*?)<\/EMailAddress>/', $post_body, $match);
+ $LOGIN = $match[1];
+
+ header("Content-type: text/xml");
+?>
+
+
+
+ https://
+
+ email
+ settings
+
+
+ IMAP
+
+ 993
+ on
+
+
+
+
+ SMTP
+
+ 587
+ on
+
+
+
+
+ DAV
+ https://
+ on
+ on
+
+
+
+
+ WEB
+ https:///mail
+ on
+
+
+
+
+
+
+