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): nodemailer, sendgrid, mailgun



El envío de correos electrónicos es una de las funciones clave de las aplicaciones web modernas: registro de usuarios, restablecimiento de contraseñas, notificaciones y campañas de marketing. En el ecosistema de Node.js, existen varias soluciones probadas que permiten integrar la funcionalidad de correo en cuestión de minutos. En este artículo, analizaremos en detalle tres herramientas populares: nodemailer, sendgrid y mailgun. Aprenderá a configurar SMTP, enviar correos con adjuntos y plantillas HTML, así como qué métricas monitorear.



1. Nodemailer — Cliente SMTP universal



Nodemailer es la biblioteca más popular para enviar correos electrónicos en Node.js. Soporta SMTP, SES, Sendmail y múltiples transportes. Principales ventajas:



  • Configuración sencilla a través de una cuenta SMTP (Gmail, Yandex, Mail.ru).
  • Soporte para adjuntos, imágenes inline y plantillas HTML.
  • Trabajo con colas y grupos de conexiones.
  • Envío asíncrono mediante async/await.


Instalación y envío básico

npm install nodemailer


const nodemailer = require('nodemailer');

const transporter = nodemailer.createTransport({ host: 'smtp.gmail.com', port: 587, secure: false, // true para el puerto 465 auth: { user: 'tu-correo@gmail.com', pass: 'tu-contraseña' // o contraseña de aplicación }});

const mailOptions = { from: '"Remitente" <tu-correo@gmail.com>', to: 'destinatario@example.com', subject: '¡Hola desde Node.js!', text: 'Este es un correo de prueba.', html: '<h1>¡Hola!</h1><p>Esta es la versión HTML.</p>'};

const sendMail = async () => { const info = await transporter.sendMail(mailOptions); console.log('Correo enviado:', info.messageId);};

sendMail().catch(console.error);


Envío con adjuntos

const mailOptions = {  // ...campos principales  attachments: [    {      filename: 'documento.pdf',      path: '/ruta/al/documento.pdf'    },    {      filename: 'imagen.png',      content: fs.createReadStream('/ruta/a/la/imagen.png')    }  ]};


Importante: para Gmail, use una contraseña de aplicación o OAuth2.



2. SendGrid — Servicio en la nube para correos transaccionales



SendGrid (parte de Twilio) proporciona una potente API para enviar correos electrónicos con alta capacidad de entrega. Es adecuado tanto para startups como para grandes proyectos. Principales funcionalidades:



  • API con claves de acceso (sin SMTP).
  • Plantillas dinámicas (Handlebars).
  • Analítica: aperturas, clics, bajas.
  • Plan gratuito de hasta 100 correos/día.


Instalación y envío

npm install @sendgrid/mail


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

const msg = { to: 'destinatario@example.com', from: 'remitente@example.com', subject: 'Correo transaccional', text: 'Texto del correo', html: '<strong>Contenido HTML</strong>', attachments: [ { content: 'contenidocodificadoenbase64', filename: 'factura.pdf', type: 'application/pdf', disposition: 'attachment' } ]};

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


Uso de plantillas dinámicas

const msg = {  to: 'usuario@example.com',  from: 'noreply@misitio.com',  templateId: 'd-xxxxxxxxxxxxxxxx',  dynamicTemplateData: {    username: 'Iván',    orderLink: 'https://misitio.com/pedido/123'  }};


3. Mailgun — Para alta

Recommendations