Envoi d'email en JavaScript (Node.js) : nodemailer, sendgrid, mailgun

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Envoi d'email en JavaScript (Node.js) : nodemailer, sendgrid, mailgun



L'envoi d'email est l'une des fonctions clés des applications web modernes : inscription des utilisateurs, réinitialisation des mots de passe, notifications et campagnes marketing. Dans l'écosystème Node.js, il existe plusieurs solutions éprouvées qui permettent d'intégrer la fonctionnalité de messagerie en quelques minutes. Dans cet article, nous allons détailler trois outils populaires : nodemailer, sendgrid et mailgun. Vous apprendrez à configurer SMTP, à envoyer des courriels avec pièces jointes et modèles HTML, ainsi que les métriques à suivre.



1. Nodemailer — client SMTP universel



Nodemailer est la bibliothèque la plus populaire pour l'envoi d'email en Node.js. Elle prend en charge SMTP, SES, Sendmail et de nombreux transports. Principaux avantages :



  • Configuration simple via un compte SMTP (Gmail, Yandex, Mail.ru).
  • Prise en charge des pièces jointes, images intégrées, modèles HTML.
  • Gestion des files d'attente et des pools de connexions.
  • Envoi asynchrone via async/await.


Installation et envoi de base

npm install nodemailer


const nodemailer = require('nodemailer');

const transporter = nodemailer.createTransport({ host: 'smtp.gmail.com', port: 587, secure: false, // true pour le port 465 auth: { user: 'your-email@gmail.com', pass: 'your-password' // ou mot de passe d'application }});

const mailOptions = { from: '"Expéditeur" <your-email@gmail.com>', to: 'recipient@example.com', subject: 'Bonjour depuis Node.js !', text: 'Ceci est un email de test.', html: '<h1>Bonjour !</h1><p>Ceci est la version HTML.</p>'};

const sendMail = async () => { const info = await transporter.sendMail(mailOptions); console.log('Email envoyé :', info.messageId);};

sendMail().catch(console.error);


Envoi avec pièces jointes

const mailOptions = {  // ...champs principaux  attachments: [    {      filename: 'document.pdf',      path: '/path/to/document.pdf'    },    {      filename: 'image.png',      content: fs.createReadStream('/path/to/image.png')    }  ]};


Important : pour Gmail, utilisez un mot de passe d'application ou OAuth2.



2. SendGrid — service cloud pour les courriels transactionnels



SendGrid (partie de Twilio) fournit une API puissante pour l'envoi d'email avec un taux de délivrabilité élevé. Convient aux startups et aux grands projets. Principales fonctionnalités :



  • API avec clés d'accès (sans SMTP).
  • Modèles dynamiques (Handlebars).
  • Analytique : ouvertures, clics, désabonnements.
  • Forfait gratuit jusqu'à 100 emails/jour.


Installation et envoi

npm install @sendgrid/mail


const sgMail = require('@sendgrid/mail');sgMail.setApiKey(process.env.SENDGRID_API_KEY);

const msg = { to: 'recipient@example.com', from: 'sender@example.com', subject: 'Email transactionnel', text: 'Texte de l\\'email', html: '<strong>Contenu HTML</strong>', attachments: [ { content: 'base64encodedcontent', filename: 'invoice.pdf', type: 'application/pdf', disposition: 'attachment' } ]};

sgMail.send(msg) .then(() => console.log('Email envoyé')) .catch(console.error);


Utilisation des modèles dynamiques

const msg = {  to: 'user@example.com',  from: 'noreply@mysite.com',  templateId: 'd-xxxxxxxxxxxxxxxx',  dynamicTemplateData: {    username: 'Ivan',    orderLink: 'https://mysite.com/order/123'  }};


3. Mailgun — pour les hauts

Recommendations