Envío de correo electrónico en TypeScript: bibliotecas y ejemplos de código

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: resumen de bibliotecas y herramientas



El envío de correos electrónicos es una de las tareas clave de las aplicaciones web. En TypeScript (y su runtime Node.js) existen varias soluciones maduras. En este artículo analizaremos las bibliotecas más populares, su configuración y ejemplos de uso con tipado completo.



1. Nodemailer — cliente SMTP universal



Nodemailer es la biblioteca más popular para enviar correos electrónicos en Node.js. Soporta SMTP, transportes integrados (Sendmail, SES) y es totalmente compatible con TypeScript gracias a sus tipos incorporados.



Instalación

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


Ejemplo 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, }, });

await transporter.sendMail({ from: `"MyApp" <${process.env.EMAIL_USER}>`, to: options.to, subject: options.subject, text: options.text, html: options.html || options.text, });}

// UsosendEmail({ to: 'user@example.com', subject: '¡Hola desde TypeScript!', text: 'Este es un correo de prueba.',}).catch(console.error);


Trabajo con archivos adjuntos

await transporter.sendMail({  to: 'user@example.com',  subject: 'Archivo adjunto',  text: 'Mire el documento adjunto.',  attachments: [    {      filename: 'report.pdf',      path: './files/report.pdf',    },  ],});


2. SendGrid — servicio de correo en la nube



SendGrid (ahora parte de Twilio) proporciona una potente API para enviar correos transaccionales y de marketing. Para TypeScript existe un paquete oficial con tipos listos para usar.



Instalación

npm install @sendgrid/mail


Ejemplo de envío con tipado

import sgMail from '@sendgrid/mail';

sgMail.setApiKey(process.env.SENDGRID_API_KEY!);

interface SendGridMessage { to: string; from: string; subject: string; text: string; html?: string;}

async function sendViaSendGrid(msg: SendGridMessage): Promise<void> { try { await sgMail.send({ to: msg.to, from: msg.from, subject: msg.subject, text: msg.text, html: msg.html, }); console.log('Correo enviado a través de SendGrid'); } catch (error) { console.error('Error de SendGrid:', error); }}

// UsosendViaSendGrid({ to: 'client@example.com', from: 'noreply@myapp.com', subject: 'Confirmación de registro', text: '¡Bienvenido!', html: '<h1>¡Bienvenido!</h1><p>Gracias por registrarte</p>',});


3. AWS SES — para sistemas de alta carga



AWS Simple Email Service (SES) es una solución empresarial para enviar grandes volúmenes de correos. Se utiliza a través del SDK @aws-sdk/client-ses.



Instalación

npm install @aws-sdk/client-ses


Ejemplo con TypeScript

import { SESClient, SendEmailCommand } from '@aws-sdk/client-ses';

const sesClient = new SESClient({ region: 'us-east-1', credentials: { accessKeyId: process.env.AWS_ACCESS_KEY!, secretAccessKey: process.env.AWS_SECRET_KEY!, },});

interface SESEmailParams { to: string[]; from: string; subject: string; bodyText: string; bodyHtml?: string;}

async function sendViaSES(params: SESEmailParams): Promise<void> { const command = new SendEmailCommand({ Destination: { ToAddresses: params.to, },

Recommendations