Push Mail pour serveur Imap (local ou distant)

eb0996d725ea9ae3e95da132acafd9fcPour 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/

Vus : 1302
Publié par Jopa : 29