logo oujood
🔍

Guide pratique : Utiliser Nodemailer pour envoyer des emails avec Node.js


OUJOOD.COM

Qu'est-ce que Nodemailer ?

Nodemailer est un module Node.js open-source conçu pour simplifier l'envoi d'emails depuis une application serveur. Il prend en charge une variété de fonctionnalités, telles que l'envoi d'emails en texte brut, en HTML, avec des pièces jointes, et la configuration de serveurs SMTP personnalisés. C'est un outil essentiel pour les développeurs qui souhaitent intégrer une fonctionnalité d'emailing dans leurs applications.

Installation de Nodemailer

Pour commencer, vous devez installer Nodemailer via npm. Ouvrez votre terminal et exécutez la commande suivante :

📋 Copier le code

npm install nodemailer

Cette commande ajoutera Nodemailer comme dépendance dans votre projet Node.js.

Exemple de base : Envoi d'un email simple

Voici un exemple de code pour envoyer un email simple en utilisant Gmail comme service SMTP :

📋 Copier le code

const nodemailer = require('nodemailer');

// Configuration du transporteur SMTP
const transporter = nodemailer.createTransport({
  service: 'gmail',
  auth: {
    user: 'youremail@gmail.com', // Remplacez par votre adresse Gmail
    pass: 'yourpassword'         // Remplacez par votre mot de passe Gmail
  }
});

// Options de l'email
const mailOptions = {
  from: 'youremail@gmail.com',   // Expéditeur
  to: 'myfriend@yahoo.com',      // Destinataire
  subject: 'Test Email',         // Objet de l'email
  text: 'Cet email est envoyé depuis Node.js avec Nodemailer.' // Corps de l'email en texte brut
};

// Envoi de l'email
transporter.sendMail(mailOptions, function(error, info){
  if (error) {
    console.log('Erreur lors de l\'envoi :', error);
  } else {
    console.log('Email envoyé avec succès :', info.response);
  }
});

Explication : Ce script configure un transporteur SMTP en utilisant Gmail. Il prépare un email avec un expéditeur, un destinataire, un objet et un corps de message, puis l'envoie. Le statut de l'envoi est affiché dans la console.

Exemple avancé : Envoi d'un email avec pièce jointe

Nodemailer permet également d'envoyer des emails avec des pièces jointes. Voici un exemple :

📋 Copier le code

const nodemailer = require('nodemailer');
const path = require('path');
const fs = require('fs');

const transporter = nodemailer.createTransport({
  service: 'gmail',
  auth: {
    user: 'youremail@gmail.com',
 /*Utilisez votre mot de passe ou un mot de passe 
 d'application généré via votre compte Google*/
    pass: 'yourpassword'
  }
});


// Chemin absolu vers le fichier PDF dans le dossier "Documents"
const filePath = path.join('C:/Users/VotreNomUSER/Documents', 'document.pdf');

// Vérifiez que le fichier existe avant d'envoyer l'email
if (fs.existsSync(filePath)) {
  const mailOptions = {
    from: 'youremail@gmail.com', // L'adresse de l'expéditeur
    to: 'destinataire@hotmail.com', // L'adresse du destinataire
    subject: 'Test Email', // L'objet de l'email
// Contenu de l'email en texte brut	
    text: 'Cet email est envoyé depuis Node.js avec Nodemailer.', 
// la piéde jointe
    attachments: [
      {
        filename: 'document.pdf', // Nom du fichier
        path: filePath // Chemin vers le fichier
      }
    ]
  };

  // Vérification du transporteur SMTP
  transporter.verify((error, success) => {
    if (error) {
      console.error('Erreur de configuration du transporteur SMTP :', error);
    } else {
      console.log('Transporteur SMTP prêt pour l\'envoi d\'emails.');

      // Envoi de l'email
      transporter.sendMail(mailOptions, (error, info) => {
        if (error) {
          console.error('Erreur lors de l\'envoi :', error);
        } else {
          console.log('Email envoyé avec succès :', info.response);
        }
      });
    }
  });
} else {
  console.error('Fichier introuvable :', filePath);
}

Explication Simplifiée du Code : Nodemailer avec Pièce Jointe

1. Importation des modules nécessaires

const nodemailer = require('nodemailer');
const path = require('path');
const fs = require('fs');
    

nodemailer : Permet d'envoyer des emails via Node.js.
path : Gère les chemins de fichiers/dossiers.
fs : Manipule les fichiers sur le système.

2. Création d'un transporteur SMTP

const transporter = nodemailer.createTransport({
  service: 'gmail',
  auth: {
    user: 'youremail@gmail.com',
    pass: 'yourpassword'
  }
});
    

createTransport configure l'envoi d'emails via Gmail.
⚠️ Utilisez un mot de passe d'application pour des raisons de sécurité.

3. Chemin vers le fichier à envoyer

const filePath = path.join('C:/Users/VotreNomUSER/Documents', 'document.pdf');
    

Utilise path.join pour construire un chemin vers le fichier à joindre.

4. Vérification de l'existence du fichier

if (fs.existsSync(filePath)) {
    

fs.existsSync vérifie si le fichier existe avant l'envoi.

5. Définition des options de l'email

const mailOptions = {
  from: 'youremail@gmail.com',
  to: 'destinataire@hotmail.com',
  subject: 'Test Email',
  text: 'Cet email est envoyé depuis Node.js avec Nodemailer.',
  attachments: [
    {
      filename: 'document.pdf',
      path: filePath
    }
  ]
};
    

Définissez l'expéditeur, le destinataire, le sujet, le texte de l'email, et les fichiers joints.

6. Vérification du transporteur SMTP

transporter.verify((error, success) => {
  if (error) {
    console.error('Erreur de configuration du transporteur SMTP :', error);
  } else {
    console.log('Transporteur SMTP prêt pour l\'envoi d\'emails.');
  }
});
    

Vérifie que le transporteur SMTP est configuré correctement.

7. Envoi de l'email

transporter.sendMail(mailOptions, (error, info) => {
  if (error) {
    console.error('Erreur lors de l\'envoi :', error);
  } else {
    console.log('Email envoyé avec succès :', info.response);
  }
});
    

Envoie l'email avec les options définies. Affiche un message en cas de succès ou d'erreur.

8. Gestion des erreurs de fichier

} else {
  console.error('Fichier introuvable :', filePath);
}
    

Si le fichier à envoyer n'existe pas, un message d'erreur est affiché.

Résumé

Ce code utilise Nodemailer pour envoyer un email avec une pièce jointe. Il vérifie l'existence du fichier avant de l'envoyer et utilise une configuration Gmail pour transmettre l'email.

Configuration SMTP personnalisée

Si vous utilisez un service SMTP autre que Gmail, vous pouvez configurer Nodemailer comme suit :

📋 Copier le code

const transporter = nodemailer.createTransport({
  host: 'smtp.votreserveur.com', // Remplacez par l'hôte SMTP
  port: 587,                     // Port SMTP (souvent 587 pour TLS)
  secure: false,                 // true pour le port 465, false pour les autres
  auth: {
    user: 'votreemail@domaine.com',
    pass: 'votremotdepasse'
  }
});

Explication : Cette configuration permet d'utiliser un serveur SMTP personnalisé. Vous devez fournir l'hôte, le port, et les informations d'authentification.

Envoyer un e-mail HTML

Pour envoyer du texte formaté en HTML dans votre e-mail, utilisez la propriété "html" au lieu de la propriété "text" :

Voici un exemple de script pour envoyer un e-mail au format HTML :

📋 Copier le code


const nodemailer = require('nodemailer');

const transporter = nodemailer.createTransport({
    service: 'gmail',
    auth: {
        user: 'votreemail@gmail.com',
        pass: 'votremotdepasse'
    }
});

const mailOptions = {
    from: 'votreemail@gmail.com',
    to: 'destinataire@gmail.com',
    subject: 'Envoi d\'e-mail avec Node.js',
    html: '<h1>Bienvenue</h1><p>C\'était facile !</p>'
};

transporter.sendMail(mailOptions, (error, info) => {
    if (error) {
        console.error('Erreur :', error);
    } else {
        console.log('E-mail envoyé :', info.response);
    }
});

            

Explication du Code

1. Importation de Nodemailer


const nodemailer = require('nodemailer');

	

Ce code importe la bibliothèque nodemailer, qui facilite l'envoi d'emails par Node.js.

2. Création d'un Transporteur


const transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: 'votreemail@gmail.com',
pass: 'votremotdepasse'
}
});

	

Ici, on configure un transporteur Gmail. Remplacez 'votreemail@gmail.com' et 'votremotdepasse' par vos informations personnelles.

3. Définir les Options de l'Email


const mailOptions = {
from: 'votreemail@gmail.com',
to: 'destinataire@gmail.com',
subject: 'Envoi d\'e-mail avec Node.js',
html: '<h1>Bienvenue</h1><p>C\'était facile !</p>'
};

	

On définit ici le contenu et les destinataires de l'email. Le contenu HTML est entièrement personnalisable.

4. Envoi de l'Email


transporter.sendMail(mailOptions, (error, info) => {
if (error) {
console.error('Erreur :', error);
} else {
console.log('E-mail envoyé :', info.response);
}
});

	

Cette fonction envoie l'email en affichant les éventuelles erreurs ou un message de confirmation.

Remarque

Pour sécuriser vos informations de connexion, utilisez des variables d'environnement. Cela empêche l'exposition de vos données sensibles dans le code source.

Conclusion

Envoyer des e-mails HTML avec Node.js est simple et rapide grâce à Nodemailer. Vous pouvez personnaliser vos e-mails en ajoutant des images, des styles CSS et bien plus encore. Expérimentez pour adapter cette fonctionnalité à vos besoins spécifiques.

Fonctionnalités principales de Nodemailer

  • Support des emails HTML et en texte brut
  • Envoi d'emails avec pièces jointes
  • Compatibilité avec plusieurs services (Gmail, Outlook, Yahoo, etc.)
  • Configuration SMTP personnalisée
  • Support des templates pour personnaliser les emails

Conclusion

Nodemailer est un outil puissant et flexible pour envoyer des emails depuis une application Node.js. Que vous ayez besoin d'envoyer des emails simples, des emails avec pièces jointes, ou de configurer un serveur SMTP personnalisé, Nodemailer répond à tous vos besoins. En suivant les exemples ci-dessus, vous pouvez rapidement intégrer cette fonctionnalité dans vos projets.