Florent Peterschmitt

ActiveSync avec Z-Push, le mail

Z-Push est une implémentation en PHP du protocol ActiveSync de Microsoft. Il permet de synchroniser ses mails, calendriers et contacts. Pour l’instant je ne couvrirai que le mail, le calendrier viendra plus tard éventuellement.

Le guide d’installation est assez spartiate.

Comme d’hab, je fais mes install sur CentOS 7 et avec PHP-FPM.

PHP

Déjà, installez PHP 5.6. Ça ne fonctionnera pas du tout avec PHP 7, pour le moment en tout cas. J’ai testé, laissez tomber l’idée. À moins d’avoir du temps pour dev, mais si eux n’ont pas encore sorti une version "PHP 7 proof", c’est que ça n’est sans doute pas si simple.

https://webtatic.com/packages/php56/

IMAP et SMTP

Avoir un serveur IMAP et SMTP disponible et déjà configuré.

Normalement ces deux bouzins là sont assez connus pour qu’Internet soit truffé de tutos…

Paquets

Les paquets ne sont pas signés malheureusement :/

/etc/yum.repos.d/z-push.repo

[z-push]
name=Z-Push noarch Enterprise Linux 7 - $basearch
baseurl=http://repo.z-hub.io/z-push:/final/RHEL_7
failovermethod=priority
enabled=1
gpgcheck=0
yum makecache
yum install z-push-common z-push-backend-imap z-push-ipc-sharedmemory

On pourra utiliser z-push-ipc-memcached à la place de sharedmemory.

Nginx et PHP-FPM

/etc/nginx/conf.d/peterschmitt.fr.conf

server {
    server_name peterschmitt.fr;

    location /Microsoft-Server-ActiveSync {
        fastcgi_split_path_info ^(.+?\.php)(/.*)$;

        include fastcgi_params_z-push;
        fastcgi_param SCRIPT_FILENAME /usr/share/z-push/index.php;
        fastcgi_param DOCUMENT_ROOT /usr/share/z-push/;
        fastcgi_pass unix:/srv/php-fpm/socks/z-push;
    }
}

La configuration automatique tente de joindre le domaine de l’adresse mail à configurer, sur la location détaillée ici.

J’ai récupéré cette information depuis la configuration Apache de Z-Push.

/etc/php-fpm.d/z-push.conf

[z-push]
access.log = access.log
listen = /srv/php-fpm/socks/z-push
listen.owner = nginx
listen.group = nginx
listen.mode = 0660

user = z-push
group = z-push

pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35

slowlog = www-slow.log

chdir = /usr/share/z-push

catch_workers_output = yes

php_flag[display_errors] = on
php_admin_value[error_log] = php-error.log
php_admin_flag[log_errors] = on

php_value[session.save_handler] = files
php_value[session.save_path] = /session

Système

Les paquets sont configurés pour l’utilisateur apache, car il existe un paquet embarquant de la conf Apache. On adapte tout ça :

useradd z-push
chgrp z-push /etc/z-push/*
chown -R z-push:z-push /var/log/z-push/
chown -R z-push:z-push /var/lib/z-push/
systemctl restart php-fpm
systemctl restart nginx

Configuration

Faire in tour dans /etc/z-push/imap.conf.php et adapter les dossiers IMAP en fonction de ce qui est actif sur le serveur IMAP, puis passer la define IMAP_FOLDER_CONFIGURED à true.

Configurez-y aussi la connexion au serveur IMAP.

Pour SMTP, cherchez la variable $imap_smtp_params. Le fichier de configuration est très bien documenté, l’idéal étant une configuration du type :

<?php
$imap_smtp_params = array(
    'host' => 'ssl://smtp.peterschmitt.fr',
    'port' => 465,
    'auth' => true,
    'localhost' => 'smtp.peterschmitt.fr',
    'username' => 'imap_username',
    'password' => 'imap_password');

Test

Accéder à http://localhost/Microsoft-Server-ActiveSync et tester l’authentification.

Si déjà ça a fonctionné, vous pouvez passer à la suite, à savoir configurer un client mail voulant causer ActiveSync, comme un client mail mobile par exemple.

Enfin, testez l’envoi de mail en scrutant les logs de votre serveur mail.