Envío de correo electrónico en TypeScript: guía completa
TypeScript es un superconjunto de JavaScript con tipado estricto, utilizado activamente en aplicaciones web modernas. El envío de correos electrónicos es una de las tareas clave para el backend, las notificaciones y el marketing. En este artículo, analizaremos en detalle varias bibliotecas para el envío de correos electrónicos en TypeScript, incluyendo configuración, envío de correos simples y HTML, así como el trabajo con archivos adjuntos.
¿Por qué TypeScript para el envío de correos electrónicos?
TypeScript añade tipado, lo que reduce la cantidad de errores en la etapa de desarrollo. Al enviar correos electrónicos, esto es especialmente importante: los tipos correctos para el host SMTP, puerto, credenciales y opciones del correo ayudan a evitar errores en tiempo de ejecución. Además, TypeScript admite las construcciones modernas async/await, lo que hace que el código sea más limpio y comprensible.
Bibliotecas principales para el envío de correos electrónicos en TypeScript
- nodemailer — la biblioteca más popular para Node.js, totalmente compatible con TypeScript. Soporta SMTP, Sendmail, archivos adjuntos, plantillas HTML.
- @sendgrid/mail — el cliente oficial de SendGrid para Node.js con tipos TypeScript. Utiliza la API de SendGrid, no requiere SMTP.
- aws-sdk (SES) — Amazon Simple Email Service. Una potente solución para envíos masivos, integración con AWS.
- emailjs — una biblioteca ligera con soporte para TypeScript, pero menos popular.
Instalación y configuración de nodemailer con TypeScript
Instale los paquetes a través de npm:
npm install nodemailernpm install @types/nodemailer --save-devEjemplo básico de envío de correo electrónico a través de SMTP (Gmail, Yandex, Mail.ru, etc.):
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({ host: 'smtp.gmail.com', port: 587, secure: false, // true para el puerto 465 auth: { user: 'your-email@gmail.com', pass: 'your-password-or-app-password', }, });
const mailOptions = { from: '"Su nombre" <your-email@gmail.com>', 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!', html: '<h1>Prueba</h1><p>Este es un correo HTML.</p>',});Importante: Para Gmail, active "Acceso a aplicaciones menos seguras" o use una contraseña de aplicación (App Password). Para producción, es mejor usar OAuth2.
Envío de correo electrónico a través de SendGrid en TypeScript
SendGrid proporciona una API lista para usar que no requiere SMTP. Instalación:
npm install @sendgrid/mailEjemplo de envío:
import sgMail from '@sendgrid/mail';
sgMail.setApiKey('YOUR_SENDGRID_API_KEY');
interface SendGridMessage { to: string; from: string; subject: string; html: string;}
async function sendWithSendGrid(message: SendGridMessage): Promise<void> { try { await sgMail.send(message); console.log('Correo enviado a través de SendGrid'); } catch (error) { console.error('Error al enviar:', error); }}
sendWithSendGrid({ to: 'user@example.com', from: 'sender@yourdomain.com', subject: 'Prueba SendGrid + TypeScript', html: '<p>Este mensaje fue enviado a través de la API de SendGrid.</p>',});Envío de correo electrónico con archivos adjuntos en TypeScript
nodemailer admite archivos adjuntos de cualquier tipo. Ejemplo con un archivo PDF:
import nodemailer from 'nodemailer';import path from 'path';
async function sendWithAttachment() También en la biblioteca
Pruebas en Kotlin: frameworks y herramientas para código de calidad
Trabajo con XML en Go (Golang): paquete encoding/xml y alternativas
Configuración de aplicaciones Swift: biblioteca SwiftyConfig
GraphQL en Node.js: Guía completa sobre la biblioteca graphql-http