Wiser : tester l’envoi d’un email
Wiser est un petit serveur SMPT facilement intégrable dans une classe de test unitaire (Junit, TestNg, etc.). Il réceptionne les messages et les sauvegardes dans un tableau au lieu de les envoyer sur le réseau. Ces messages sont ensuite disponibles pour vérification.
Avec ce serveur, il est possible de vérifier tous les types de mails même ceux qui contiennent des pièces jointes. Il est développé dans le projet subethasmtp.
Dans un projet maven il est nécessaire d’ajouter les dépendances suivantes :
<dependency> <groupId>org.subethamail</groupId> <artifactId>subethasmtp-wiser</artifactId> <version>1.2</version> <scope>test</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.8.2</version> <scope>test</scope> </dependency>
Il faut, ensuite, écrire une méthode qui va envoyer un email et la tester dans une classe JUnit. Je vous propose d’utiliser JavaMail. Remarque : vous pouvez aussi envoyer un email à partir d’un logiciel comme thunderbird s’il est configuré avec Wiser comme serveur SMTP.
/** * Méthode qui envoie un email. */ public void sendEmail(String serveur, int port) throws AddressException, MessagingException { Properties prop = System.getProperties(); prop.put("mail.smtp.host", serveur); prop.put("mail.smtp.port", String.valueOf(port)); Session session = Session.getDefaultInstance(prop,null); InternetAddress[] internetAddresses = new InternetAddress[] {new InternetAddress("toi@xxx.com")}; Message message = new MimeMessage(session); message.setFrom(new InternetAddress("moi@xxx.com")); message.setRecipients(Message.RecipientType.TO, internetAddresses); message.setSubject("Test"); message.setText("test mail"); Transport.send(message); } /** * Démarrage de Wiser avant l'éxécution du test. */ @Before public void setUp() { wiser = new Wiser(); wiser.setPort(2500); // port par défaut : 25 wiser.start(); } @After public void tearDown() { wiser.stop(); } @Test public void testSendEmail() { try { sendEmail("localhost", 2500); // Appel de la méthode qui envoie l'email. assertEquals(1, wiser.getMessages().size()); for (WiserMessage message : wiser.getMessages()) { String envelopeSender = message.getEnvelopeSender(); String envelopeReceiver = message.getEnvelopeReceiver(); MimeMessage mess = message.getMimeMessage(); // Il ne reste plus qu'a vérifier le contenu de l'email. } } catch (Exception e) { fail(); } }
Vous pouvez retrouver mon projet exemple ici.
Dans la distribution de subethasmtp, vous retrouverez des exemples pour tester des emails plus compliqués avec notament des pièces jointes.