Esta es la primera vez que hago una pregunta en StackOverflow.
Estoy usando Nodemailer para enviarme un correo electrónico cuando alguien ha llenado un formulario. Estoy usando ExpressJS para manejar la solicitud POST.
Todo parece estar bien ahora, excepto cuando traté de inyectar etiquetas HTML en el formulario. ¡Podría jugar con el correo html como quisiera!
Este es mi código para el sendMail
transport.sendMail({ from: `Form Submittion <${myEmailAddress}>`, to: myOtherEmailAddress, subject: "New Form Submitted", text: `Hi, \nNew Form Submitted!\n${req.body.request}`, html: `<h1>Hi, <br />New Form Submitted!</h1> <h2>${req.body.request}</h2>`, }); Cuando req.body.request tiene etiquetas HTML, puede afectar la apariencia de mi correo electrónico, lo cual no me gusta.
¿Hay alguna manera de sanear el req.body.request del nodemailer o express o debo confiar en otras herramientas? Si es así, ¿podría sugerir algunas herramientas para hacer el trabajo?
multermulter const express = require("express"); // for email const nodemailer = require("nodemailer"); // for handling the form submission const multer = require('multer'); const upload = multer(); const app = express(); // upload.none() for only accepting text fields from form submission // refer : http://expressjs.com/en/resources/middleware/multer.html app.post("/submit", upload.none(), async (req, res) => { // here name is field name at your html form const name = req.body.name; const email = req.body.email; let transporter = nodemailer.createTransport({ host: "your-smtp-server", port: 587, secure: false, // true for 465, false for other ports auth: { user: "your-crendentials", // generated ethereal user pass: "your-crendentials", // generated ethereal password }, }); const info = await transporter.sendMail({ from: '"Sender name" <foo@example.com>', // sender address to: email, subject: "New message from " + name, text: `Hi, \nNew Form Submitted!\n${name}`, html: getHTMLTemplateString(name), }); console.log("Message sent: %s", info.messageId); return res.send({ success: true, message: "Email sent successfully", }) }); function getHTMLTemplateString(name) { // add your css and html inside the string below return ` <h1>Hi ${name}, <br />New Form Submitted!</h1> <p>Thank you for submitting the form!</p> <p>We will get back to you as soon as possible.</p> `; } app.listen(3000, () => { console.log("Server started on port 3000"); }); Dependencias añadidas: multer