Servidor Node.js con Express y Nodemailer
Este documento explica el funcionamiento de un servidor Node.js que utiliza Express y Nodemailer para enviar correos electrónicos. A continuación, se detalla cada porción del código:
Índice
Configuración Inicial
const express = require('express');
const nodemailer = require('nodemailer');
const bodyParser = require('body-parser');
const cors = require('cors');
express: Framework de Node.js para crear servidores web.
nodemailer: Módulo para enviar correos electrónicos.
bodyParser: Middleware para analizar cuerpos de solicitudes entrantes.
cors: Middleware para habilitar CORS (Cross-Origin Resource Sharing).
const app = express();
const port = 3000;`
app: Instancia de la aplicación Express.
port: Número de puerto en el que el servidor escuchará las solicitudes.
Middleware
app.use(cors()): Habilita CORS para permitir solicitudes de diferentes dominios.
app.use(bodyParser.json()): Middleware para analizar cuerpos de solicitudes en formato JSON.
app.use(bodyParser.urlencoded({ extended: true })): Middleware para analizar cuerpos de solicitudes con URL-encoded.
Configuración del Transportador SMTP
let transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: 'exmaple@gmail.com', // Cambia esto por tu dirección de correo
pass: 'passwordSecret'// Cambia esto por tu contraseña o la contraseña de la aplicación generada
}
});
transporter: Objeto de Nodemailer configurado para usar el servicio de Gmail con autenticación.
Ruta para Enviar Correos Electrónicos
app.post('/send-email', (req, res) => {
console.log("enviado");
try {
// Código para manejar la solicitud aquí
} catch (error) {
return res.status(400).send('El contenido de req.body.text no es un JSON válido');
}
let mailOptions = {
from: '"Correo personalizado 👻" ', // es el nombre con el que aparece en el gmail
to: req.body.to, // Dirección de correo del destinatario
subject: req.body.subject,
text: generateHTMLContent(req.body.text)
};
transporter.sendMail(mailOptions, function(error, info){
if (error) {
console.log(error);
res.status(500).send('Error al enviar el correo electrónico');
} else {
console.log('Correo enviado: ' + info.response);
res.status(200).send('Correo electrónico enviado correctamente');
}
});
});
Función para Generar Contenido HTML
function generateHTMLContent(data) {
console.log(data);
let htmlContent = 'Agradecimiento por su solicitud de cotización\n';
htmlContent += 'Gracias por confiar en nosotros para cotizar su vehículo.\n';
htmlContent += 'Detalles de la solicitud:\n';
for (const key in data) {
if (data.hasOwnProperty(key)) {
htmlContent += `${key}: ${data[key]}\n`;
}
}
htmlContent += 'Atentamente,';
htmlContent += 'Equipo de cotizaciones';
console.log(htmlContent);
return htmlContent;
}
Iniciar el Servidor
app.listen(port, () => {
console.log(`Servidor iniciado en http://localhost:${port}`);
});
Puede ver mas en mi repositorio de github Aqui