如何在nodejs外部使用html文件(非内部html)?
我想使用nodejs发送多封邮件。目前我正在使用Route的Nodejs脚本中的html代码。但是当html变大时,Nodejs文件也变得庞大而且不具备可维护性。
那么如何在外部使用html文件呢?
我在外部使用nodemailer
代码。像那样我也想在外部使用html
文件(/api/htmls/registerEmail.html
)。但html
文件也使用身体数据(req.body.fname
)
mailSender.js(/ api / routes / r_msg /)
var nodemailer = require('nodemailer');
function sendMail(to, msg, subject)
{
var transporter = nodemailer.createTransport({
host: 'smtp.zoho',
port: 465,
secure: true,
auth: {
user: '[email protected]',
pass: 'password'
}
});
var mailOptions = {
from: '[email protected]',
to:to,
subject: subject,
html: msg,
};
transporter.sendMail(mailOptions, function(error, info)
{
if (error)
{
console.log(error);
}
})
}
module.exports.sendMail = sendMail;
register.js(/ api / routes /)
const express = require('express');
const router = express.Router();
const app = express();
const sendMail = require("../api/routes/r_msg");
router.post("/register/new", (req, res) =>
{
const newStudent = new Student(
{
fname: req.body.fname,
lname: req.body.lname,
contact_no: req.body.lname,
email : req.body.email
});
newStudent.save()
.then(student =>
{
if (student)
{
//This line want to change
var html = `<html> <body> Hello ` + req.body.fname + `Welcome </body> </html>`;
sendMail.sendMail(req.body.email, html, 'Success');
res.status(200).send(setting.status("Success")
console.log('Email sent: ' + info.response);
}
});
}
回答如下:
如评论中所述,您可以使用ejs解决它。
将其添加到register.js:
const ejs = require('ejs');
const promisify = require('util').promisify;
const renderFile = promisify(ejs.renderFile);
// inside route handler:
renderFile(__dirname + "/api/htmls/registerEmail.html", {fname: req.body.fname})
.then(html => {
sendMail.sendMail(req.body.email, html, 'Success');
})
.catch(error => {
// handle error
})
电子邮件模板registerEmail.html
<html> <body> Hello <%= fname %> Welcome </body> </html>
如何在nodejs外部使用html文件(非内部html)?
我想使用nodejs发送多封邮件。目前我正在使用Route的Nodejs脚本中的html代码。但是当html变大时,Nodejs文件也变得庞大而且不具备可维护性。
那么如何在外部使用html文件呢?
我在外部使用nodemailer
代码。像那样我也想在外部使用html
文件(/api/htmls/registerEmail.html
)。但html
文件也使用身体数据(req.body.fname
)
mailSender.js(/ api / routes / r_msg /)
var nodemailer = require('nodemailer');
function sendMail(to, msg, subject)
{
var transporter = nodemailer.createTransport({
host: 'smtp.zoho',
port: 465,
secure: true,
auth: {
user: '[email protected]',
pass: 'password'
}
});
var mailOptions = {
from: '[email protected]',
to:to,
subject: subject,
html: msg,
};
transporter.sendMail(mailOptions, function(error, info)
{
if (error)
{
console.log(error);
}
})
}
module.exports.sendMail = sendMail;
register.js(/ api / routes /)
const express = require('express');
const router = express.Router();
const app = express();
const sendMail = require("../api/routes/r_msg");
router.post("/register/new", (req, res) =>
{
const newStudent = new Student(
{
fname: req.body.fname,
lname: req.body.lname,
contact_no: req.body.lname,
email : req.body.email
});
newStudent.save()
.then(student =>
{
if (student)
{
//This line want to change
var html = `<html> <body> Hello ` + req.body.fname + `Welcome </body> </html>`;
sendMail.sendMail(req.body.email, html, 'Success');
res.status(200).send(setting.status("Success")
console.log('Email sent: ' + info.response);
}
});
}
回答如下:
如评论中所述,您可以使用ejs解决它。
将其添加到register.js:
const ejs = require('ejs');
const promisify = require('util').promisify;
const renderFile = promisify(ejs.renderFile);
// inside route handler:
renderFile(__dirname + "/api/htmls/registerEmail.html", {fname: req.body.fname})
.then(html => {
sendMail.sendMail(req.body.email, html, 'Success');
})
.catch(error => {
// handle error
})
电子邮件模板registerEmail.html
<html> <body> Hello <%= fname %> Welcome </body> </html>