sofiDev img

J Carlos

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