Push Mail pour serveur Imap (local ou distant)
Pour continuer la construction pas à pas de notre serveur mail (cf installation d’un serveur mail brique par brique), nous allons offrir à nos utilisateurs de terminaux Windows Mobile le luxe du ‘push mail‘ (on ne peut pas demander à tout le monde d’avoir un SmartPhone sous Androïd, ceci dit, moi, ça me plairait assez !). Contrairement à une configuration classique, où le terminal interroge le serveur (en Pop ou Imap), nous allons faire en sorte que ce soit le serveur qui « pousse » les nouveaux mails vers le mobile.
- Côté Windows Mobile, c’est « ActiveSync » qui va gérer et maintenir la connexion avec le serveur, donc rien à installer, c’est super !
- Côté serveur, nous allons utiliser « Z-Push », une implémentation open source du protocole ActiveSync, écrite par la société Zafara (en PHP).
Avant de commencer, nous aurons besoin :
- D’un serveur Linux avec PHP 5 et Apache 2 installés (et accessible depuis Internet évidemment) – Pour le test, j’ai utilisé une Debian Lenny -,
- Un serveur IMAP (local ou distant),
- Dans l’optique de la configuration d’un VirtualHost Apache, une entrée DNS spécifique, c’est plus propre, mais ce n’est pas obligatoire,
- Les sources de Z-Push,
- Un terminal Windows Mobile (testé avec Windows Mobile 6).
Z-Push
Commençons par décompresser les sources à la racine de notre serveur web :
# tar xvzf z-push-1.2.2.tar.gz -C /var/www/
Le répertoire /var/www/z-push/state doit être accessible en écriture par l’utilisateur Apache :
# chmod 700 /var/www/z-push/state
# chown www-data:www-data /var/www/z-push/state
Editons ensuite le fichier de configuration (/var/www/z-push/config.php)
... // The data providers that we are using (see configuration below) $BACKEND_PROVIDER = "BackendIMAP"; ... // ************************ // BackendIMAP settings // ************************ // Defines the server to which we want to connect // recommended to use local servers only define('IMAP_SERVER', 'localhost'); // connecting to default port (143) define('IMAP_PORT', 143); // best cross-platform compatibility (see http://php.net/imap_open for options) define('IMAP_OPTIONS', '/notls/norsh/ssl/novalidate-cert'); // overwrite the "from" header if it isn't set when sending emails // options: 'username' - the username will be set (usefull if your login is equal to your emailaddress) // 'domain' - the value of the "domain" field is used // '@mydomain.com' - the username is used and the given string will be appended define('IMAP_DEFAULTFROM', 'username'); // copy outgoing mail to this folder. If not set z-push will try the default folders define('IMAP_SENTFOLDER', ''); ... |
Les paramètres ci-dessus sont adaptés au serveur imap local. Ils peuvent être ajustés à un autre serveur. Ceci devrait fonctionner avec n’importe quel serveur IMAP.
Par exemple, pour Gmail :
define('IMAP_SERVER', 'localhost'); define('IMAP_PORT', 993); define('IMAP_OPTIONS', '/notls/norsh/ssl/novalidate-cert'); define('IMAP_DEFAULTFROM', 'username') define('IMAP_SENTFOLDER', ''); |
Apache
Nous allons avoir besoin de satisfaire quelques dépendences avant d’attaquer la configuration d’Apache. Z-Push a en effet besoin de quelques paquets pour pouvoir fonctionner correctement :
# apt-get install pear php5-imap php5-mail php5-mail-mime php5-pear
# pear install –alldeps Mail
Nous avons ensuite deux alternatives :
- Créer un VirtualHost afin d’accéder au serveur directement par son nom : http://z-push.mondomaine.net, (plus propre à mon sens)
- Ou configurer un répertoire d’un site existant : (http://mon_serveur_ou_son_ip/z-push).
Virtualhost
Pour créer un VirtualHost, il nous faut ajouter un fichier dans /etc/apache2/sites-available. Arbitrairement, nous allons choisir z-push comme nom de fichier.
/etc/apache2/sites-available/z-push
ServerAlias zpush.mondomaine.net ServerAdmin webmaster@mondomaine.net DocumentRoot /var/www/z-push Alias /Microsoft-Server-ActiveSync /var/www/z-push/index.php Options -Indexes 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 ErrorLog /var/log/apache2/zpush-error.log LogLevel warn CustomLog /var/log/apache2/zpush-access.log combined ServerSignature Off |
La commande a2ensite (Apache2 Enable Site) permet de rendre le VirtualHost actif (équivaut à faire un lien symbolique dans /etc/apache2/sites-enabled)
$ sudo a2ensite z-push
$ /etc/init.d/apache2 reload
Config par défaut ou .htaccess
La deuxième technique consiste à ne configurer que le répertoire z-push, sans création d’un VirtualHost. Pour cela, nous ajouterons simplement les lignes suivantes dans le fichier de configuration du site par défaut (normalement /etc/apache2/sites-avaible/defaut) ou directement dans un fichier un .htaccess à la racine du site :
Alias /Microsoft-Server-ActiveSync /var/www/z-push/index.php Options -Indexes 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 |
Le mobile
La configuration du serveur étant terminée, nous pouvons tester sur un terminal. Nous allons configurer ActiveSync pour qu’il se connecte au serveur.
- Dans ActiveSync : Menu -> Configurer le serveur,
- Adresse du serveur : zpush.mondomaine.net (nom du VirtualHost ou Url complète d’accès à z-push),
- Décôcher SSL (n’est pas encore configuré sur le serveur Apache),
- Nom d’utilisateur : L’utilisateur Imap pour lequel nous voulons recevoir les mails,
- Mot de passe : Mot de passe de l’utilisateur sur le serveur Imap,
- Domaine : Domaine de messagerie,
- Ne synchroniser que les mails : nous avons utilisé z-push pour l’Imap uniquement.
- La synchro devrait ensuite fonctionner. L’activation du mode Push peut se faire dans le « Comm Manager » en activant « Microsoft Direct Push« .
La méthode est biensûr perfectible par l’ajout du support SSL. Je ne suis pas arrivé, pour l’instant, à une solution très satisfaisante concernant ce point. A moins qu’ils ne nous soit possible de faire certifier le certificat serveur par un autorithé reconnue, il faudra importer ce cetificat sur le mobile. La chose est plutôt fastidieuse, l’option d’import n’étant pas disponible dans Internet Explorer mobile. Il est nécessaire de passer par un export au format xml, que l’on insère ensuite dans un fichier cab pour l’installer sur le terminal. Bref, du bon gros bricolage !
Références : http://andrew.tj.id.au/activesync-for-gmail/