Envoi d'email en TypeScript : du simple au complexe
L'envoi d'emails est l'une des fonctions clés de toute application web : inscription des utilisateurs, réinitialisation de mot de passe, notifications de commandes, newsletters. Dans l'écosystème TypeScript (et Node.js), il existe plusieurs bibliothèques puissantes qui permettent de configurer flexiblement l'envoi d'emails. Dans cet article, nous allons examiner trois outils populaires : nodemailer, @sendgrid/mail et mailgun.js, montrer des exemples de code en TypeScript, discuter de l'utilisation sécurisée de SMTP et de la création de modèles.
1. nodemailer — client SMTP universel
nodemailer est la bibliothèque la plus populaire pour l'envoi d'emails depuis Node.js. Elle prend en charge tous les serveurs SMTP (Gmail, Yandex, Mail.ru, votre propre serveur de messagerie), ainsi que des transporteurs intégrés pour les services populaires. Elle fonctionne « prête à l'emploi » avec TypeScript grâce à la présence de types.
Installation
npm install nodemailernpm install @types/nodemailer --save-devExemple de base d'envoi via Gmail SMTP
import nodemailer from 'nodemailer';
interface EmailOptions { to: string; subject: string; text: string; html?: string;}
async function sendEmail(options: EmailOptions): Promise<void> { const transporter = nodemailer.createTransport({ service: 'gmail', auth: { user: process.env.EMAIL_USER, pass: process.env.EMAIL_PASS, }, });
const mailOptions = { from: `"My App" <${process.env.EMAIL_USER}>`, to: options.to, subject: options.subject, text: options.text, html: options.html, };
const info = await transporter.sendMail(mailOptions); console.log('Email envoyé :', info.messageId);}
// UtilisationsendEmail({ to: 'user@example.com', subject: 'Bonjour depuis TypeScript !', text: 'Ceci est un email de test.', html: '<h1>Bonjour !</h1><p>Ceci est la version <strong>HTML</strong>.</p>',}).catch(console.error);Travail avec plusieurs destinataires et pièces jointes
async function sendBulkWithAttachments(): Promise<void> { const transporter = nodemailer.createTransport({ host: 'smtp.yandex.ru', port: 465, secure: true, auth: { user: process.env.YANDEX_USER, pass: process.env.YANDEX_PASS, }, });
await transporter.sendMail({ from: '"Équipe" <no-reply@mydomain.ru>', to: ['user1@example.com', 'user2@example.com'], subject: 'Rapport mensuel', text: 'Veuillez trouver en pièce jointe le fichier de rapport.', attachments: [ { filename: 'report.pdf', path: './docs/report.pdf', }, ], });}2. SendGrid — service cloud pour grands volumes
SendGrid (partie de Twilio) est une plateforme professionnelle pour les envois d'emails. Elle fournit une API, un SDK pour Node.js/TypeScript, des analyses de livraison et une protection anti-spam. Recommandée pour les projets à forte charge (des milliers d'emails par jour).
Installation et configuration
npm install @sendgrid/mailimport sgMail from '@sendgrid/mail';
sgMail.setApiKey(process.env.SENDGRID_API_KEY!);
interface SendGridOptions { to: string | string[]; subject: string; html: string; from?: string;}
async function sendViaSendGrid(options: SendGridOptions): Promise<void> { const msg = { to: options.to, from: options.from || 'noreply@mydomain.com', subject: options.subject, html: options.html, };
try { await sgMail.send(msg); console.log('Email envoyé via SendGrid'); } catch (error) { console.error('Erreur SendGrid :', error); throw error; }}3. Mailgun — alternative pour les développeurs
Mailgun est un autre service populaire avec une API REST et une compatibilité TypeScript.