[英]sending html page inside email nodemailer node.js
我想使用 node.js nodemailer 在 email 中发送付款表格。
我的电子邮件已成功发送,但是当我添加我创建的 HTML 文件时,email 出现错误。
const fs = require("fs");
const { promisify } = require("util");
const readFile = promisify(fs.readFile);
let transporter = nodemailer.createTransport({
service: "gmail",
auth: {
user: "mymail",
pass: "mypass",
},
});
let mailOptions = {
from: "testeamil@gmail.com",
to: invoice.customeremail,
subject: "Payment forServices",
text: "Please pay to Recieve the order ",
html: readFile("C://Users//admin//task//payment.html", "utf8"),
};
transporter.sendMail(mailOptions, function (err, data) {
if (err) {
console.log("error", err);
} else {
console.log("email sent!");
}
});
我想让 HTML 文件显示在我的 email 中。有什么办法吗?
根据我的说法,使用节点邮件程序发送html
标记的正确方法可以通过将mailOptions
和transporter.sendMail()
function 包装到fs.readFile()
中来实现,如下所示:
首先,我们将使用 fs 正确读取html
文件,当我们在html
变量的回调 function 中获得该文件时,我们可以将其与 email 一起发送。
var nodemailer = require('nodemailer');
var fs = require('fs');
var transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: 'youremail@gmail.com',
pass: 'yourpassword'
}
});
fs.readFile('Path here', {encoding: 'utf-8'}, function (err, html) {
if (err) {
console.log(err);
} else {
let mailOptions = {
from: 'youremail@gmail.com',
to: 'myfriend@gmail.com',
subject: 'Sending Html in node mailer',
html: html
};
transporter.sendMail(mailOptions, function(error, info) {
if (error) {
console.log(error);
} else {
console.log('Email has been sent: ' + info.response);
}
});
}
});
我对Mohammad Basit 的回答做了一些修改,以允许我将修改后的链接传递到 email。
在我的 html 文件的一行中,我创建了一个如下所示的链接:
<a href="mySite.herokuapp.com/resetPassword/#replaceWithLink#">Reset Password</a>
然后,在使用fs.readFile
加载文件后,我使用 JavaScript 的String replace()方法将#replaceWithLink#
文本替换为我想要的任何内容。
这是我的 app.js 节点文件中的一个片段:
//Sends password reset email
const sendPassResetEmail = function(emailAddress){
//email host information
const transporter = nodemailer.createTransport({
host: 'smtp.gmail.com',
port: 465,
secure: true,
auth:{
user: process.env.gmailUsr,
pass: process.env.gmailPass
}
});
fs.readFile('./emails/passwordReset.html', {encoding: 'utf-8'}, (err, data)=>{
let htmlFile = data;
htmlFile = htmlFile.replace("#replaceWithLink#", "myOtherLinkTest")
if(err){
console.warn("Error getting password reset template: " + err);
}else{
transporter.sendMail({
from:'"TedCounter :)"<EMAIL-ADDRESS-HERE>',
to: emailAddress,
subject:"Ted Counter",
html: htmlFile
});
}
});
}
结果是email中的#replaceWithLink#
被替换为myOtherLinkTest
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.