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/nodemailerEjemplo 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/mailEjemplo 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-sesEjemplo 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, }, También en la biblioteca
Generación de códigos QR en Java: biblioteca ZXing (guía detallada)
NHibernate para C# (.NET): guía completa con ejemplos
Kysely para TypeScript: guía completa con ejemplos prácticos
Trabajo con Markdown en Kotlin: bibliotecas, análisis y generación