Envío de correo electrónico en JavaScript (Node.js): Nodemailer, SendGrid, Mailgun

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 JavaScript (Node.js): Guía completa



En el desarrollo web moderno, la capacidad de enviar correos electrónicos de forma programática es una función críticamente importante para cualquier aplicación seria. Ya sea para confirmación de registro, restablecimiento de contraseña, notificaciones o boletines de marketing, Node.js ofrece varias soluciones potentes para integrar funciones de correo. En este artículo, analizaremos en detalle los tres enfoques más populares: la biblioteca integrada nodemailer, el servicio en la nube SendGrid y la flexible API Mailgun.



¿Por qué se necesita una biblioteca separada para enviar correos electrónicos?

Node.js no tiene herramientas integradas para trabajar con el protocolo SMTP o las API REST de los servicios de correo. Por lo tanto, los desarrolladores utilizan bibliotecas especializadas que se encargan de:

  • Formar mensajes MIME correctos (incluyendo HTML, archivos adjuntos, imágenes en línea);
  • Gestionar colas y reintentos en caso de errores de red;
  • Almacenar y transmitir de forma segura las credenciales;
  • Soportar proveedores de correo populares (Gmail, Yandex, Mail.ru, servidores corporativos).


1. Nodemailer — Cliente SMTP universal

Nodemailer es el estándar de facto para el envío de correos electrónicos en Node.js. Soporta tanto SMTP clásico como integración con OAuth2. La biblioteca funciona sin dependencias adicionales y permite enviar correos a través de cualquier servidor SMTP.



Instalación

npm install nodemailer


Ejemplo básico de envío a través de SMTP de Gmail

const nodemailer = require('nodemailer');

const transporter = nodemailer.createTransport({ host: 'smtp.gmail.com', port: 587, secure: false, // true para 465, false para los demás auth: { user: 'tu-correo@gmail.com', pass: 'tu-contraseña-de-aplicacion' // ¡Usa una contraseña de aplicación, no la principal! }});

const mailOptions = { from: '"Nombre del Remitente" <tu-correo@gmail.com>', to: 'destinatario@example.com', subject: 'Hola desde Node.js', text: 'Este es un correo de texto simple.', html: '<b>Este es texto en negrita en HTML</b>'};

transporter.sendMail(mailOptions, (error, info) => { if (error) { return console.log('Error:', error); } console.log('Correo enviado: %s', info.messageId);});


Trabajo con archivos adjuntos

mailOptions.attachments = [    {   // archivo en disco        filename: 'documento.pdf',        path: '/ruta/al/documento.pdf'    },    {   // contenido como cadena        filename: 'notas.txt',        content: 'Archivo de texto creado sobre la marcha'    }];


2. SendGrid — Servicio en la nube para correos transaccionales

SendGrid (ahora parte de Twilio) proporciona una potente API REST y garantiza una alta capacidad de entrega. La biblioteca @sendgrid/mail simplifica la integración. Es adecuado para proyectos donde es importante el análisis de aperturas, clics y cancelaciones de suscripción.



Instalación

npm install @sendgrid/mail


Ejemplo de envío

const sgMail = require('@sendgrid/mail');sgMail.setApiKey(process.env.SENDGRID_API_KEY);

const msg = { to: 'destinatario@example.com', from: 'remitente@tudominio.com', // El dominio debe estar verificado en SendGrid subject: 'Notificación del servicio', text: 'Versión de texto del correo', html: '<h1>¡Hola!</h1><p>Este correo fue enviado a través de SendGrid.</p>',};

sgMail.send(msg) .then(() => console.log('Correo enviado exitosamente')) .catch((error) => console.error(error.toString()));


Envío con plantillas dinámicas

const msg = {    to: 'usuario@example.com',    from: 'test@example.com',    templateId: 'd-xxxxxxxxxxxxxxxxxxxx', // ID de la plantilla de SendGrid    dynamicTemplateData: {                    

Recommendations