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) : Guide complet



Dans le développement web moderne, la possibilité d'envoyer des emails par programmation est une fonctionnalité cruciale pour toute application sérieuse. Qu'il s'agisse de confirmation d'inscription, de réinitialisation de mot de passe, de notifications ou de campagnes marketing, Node.js propose plusieurs solutions puissantes pour intégrer des fonctions de messagerie. Dans cet article, nous allons détailler trois approches les plus populaires : la bibliothèque intégrée nodemailer, le service cloud SendGrid et l'API flexible Mailgun.



Pourquoi une bibliothèque dédiée pour l'envoi d'email ?

Node.js ne dispose pas de moyens intégrés pour fonctionner avec le protocole SMTP ou les API REST des services de messagerie. C'est pourquoi les développeurs utilisent des bibliothèques spécialisées qui prennent en charge :

  • La création de messages MIME corrects (incluant HTML, pièces jointes, images inline) ;
  • La gestion des files d'attente et des tentatives en cas d'erreurs réseau ;
  • Le stockage et la transmission sécurisés des identifiants ;
  • La prise en charge des fournisseurs de messagerie populaires (Gmail, Yandex, Mail.ru, serveurs d'entreprise).


1. Nodemailer — Client SMTP universel

Nodemailer est la norme de facto pour l'envoi d'email en Node.js. Il prend en charge à la fois le SMTP classique et l'intégration avec OAuth2. La bibliothèque fonctionne sans dépendances supplémentaires et permet d'envoyer des emails via n'importe quel serveur SMTP.



Installation

npm install nodemailer


Exemple de base d'envoi via SMTP Gmail

const nodemailer = require('nodemailer');

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

const mailOptions = { from: '"Sender Name" <your-email@gmail.com>', to: 'recipient@example.com', subject: 'Bonjour depuis Node.js', text: 'Ceci est un simple email texte.', html: '<b>Ceci est du texte en gras en HTML</b>'};

transporter.sendMail(mailOptions, (error, info) => { if (error) { return console.log('Erreur :', error); } console.log('Email envoyé : %s', info.messageId);});


Gestion des pièces jointes

mailOptions.attachments = [    {   // fichier sur le disque        filename: 'document.pdf',        path: '/path/to/document.pdf'    },    {   // contenu sous forme de chaîne        filename: 'notes.txt',        content: 'Fichier texte créé à la volée'    }];


2. SendGrid — Service cloud pour les emails transactionnels

SendGrid (maintenant partie de Twilio) fournit une API REST puissante et garantit une haute délivrabilité. La bibliothèque @sendgrid/mail simplifie l'intégration. Elle convient aux projets où l'analyse des ouvertures, des clics et des désabonnements est importante.



Installation

npm install @sendgrid/mail


Exemple d'envoi

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

const msg = { to: 'recipient@example.com', from: 'sender@yourdomain.com', // Le domaine doit être vérifié dans SendGrid subject: 'Notification du service', text: 'Version texte de l\\'email', html: '<h1>Bonjour !</h1><p>Cet email a été envoyé via SendGrid.</p>',};

sgMail.send(msg) .then(() => console.log('Email envoyé avec succès')) .catch((error) => console.error(error.toString()));


Envoi avec des modèles dynamiques

const msg = {    to: 'user@example.com',    from: 'test@example.com',    templateId: 'd-xxxxxxxxxxxxxxxxxxxx', // ID du modèle depuis SendGrid    dynamicTemplateData: {                    

Recommendations