All new Registrations are manually reviewed and approved, so a short delay after registration may occur before your account becomes active.
Z-push for MX Route
@jarland please remove if not appropriate!
So I have a service with MXRoute, unfortunately due to it being quite unreliable MXRoute doesn't currently offer Active Sync. I decided to see if it was possible to setup Z-push on a standalone VPS to connect to the MXRoute servers... Turns out it is!
I have put together a small document to explain how I did it. Note Z-push is not the most reliable and there are a couple of annoying issues that I haven't managed to fix yet.
Using Z-PUSH (2.3.5) to connect to MX Route
Known Issues:
Z-push syncs the shared address book, I haven’t worked out how to stop this, it’s a minor issue, but you do need to be aware of it.
Z-push fails to get the name of the calendar, so on an activesync device the calendar name shows up as unknown, but it works.
Z-push pulls the tasks through as a calendar, I have turned off syncing tasks.
Z-push itself isn’t the most reliable platform. This isn’t an issue per se, but it is something you need to be aware of.
Pre-Reqs
A VPS or server, I am running Ubuntu 16.04 LTS
A MXRoute account
Apache installed with an SSL cert (I’m using letencrypt)
PHP7 with php-cli and php-soap
Instructions
Add the z-push repo by creating /etc/apt/sources.list.d/z-push.list with the content
deb http://repo.z-hub.io/z-push:/final/Ubuntu_16.04/ /
Download and add the repo key to the keychain
wget -qO - http://repo.z-hub.io/z-push:/final/Debian_8.0/Release.key | sudo apt-key add –
Run apt-get update
We then need to install the z-push packages that we need
apt-get install z-push-common z-push-config-apache z-push-backend-caldav z-push-backend-carddav z-push-backend-combined z-push-backup-imap z-push-ipc-sharedmemory
This will install and configure z-push ready to go, we now need to edit the config files to tell it where to get the contacts, calendar and email from.
Start by editing /usr/share/z-push/config.php
Change the section “Default Settings” to match your timezone and ensure that the define(‘USE_FULLEMAIL_FOR_LOGIN’,true); is set to true.
Under the logging settings there is a specialLogUsers value, this is really useful to put a user in here when you need to troubleshoot, this generates debug logs for the named user and which can be found in the /var/log/z-push directory, but remember to remove them when you have done your testing as they can generate massive log files.
The only other setting we need to change is the Backend settings.
Change the backend provider setting to:
define(‘BACKEND_PROVIDER’,’BackendCombined’);
Save and exit the file
Next edit the /usr/share/z-push/backend/combined/config.php
Update it to match the following values
'backends' => array(
'i' => array(
'name' => 'BackendIMAP',
),
'd' => array(
'name' => 'BackendCardDAV',
),
'c' => array(
'name' => 'BackendCalDAV',
),
),
'delimiter' => '/',
//force one type of folder to one backend
//it must match one of the above defined backends
'folderbackend' => array(
SYNC_FOLDER_TYPE_INBOX => 'i',
SYNC_FOLDER_TYPE_DRAFTS => 'i',
SYNC_FOLDER_TYPE_WASTEBASKET => 'i',
SYNC_FOLDER_TYPE_SENTMAIL => 'i',
SYNC_FOLDER_TYPE_OUTBOX => 'i',
// SYNC_FOLDER_TYPE_TASK => 'c',
SYNC_FOLDER_TYPE_APPOINTMENT => 'c',
SYNC_FOLDER_TYPE_CONTACT => 'd',
SYNC_FOLDER_TYPE_NOTE => 'c',
SYNC_FOLDER_TYPE_JOURNAL => 'c',
SYNC_FOLDER_TYPE_OTHER => 'i',
SYNC_FOLDER_TYPE_USER_MAIL => 'i',
SYNC_FOLDER_TYPE_USER_APPOINTMENT => 'c',
SYNC_FOLDER_TYPE_USER_CONTACT => 'd',
SYNC_FOLDER_TYPE_USER_TASK => 'c',
SYNC_FOLDER_TYPE_USER_JOURNAL => 'c',
SYNC_FOLDER_TYPE_USER_NOTE => 'c',
SYNC_FOLDER_TYPE_UNKNOWN => 'i',
),
//creating a new folder in the root folder should create a folder in one backend
'rootcreatefolderbackend' => 'i',
);
}
}
This tells z-push which backend is responsible for which function.
Next we need to edit the individual service files we will start with email.
Edit the file /usr/share/z-push/backend/imap/config.php
Update the following values, this is assuming you are using MXRoute’s London servers.
// Defines the server to which we want to connect
define('IMAP_SERVER', 'london.mxroute.com');
// connecting to default port (143)
define('IMAP_PORT', 993);
// best cross-platform compatibility (see http://php.net/imap_open for options)
define('IMAP_OPTIONS', '/ssl/norsh');
// Mark messages as read when moving to Trash.
// BE AWARE that you will lose the unread flag, but some mail clients do this so the Trash folder doesn't get boldened
define('IMAP_AUTOSEEN_ON_DELETE', false);
// Since I know you won't configure this, I will raise an error unless you do.
// When configured set this to true to remove the error
define('IMAP_FOLDER_CONFIGURED', true);
// Folder prefix is the common part in your names (3, 4)
define('IMAP_FOLDER_PREFIX', '');
// Inbox will have the preffix preppend (3 & 4 to true)
define('IMAP_FOLDER_PREFIX_IN_INBOX', false);
// Inbox folder name (case doesn't matter) - (empty in 4)
define('IMAP_FOLDER_INBOX', 'INBOX');
// Sent folder name (case doesn't matter)
define('IMAP_FOLDER_SENT', 'inbox.SENT');
// Draft folder name (case doesn't matter)
define('IMAP_FOLDER_DRAFT', 'inbox.DRAFTS');
// Trash folder name (case doesn't matter)
define('IMAP_FOLDER_TRASH', 'inbox.TRASH');
// Spam folder name (case doesn't matter). Only showed as special by iOS devices
define('IMAP_FOLDER_SPAM', 'inbox.junk');
// Archive folder name (case doesn't matter). Only showed as special by iOS devices
define('IMAP_FOLDER_ARCHIVE', 'ARCHIVE');
You also want to update the method used for sending emails (I am using an SSL connection to MXRoute)
define('IMAP_SMTP_METHOD', 'smtp');
global $imap_smtp_params;
$imap_smtp_params = array('host' => 'ssl://london.mxroute.com', 'port' => 465, 'auth' => true, 'username' => 'imap_username', 'password' => 'imap_password' );
The above ‘imap_username’ and ‘imap_password’ are variables and do not need changing to the actual username and password.
Save and close the file.
Next we will setup syncing contacts
Edit /usr/share/z-push/backend/carddav/config.php update the following
// Server protocol: http or https
define('CARDDAV_PROTOCOL', 'https');
// Server name
define('CARDDAV_SERVER', 'london.mxroute.com');
// Server port
define('CARDDAV_PORT', '2080');
// Address book path
define('CARDDAV_PATH', '/rpc/addressbooks/%u/');
// Server path to the default address book
define('CARDDAV_DEFAULT_PATH', 'contacts/');
// Support sync-collection
define('CARDDAV_SUPPORTS_SYNC', false);
Save and close the file
Finally the calendar sync
Edit /usr/share/z-push/backend/caldav/config.php
// Server protocol: http or https
define('CALDAV_PROTOCOL', 'https');
// Server name
define('CALDAV_SERVER', 'london.mxroute.com');
// Server port
define('CALDAV_PORT', '2080');
// Path
define('CALDAV_PATH', '/rpc/calendars/%u/');
// Default CalDAV folder (calendar folder/principal). This will be marked as the default calendar in the mobile
define('CALDAV_PERSONAL', 'calendar');
// If the CalDAV server supports the sync-collection operation
// DAViCal, SOGo and SabreDav support it
// SabreDav version must be at least 1.9.0, otherwise set this to false
// Setting this to false will work with most servers, but it will be slower
define('CALDAV_SUPPORTS_SYNC', false);
// Maximum period to sync.
// Some servers don't support more than 10 years so you will need to change this
define('CALDAV_MAX_SYNC_PERIOD', 2147483647);
Save and close the file
Although not necessarily I restart apache at this point.
service apache2 restart
Client Device
On your client device (iOS / Android / Outlook 2013+)
As there is no autodiscovery function you will need to enter the settings manually.
Username: Full email address
Password: Users MXRoute Password
Server: Your VPS address (i.e. z-push.yourdomain.com)
Basic Troubleshooting
Check the apache and z-push logs, both of which can be found in /usr/var/log/
Turn on debugging for a single user (see above for details)
Check you can access activesync on your server https://z-push.yourdomain.com/Microsoft-Server-ActiveSync, you should be promoted for a username and password use the email address and the users mxroute password, you should see a page that gives you the activesync information and tell you that “GET is not supported”.
You should now be good to go!
Comments
I am using the London service, this should work for the US servers to but you will need to adjust the server as applicable.
Quite appropriate
I'm using Z-push for push of my emails (emails only, no calender etc) and until now I have not (yet ?) experienced any isses. Push might be delayed by a few seconds (but that's OK).
Are there any known issues in pushing emails with z-push ? @Jarland ?
Thanks
BTW: I wrote a how-to-setup-z-push for myself (email only). will cross-check it with your document.
Just that multi tenant zpush setups have a tendency to randomly not work for no clear reason.
@jarland: multi-tenant as in "multiple users on the same server/domain" ? If so: any idea on whether there was some kind of maximum number of concurrent users z-push was able to handle ? Tx
I think I had about 25 active users each with their own domain on my installations, and it was a constant stream of "it's not working, ok now it's working, ok now it's not working." Every day would be at minimum one person experiencing issues at random while others were fine, and troubleshooting options are pretty limited when it's both working and not working at the same time, so I came to trust it less and less, and it just took too much time to deal with compared to it's benefits.
That's been my experience with just a couple of users, there is no reliable way to monitor it. It's just a bit flakey. I think SoGo have a activesync client too, but have found even less documentation on that. It seems the only reliable way to get activesync is to pay for it. I have used Zimbra in the past with Zextra's and that has proved to be really reliable, if zextras produced a "standalone" version I would pay for it.
@jarland, @michaels: do you recall what version of Z-push this was ... My current project heavily relies on z-push :-(
Every version I ever tried :P
Been about 6 months since I gave up on it completely and stopped trying to support it, if that matters.
Did you start using SoGo ? Or implement another push technology ? Tx !
I have not yet.
Version 2.3.5