
Nodemailer para enviar correos electrónicos en Javascript
Nodemailer es una biblioteca popular en el ecosistema de Node.js que permite a los desarrolladores enviar correos electrónicos de manera sencilla y eficiente. Es ideal para aplicaciones web que necesitan notificar a los usuarios, enviar facturas, confirmaciones de registro o cualquier otro tipo de comunicación por correo electrónico.
En este artículo, exploraremos cómo usar Nodemailer con ejemplos prácticos en español. Aprenderás desde la instalación hasta la configuración y envío de correos electrónicos.
Instalación de Nodemailer
Para comenzar, asegúrate de tener Node.js instalado en tu sistema. Luego, puedes instalar Nodemailer usando npm (Node Package Manager) con el siguiente comando:
npm install nodemailer
Configuración básica
Antes de enviar correos electrónicos, necesitas configurar un “transportador” que se encargará de establecer la conexión con el servidor de correo. Este transportador puede ser Gmail, Outlook, Yahoo u otros servicios SMTP.
Aquí tienes un ejemplo básico de configuración utilizando Gmail como servicio de correo desde una clase usando Typescript:
const nodemailer = require('nodemailer');
export class NodemailerService {
private transporter;
const initialize = () => {
let transporter = nodemailer.createTransport({
service: 'gmail', // Servicio de correo
auth: {
user: 'tucorreo@gmail.com',
pass: 'tucontraseña'
}
});
.....
}
Nota importante: Si usas Gmail, es posible que necesites habilitar la opción “Acceso de aplicaciones menos seguras” en tu cuenta de Google. Sin embargo, esto no es recomendable para entornos de producción. En su lugar, considera usar OAuth2 para autenticarte de forma segura.
Enviar un correo electrónico simple
Una vez configurado el transportador, puedes enviar un correo electrónico básico. Aquí tienes un ejemplo
....
const send = () => {
let mailOptions = {
from: 'tucorreo@gmail.com',
to: 'destinatario@example.com',
subject: 'Hola desde Encodebiz',
text: 'Este es un correo enviado desde Node.js usando Nodemailer.'
};
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
return new throw('Error al enviar el correo:', error);
}
console.log('Correo enviado:', info.response);
});
}
}
En este ejemplo:
from
especifica la dirección del remitente.to
indica la dirección del destinatario.subject
define el asunto del correo.text
contiene el contenido del mensaje en formato de texto plano.
Enviar correos con HTML
Nodemailer también permite enviar correos electrónicos con contenido HTML. Esto es útil si deseas personalizar el diseño del correo con estilos y elementos visuales.
....
const send = () => {
let mailOptions = {
from: 'tucorreo@gmail.com',
to: 'destinatario@example.com',
subject: 'Hola desde Encodebiz',
html: '<h1>Bienvenido</h1><p>Gracias por registrarte en nuestra plataforma.</p>'
};
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
return new throw('Error al enviar el correo:', error);
}
console.log('Correo enviado:', info.response);
});
}
}
Puedes crear plantillas en formato html y pasarles variables dinamicamente, luego generar desde una función el código html ya con los valores sustituidos en la plantilla:
---
private async generateHtmlTemplate(
replacements?: Record<string, string>
): Promise<string> {
const templates: any = {
cita,
newsletter,
contact,
};
let template: string ='Hola {{user}}, <h1>Bienvenido</h1><p>Gracias por registrarte en nuestra plataforma.</p>'
if (replacements) {
Object.keys(replacements).forEach((key) => {
const regex = new RegExp(`{{${key}}}`, "g");
template = template.replace(regex, replacements[key]);
});
}
return template;
}
const send = () => {
let mailOptions = {
from: 'tucorreo@gmail.com',
to: 'destinatario@example.com',
subject: 'Hola desde Encodebiz',
html: this.generateHtmlTemplate({user:'Jhon Doe'})
};
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
return new throw('Error al enviar el correo:', error);
}
console.log('Correo enviado:', info.response);
});
}
}
}
En este caso, el campo html
contiene el contenido del correo en formato HTML.
Adjuntar archivos
Otra funcionalidad interesante de Nodemailer es la posibilidad de adjuntar archivos al correo electrónico. Puedes adjuntar imágenes, documentos, archivos comprimidos, entre otros (Los tamaños y tipos dependen de la configuración del servidor de correo).
Otra funcionalidad interesante de Nodemailer es la posibilidad de adjuntar archivos al correo electrónico. Puedes adjuntar imágenes, documentos PDF, archivos ZIP, entre otros.
const send = () => {
let mailOptions = {
from: 'tucorreo@gmail.com',
to: 'destinatario@example.com',
subject: 'Hola desde Encodebiz',
html: this.generateHtmlTemplate({user:'Jhon Doe'}),
attachments: [
{
filename: 'ejemplo.pdf',
path: './archivos/ejemplo.pdf' // Ruta local del archivo
}
]
};
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
return new throw('Error al enviar el correo:', error);
}
console.log('Correo enviado:', info.response);
});
}
}
}
En este ejemplo, el campo attachments
contiene un arreglo con los archivos que deseas adjuntar. El campo path
indica la ubicación del archivo en tu sistema.
Conclusión
Nodemailer es una herramienta poderosa y flexible para enviar correos electrónicos desde aplicaciones Node.js. Con su API intuitiva, puedes implementar rápidamente funcionalidades como el envío de correos simples, correos con HTML, archivos adjuntos y plantillas personalizadas, se puede integrar con el gestor de plantillas Handlebars. También se puede usar con otras tecnologías de compilación en el servidor como NextJS
Recuerda siempre seguir las mejores prácticas de seguridad, especialmente al manejar credenciales y datos sensibles. Además, considera usar servicios de correo dedicados como SendGrid o Amazon SES para mejorar la entrega y evitar problemas con proveedores como Gmail.