Il existe de nombreuses façons d’envoyer un email avec Node.js. Puisque Node.js ne gère pas le protocole SMTP de manière native, il est nécessaire d’utiliser des outils dédiés au transport d’email. Nous verrons dans ce billet les acteurs principaux de ses 2 méthodes, la librairie Nodemailer et le SaaS Sendgrid.
Envoyer un mail avec nodemailer
Nodemailer est une librairie pour Node.js qui facilite l’envoie d’email, probablement la solution la plus simple (si l’on a pas besoin de configuration avancée) et également une des plus populaire pour envoyer un email avec node.
On commence par créer un projet et y installer nodemailer :
mkdir email-with-nodejs-nodemailer
cd email-with-nodejs-nodemailer
npm init -y
npm install nodemailer
La fonction create Transport()
de Nodemailer permet de définir la méthode que l’on souhaite utiliser pour le transport de nos emails, elle prend les données de connexion et les identifiants comme argument. Dans ce cas, puisqu’ on va utiliser le SMTP, on doit définir un serveur SMTP host, un port et un mot de passe pour accéder à un serveur SMTP.
Il faut donc utiliser un serveur SMTP, ici nous choisirons de passer par celui de gmail.
Créer un fichier email.js
:
// email.js
const nodemailer = require('nodemailer');
let transporter = nodemailer.createTransport({
host: 'smtp.gmail.com',
port: 587, // 587 -> TLS & 465 -> SSL
auth: {
user: 'myemail@gmail.com', // email de votre votre compte google
pass: 'mypassword' // password de votre compte google
}
});
Il est possible que Gmail demande un mot de passe d’application, pour en créer un c’est par ici.
Maintenant on va créer un objet qui contient les informations de l’email :
// email.js
/* ... */
let mail = {
from: 'senderemail@gmail.com',
to: 'recipientemail@gmail.com',
subject: 'My first email !',
text: 'This email was sent with Nodejs and nodemailer using gmail SMTP server'
// on peut remplacer l'attribut `text`par `html`si on veut que le cors de notre email supporte le HTML
// html: '<h1>This email use html</h1>'
};
à noter que l’on peut renseigner ce que l’on veut comme adresse dans la champ from
Enfin on va passer cet objet à la méthode sendEmail()
du transporter que l’on vient de créer, qui va se charger de l’envoyer en passant par le serveur SMTP de Gmail :
// email.js
/* ... */
transporter.sendMail(mail, (error, info) => {
if (error) {
console.log(error);
} else {
console.log('Email: ' + info.response);
}
});
Il ne reste plus qu’à tester, pour ça il suffit de lancer la commande :
node emails.js
=> Email sent: 250 2.0.0 OK 1665667705 bh15-20020a05600c3d0f00b003b31c560a0csm4662204wmb.12 - gsmtp
Envoyer un email avec Sendgrid
L’utilisation d’un package comme nodemailer, pouvant utiliser plusieurs types de transport, comme SMTP ou Sendmail n’est pas toujours la meilleure. En effet selon le transport que vous utilisez, par exemple ici Gmail, votre email peut voir augmenter sa probabilité d’atterrir dans les spams, ce qu’on veut éviter à tout prix !
Pour éviter ce soucis, il est possible d’utiliser un SaaS dédié à l’envoi d’email. Ici on utilise Sendgrid, un des leaders du domaine, qui propose un plan gratuit limité à 100 mails par mois, idéal pour un test rapide.
On commence par créer un projet :
mkdir email-with-nodejs-sendgrid
cd email-with-nodejs-sendgrid
npm init -y # the -y flag set default init values for us
npm i --save @sendgrid/mail
Créer un compte sur Sendgrid
Rendez-vous sur https://signup.sendgrid.com/ pour créer votre compte, puis confirmez votre email. On peut maintenant cliquer sur le bouton bleu « Create a single sender » :

Remplissez ensuite les détails du Sender, attention à l’adresse email que vous mettez dans le from
, l’utilisation d’une adresse type Gmail augmentera drastiquement vos chances d’atterrir dans les spams ! Sendgrid à écrit un article à ce sujet si vous voulez en savoir plus.
Une fois le Sender créer, il faut confirmer l’adresse email renseignée dans le from
, puis rendez-vous dans l’onglet “Email API” > “Intégration guide”. Sendgrid propose un choix « Web API » ou « SMTP relay », cliquez sur “choose” en dessous de la section « Web API ».

Choisissez node.js comme techno.

Il faut générer la clé API, vous pouvez renseigner le nom que vous voulez pour générer votre clé. Copiez-la, vous en aurez besoin pour la suite.

Cochez la case « I’ve integrated the code above » et cliquer sur “Next: Verify integration”
Coder l’envoi de l’email
Pour ajouter votre clé API à vos variable d’environnement, placez-vous à la racine du projet, puis entrez cette commande dans votre terminal :
echo "export SENDGRID_API_KEY='YOUR_API_KEY'" > sendgrid.env && echo "sendgrid.env" >> .gitignore && source ./sendgrid.env
N’oubliez pas de remplacer YOUR_API_KEY par la clé API que vous venez de générer 😉.
Créez un fichier email.js et y ajouter ses deux lignes pour utiliser Sendgrid et setup votre clé api :
// email.js
const sgMail = require('@sendgrid/mail')
sgMail.setApiKey(process.env.SENDGRID_API_KEY)
En dessous, ajoutez ce code pour créer l’email :
// email.js
const msg = {
to: 'xavier.grenouillet@gmail.com', // adresse à laquelle envoyer votre mail
from: 'xavier.grenouillet@leikir.io', // mettre l'adresse que vous avez renseigné en tant que sender sur sendgrid
subject: 'Sending with SendGrid is Fun',
text: 'and easy to do anywhere, even with Node.js',
html: '<strong>and easy to do anywhere, even with Node.js</strong>',
}
Attention, il faut absolument que l’adresse renseignée dans le champ from
corresponde à l’adresse d’un sender que vous avez créé sur Sendgrid.
Il ne reste plus qu’à ajouter l’envoi du mail grâce à la fonction send()
:
// email.js
sgMail.send(msg)
.then(() => {
console.log('Email sent !')
})
.catch((error) => {
console.error(error)
})
Reste maintenant à vérifier que notre code fonctionne en rentrant dans votre terminal :
node emails.js
=> Email sent !
Si jamais vous voyez apparaître cette erreur :

Pas de panique, il suffit de régénérer une nouvelle clé API et le tour est joué !
Utiliser Pacomail pour tester ses emails
Ça y est vous connaissez les deux méthodes principales pour envoyer un email avec Node.js, félicitations ! Si vous voulez maintenant faire une application qui envoie des emails, je vous encourage à utiliser Pacomail afin de vous assurez de ne pas envoyer de vrais emails lors de vos tests. La planète vous remerciera et nous aussi !
Sources :
https://nodemailer.com/about/
https://nodejs.org/en/docs/
https://docs.sendgrid.com/for-developers