Testez vos mails envoyés via NodeJS avec Pacomail

Testez vos mails envoyés via NodeJS avec Pacomail

Dans ce billet, nous allons voir comment utiliser Pacomail pour tester vos emails. Aucun prérequis nécessaire à part avoir NodeJS d’installé et être inscrit sur Pacomail.

Créer une app NodeJS

Créer un dossier dans lequel on va initialiser notre application et y ajouter le package nodemailer, pour gérer l’envoi de nos mails. Il existe d’autres façons d’envoyer des mails avec nodeJS, si vous souhaitez en savoir plus, nous vous invitons à lire cet article sur comment envoyer un mail avec NodeJS. Nous allons également installer le package nodemailer-cram-md5, car nodemailer ne supporte pas nativement le CRAM-MD5.

(CRAM-MD5 signifie Challenge Response Authentication Mechanism Message Digest 5, il s’agit d’un protocole d’identification utilisé pour hasher et vérifier les mots de passe des utilisateurs)

mkdir tests-emails-with-nodejs-and-paco
cd tests-emails-with-nodejs-and-paco
npm init -y
npm install nodemailer nodemailer-cram-md5
touch email.js

Permettre à notre application d’envoyer des mails

Maintenant on peut commencer à mettre en place notre application. On va préparer nos dépendances ainsi qu’un mail simple à envoyer.

Dans notre fichier email.js créé préalablement :
// email.js
const nodemailer = require('nodemailer');
const nodemailerCramMd5 = require('nodemailer-cram-md5');

let mail = {
	from: leikir@pacomail.com',
	to: 'hello@pacomail.com',
	subject: 'My first email !',
	html: '<h1>Hey ! I’m a test email !</h1>'
};

On va également avoir besoin d’un transporter, c’est celui qui détermine de quelle manière on va transférer les mails, ici on va définir un serveur SMTP ainsi que la méthode d’authentification (CRAM-MD5). Pour obtenir la configuration de votre transporter, il vous suffit de vous rendre sur la liste de vos boîtes mail.

Depuis cette page il vous suffit de cliquer sur l’icône de clé pour accéder aux credentials d’une boîte de réception. Sélectionnez Nodemailer dans le menu déroulant, puis copiez le premier encadré de code contenant la configuration du transporter.

// emails.js
let transporter = nodemailer.createTransport({
	host: 'smtp.pacomail.io', // adresse du sever SMTP
	port: 2525, // Port utiliser pour se connecter au server
        auth: {
		 type: 'custom',
		 method: 'CRAM-MD5',
		 user: 'f2e5116a-fcc7-4a92-8cda-a4f11241ce67',
		 pass: 'Lw8u0nOoBXli1v4x7wrR'
	 },
	customAuth: {
		'CRAM-MD5': nodemailerCramMd5
	}
});

À partir de là, lorsque ce transporter va être utilisé pour envoyer un mail, celui-ci sera directement envoyé sur les serveurs de PACO plutôt qu’au destinataire.

Maintenant il ne reste plus qu’à envoyer un mail :

// emails.js
transporter.sendMail(mail, (error, info) => {
	if (error) {
		console.log('error :' + error);
	} else {
	 console.log('Request status: ' + info.response);
	}
});

Pour vérifier que tout c’est bien passer, plus qu’à lancer l’application, depuis le terminal :

node email.js
#=> Email: 250 OK

Accéder à son mail depuis PACO

Vous pouvez dès maintenant accéder au mail qui vient d’être envoyé dans votre boîte de réception Pacomail, cliquez sur le mail en question pour le visualiser.

Vous pouvez accéder au header ainsi qu’aux différentes versions du mail en cliquant sur « Entête SMTP », cliquez sur Mode debug en haut à droite pour accéder au mode debug.

Voici donc le mode debug qui se découpe en 3 parties:

  • À gauche, la liste d’erreurs vous indique les erreurs qui ont été détectées dans le code du mail. Vous pouvez utiliser les filtres en haut de la liste pour affiner l’affichage. Vous pouvez également afficher la liste des compatibilités avec les différents clients web en cliquant sur « Fonctions non supportées ».
  • Au centre, le code de votre email, que vous pouvez éditer directement. Les changement seront répercutés sur la liste d’erreurs et la prévisualisation. En bas de cette zone vous avez accès à un menu d’action, permettant d’afficher le diff des changements apportés, d’indenter automatiquement le code de l’email ou de passer en mode inspection / focus.
  • À droite, on retrouve la prévisualisation du mail. On retrouve en haut de celle-ci un menu permettant de changer les dimensions de la prévisualisation (desktop, tablette et mobile). Un menu d’action est également disponible en bas, permettant d’activer / désactiver les images, de montrer les tables de l’email ou encore de passer en mode sombre.

Sécuriser ses credentials et gérer plusieurs environnements

Pour l’instant vos credentials sont mis en clair dans l’application, ce qui est une très mauvaise idée. Nous allons donc utiliser des variables d’environnement pour les cacher. Tout d’abord, installez dotenv pour node et faites un fichier .env pour stocker nos variables :

npm install dotenv -save
touch .env

Il faudra également ajouter la ligne ci-dessous au début du fichier de votre application pour charger dotenv :

require('dotenv').config()

Puis on va ajouter nos credentials au fichier .env

SMTP_HOST=recette-smtp.pacomail.io
SMTP_PORT=2525
SMTP_USERNAME=f2e5116a-fcc7-4a92-8cda-a4f11241ce67
SMTP_PASSWORD=Lw8u0nOoBXli1v4x7wrR

Pour accéder à ces variables au sein de l’application, il faut passer par l’objet process.env qui contient toute les variables d’environnement de l’application, y compris celles que nous avons rajouté dans le fichier .env :

// email.js
/* ... */
let transporter = nodemailer.createTransport({
	host: process.env.SMTP_HOST,
	port: process.env.SMTP_PORT,
	auth: {
		 type: 'custom',
		 method: 'CRAM-MD5',
		 user: process.env.SMTP_USERNAME,
		 pass: process.env.SMTP_PASSWORD
	 },
	customAuth: {
		'CRAM-MD5': nodemailerCramMd5
	}
});
/* ... */

Une dernière chose pour sécuriser nos variables d’environnement : si vous utilisez Git,  ne pas oublier d’ajouter le fichier .env au fichier .gitignore pour que le contenu de celui-ci ne soit pas envoyé lors d’un push :

git init # initialiser git
echo ".env" >> .gitignore

Maintenant si vous souhaitez travailler sur plusieurs environnements en même temps avec Pacomail, vous n’avez plus qu’à créer une deuxième boîte mail, et à utiliser ses credentials sur votre deuxième environnement.
À très vite sur pacomail.io !

Sources :

https://nodemailer.com/about/
https://nodejs.org/en/docs/