Configuration d’un serveur SMTP de test

Tester l'envoi de mail peut parfois se révéler pénible et potentiellement dangereux. Une solution consiste à modifier systématiquement l'adresse des destinataires, malheureusement un oubli est vite arrivé. Une autre solution est l'utilisation en test et en pré-production d'une librairie qui n'envoie pas les mails mais il devient alors impossible de vérifier que les mails envoyés son corrects.

Pour sécuriser ces envois, il est possible de configurer un serveur SMTP pour qu'il redirige tous les e-mails vers une boîte locale. Cela permettra de configurer les applications de test ou de pré-production de manière très simple : En changeant simplement l'adresse du serveur SMTP utilisé aucun mail de test ne partira chez un client. Ce système permet aussi d'accéder aux e-mails comme si on en était le destinataire.

Pour cela j'aurai besoin d'installer un serveur postfix et un serveur courier-imap. L'installation se fera sur une machine ubuntu mais la configuration de postfix est évidemment valable sur n'importe quelle distribution linux.

Installation du serveur postfix

pour installer le serveur postfix j'utilise la commande suivante

sudo aptitude install postfix

ou

sudo apt-get install postfix

selon vos petites habitudes...

Le système propose différentes options de configuration, je choisis "Pas de configuration".

Je crée le fichier [/etc/postfix/main.cf] avec seulement trois petites lignes.

 # See /usr/share/postfix/main.cf.dist for a commented, more complete version default_transport = local luser_relay= dev home_mailbox = Maildir/ 

La première ligne indique que le serveur livre par défaut les mails en local. La deuxième ligne précise que les mails seront déposés sur le compte de l'utilisateur "dev". Il s'agit de l'utilisateur linux. La troisième ligne définit le répertoire dans lequel Postfix stockera les mails.

Test du serveur postfix

Pour tester notre nouveau serveur, le plus simple est d'utiliser la commande "mail". On évite ainsi de devoir configurer exprès un logiciel de mail. Par défaut la commande mail utilise "localhost" comme serveur smtp.

Si la commande mail n'est pas installée :

sudo aptitude install mailutils

puis on envoie un mail avec la commande suivante :

echo "Message de test" | mail test@test.com -s "Test `date`"

On vérifie dans le répertoire [/home/dev/Maildir/new/] la présence d'un fichier. Afficher ce fichier devrait donner à peu près cela :

more Maildir/new/1318834019.V805I1ef58M800270.net26p

 Return-Path: <utilisateur[[@net26p.localdomain]]> X-Original-To: test@test.com Delivered-To: test@test.com Received: by net26p.localdomain (Postfix, from userid 1000) 	id C25C7EE2D; Mon, 17 Oct 2011 08:46:59 +0200 (CEST) **Subject: Test lundi 17 octobre 2011, 08:46:59 (UTC+0200)** To: <test@test.com> X-Mailer: mail (GNU Mailutils 2.1) Message-Id: <20111017064659.C25C7EE2D@net26p.localdomain> Date: Mon, 17 Oct 2011 08:46:59 +0200 (CEST) From: Utilisateur[[@net26p.localdomain]] (Nom Utilisateur) **Message de test** 

Installation du serveur courier-imap

Cette partie est facultative mais vous permettra d'autoriser l'accès aux mails de tests à toutes les personnes que vous souhaitez.

Là encore rien de bien compliqué :

sudo aptitude install courier-imap

La configuration par défaut permet de l'utiliser

Test du serveur courier-imap

Dans mon logiciel de mail préféré, je configure un serveur IMAP avec l'adresse IP de mon nouveau serveur, les identifiants de l'utilisateur "dev" et je peux lire les messages. L'adresse de destination est bien la véritable adresse donc cela me permet de vérifier à qui le mail aurait du être envoyé.

JAX-RS web service REST avec Spring (implémentation RestEasy)

L'objet de ce billet: Illustrer avec un exemple assez complet la mise en pratique du web service REST (JAX-RS) s'appuyant sur l'implémentation RestEasy de JBoss avec Spring 2.5.
L'exemple repose sur les briques (api) suivantes. Notez bien la version lorsqu'elle est mentionnée.

  • RestEasy: L'implémentation Jboss de jax-rs (JSR 311),
  • Spring 2.5 et les annotations,
  • Hibernate pour la partie persistence
  • L'api Dozer v4.0 pour les DTO (Data Transfert Objetc) ou VO((Value Object).
  • Junit 4.4,
  • HttpUnit,
  • XMLUnit.

Nota:La version Dozer 4.0 a renommé complètement ses packages. Certains tutos sur le web sont donc caduques.
C'est à la fin de l'étape 5 que nous détaillons l'emploi de l'api Dozer.

Quelques repères:

REST (Representational State Transfer) développé par Roy Fielding qui est l’un des fondateurs du protocol HTTP.
JSR 311 est la spec JAX-RS: Java API for RESTful Web Service. Finalisée en mars 2008.

Les CINQ principes de REST

  • P1: Tout est ressource, un identifiant unique à chaque ressource (http://localhost:8888/clients/2 pointe sur le client ayant id=2),
  • P2: Utiliser les méthodes HTTP (HEAD/GET/POST/PUT/DELETE). Et les erreurs standards HTTP,
  • P3: Les échanges avec plusieurs représentations ( xml,(x)html, json,..),
  • P4: Échanges sans état (stateless),
  • P5: Lier les ressources entre elles.

PRÉ-REQUIS: Java5.