Envoyer un mail avec NodeMailer
1. Introduction
Pour envoyer un mail avec JavaScript côté serveur, il suffit d'utiliser un langage comme Node.js
capable de communiquer avec un serveur SMTP. Une des solutions les plus simples et efficaces pour cela est Nodemailer
, un module léger et très populaire, sans dépendances externes.
Avant de commencer, assures-toi d'avoir :
- Node.js installé sur ton ordinateur (version 14+ recommandée)
- Un compte sur un service SMTP
Tu peux te servir de ce tutoriel pour le service SMTP.
2. Installation
Dans le terminal dans ton projet, lance la commande :
dotenv
va te permettre de gérer tes idenifiants de manière sécurisée.
Crées ensuite le fichier .env
avec les données suivantes :
SMTP_PORT=port
SMTP_USER=nom_utilisateur
SMTP_PASS=mot_de_passe
Tu dois adapter les infos selon le service SMTP que tu utilises. Si tu utilises ES Modules, tu peux aussi ajouter :"type": "module"
dans ton package.json
.
3. Configurer Nodemailer
Si tu utilises un projet existant, tu as déjà un fichier index.js
. Dans ce fichier, tu dois importer nodemailer
et l'utiliser comme suit :
const nodemailer = require("nodemailer");
require("dotenv").config();
async function main() {
// Création du transporteur SMTP
const transporter = nodemailer.createTransport({
host: process.env.SMTP_HOST,
port: process.env.SMTP_PORT,
auth: {
user: process.env.SMTP_USER,
pass: process.env.SMTP_PASS
}
});
// Définition du contenu de l'email
const mailOptions = {
from: '"Flowzy Support" <support@flowzy.app>',
to: "destinataire@example.com",
subject: "Hello depuis Node.js",
text: "Bonjour ! Ceci est un email envoyé avec Node.js et Nodemailer.",
html: "<p>Bonjour !<br/>Ceci est un <b>email</b> envoyé avec <i>Node.js</i> et <b>Nodemailer</b>.</p>"
};
// Envoi
try {
const info = await transporter.sendMail(mailOptions);
console.log("Email envoyé :", info.messageId);
} catch (error) {
console.error("Erreur lors de l'envoi :", error);
}
}
main();
4. Lancer l'envoi de mail
Dans ton terminal, lance la commande:
Tu devrais voir dans la console :
et tu recevras un email dans ta boîte de test.
5. Exemple dans un formulaire
Dans ton fichier index.js :
import nodemailer from 'nodemailer';
export default async function handler(req, res) {
if (req.method !== 'POST') return res.status(405).end();
const { name, email, message } = req.body;
const transporter = nodemailer.createTransport({
host: 'smtp.mailtrap.io',
port: 2525,
auth: {
user: 'VOTRE_UTILISATEUR',
pass: 'VOTRE_MOT_DE_PASSE'
}
});
try {
await transporter.sendMail({
from: email,
to: 'votre@adresse.com',
subject: `Message de ${name}`,
text: message,
});
res.status(200).json({ success: true });
} catch (error) {
console.error(error);
res.status(500).json({ success: false, message: error.message });
}
};
Ensuite, crée une page contact.js avec un formulaire :
import { useState } from 'react';
export default function ContactForm() {
const [form, setForm] = useState({ name: '', email: '', message: '' });
const [status, setStatus] = useState('');
const handleChange = (e) => {
setForm({ ...form, [e.target.name]: e.target.value });
};
const handleSubmit = async (e) => {
e.preventDefault();
setStatus('Envoi en cours...');
const res = await fetch('/api/contact', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(form)
});
const data = await res.json();
setStatus(data.success ? 'Message envoyé' : 'Erreur');
};
return (
<form onSubmit={handleSubmit} className="space-y-4">
<input
type="text"
name="name"
placeholder="Votre nom"
onChange={handleChange}
required
className="w-full p-2 rounded"
/>
<input
type="email"
name="email"
placeholder="Votre email"
onChange={handleChange}
required
className="w-full p-2 rounded"
/>
<textarea
name="message"
placeholder="Votre message"
rows="5"
onChange={handleChange}
required
className="w-full p-2 rounded"
/>
<button type="submit" className="bg-blue-600 text-white px-4 py-2 rounded">
Envoyer
</button>
<p>{status}</p>
</form>
);
}
6. Personnalisation et mise en production
- Personnalise le
to
,subject
ethtml
pour envoyer des confirmations de commandes, des formulaires de contact, etc. - Utilise un service SMTP en production Gmail, SendGrid, Mailgun, Mailtrap, etc.
7. Bonnes pratiques
- Utiliser .env te permettra de cacher tes identifiants
- Ne pas exposer tes infos SMTP côté client pour plus de sécurité
- Valider les champs du formulaire côté serveur pour plus de sécurité
- Gérer les erreurs d’envoi proprement te permettra d'identifier rapidement la source de ton erreur.
Conclusion
Avec seulement quelques lignes de code, tu peux envoyer des mails grâce à Node.js et Nodemailer !
← Retour au blog← Retourner à la série