Envío de correo electrónico en TypeScript: guía completa con nodemailer y SMTP

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Envío de correo electrónico en TypeScript: de lo simple a lo complejo



El envío de correos electrónicos es una de las funciones clave de cualquier aplicación web: registro de usuarios, restablecimiento de contraseñas, notificaciones de pedidos, boletines de noticias. En el ecosistema de TypeScript (y Node.js) existen varias librerías potentes que permiten configurar de forma flexible el envío de correos. En este artículo analizaremos tres herramientas populares: nodemailer, @sendgrid/mail y mailgun.js, mostraremos ejemplos de código en TypeScript, discutiremos el trabajo seguro con SMTP y la creación de plantillas.



1. nodemailer — cliente SMTP universal



nodemailer es la librería más popular para enviar correos desde Node.js. Soporta cualquier servidor SMTP (Gmail, Yandex, Mail.ru, servidor de correo propio), así como transportadores integrados para servicios populares. Funciona "de fábrica" con TypeScript gracias a la disponibilidad de tipos.



Instalación

npm install nodemailernpm install @types/nodemailer --save-dev


Ejemplo básico de envío a través de 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('Correo enviado:', info.messageId);}

// UsosendEmail({ to: 'user@example.com', subject: '¡Hola desde TypeScript!', text: 'Este es un correo de prueba.', html: '<h1>¡Hola!</h1><p>Esta es la versión <strong>HTML</strong>.</p>',}).catch(console.error);


Trabajo con múltiples destinatarios y archivos adjuntos

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: '"Equipo" <no-reply@mydomain.ru>', to: ['user1@example.com', 'user2@example.com'], subject: 'Informe mensual', text: 'Se adjunta el archivo con el informe.', attachments: [ { filename: 'report.pdf', path: './docs/report.pdf', }, ], });}


2. SendGrid — servicio en la nube para grandes volúmenes



SendGrid (parte de Twilio) es una plataforma profesional para envíos de correo electrónico. Proporciona API, SDK para Node.js/TypeScript, análisis de entrega y protección contra spam. Se recomienda para proyectos con alta carga (miles de correos al día).



Instalación y configuración

npm install @sendgrid/mail


import 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('Correo enviado a través de SendGrid'); } catch (error) { console.error('Error de SendGrid:', error); throw error; }}


3. Mailgun — alternativa para desarrolladores



Mailgun es otro servicio popular con API REST y compatibilidad con TypeScript

Recommendations