在电子邮件 nodemailer node.js 中发送 html 页面
sending html page inside email nodemailer node.js
我想使用 node.js nodemailer 在电子邮件中发送付款表格。
我的电子邮件已成功发送,但是当我添加我创建的 html 文件时,电子邮件出现错误。
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 文件显示在我的电子邮件中...有什么办法吗?
根据我的说法,使用节点邮件程序发送 html
标记的正确方法可以通过将 mailOptions
和 transporter.sendMail()
函数包装到 fs.readFile()
中来实现,如下所示:
首先,我们将使用 fs 正确读取 html
文件,当我们在 html
变量的回调函数中获得该文件时,我们可以将其与电子邮件一起发送。
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 的 回答进行了一些修改,以允许我将修改后的 link 传递到电子邮件中。
在我的 html 文件的一行中,我创建了一个 link,如下所示:
<a href="mySite.herokuapp.com/resetPassword/#replaceWithLink#">Reset Password</a>
然后我使用 JavaScript 的 String replace() 方法在文件加载 fs.readFile
后用我想要的任何内容替换 #replaceWithLink#
文本 fs.readFile
.
这是我的 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
});
}
});
}
结果是 #replaceWithLink#
在电子邮件中被替换为 myOtherLinkTest
。
我想使用 node.js nodemailer 在电子邮件中发送付款表格。
我的电子邮件已成功发送,但是当我添加我创建的 html 文件时,电子邮件出现错误。
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 文件显示在我的电子邮件中...有什么办法吗?
根据我的说法,使用节点邮件程序发送 html
标记的正确方法可以通过将 mailOptions
和 transporter.sendMail()
函数包装到 fs.readFile()
中来实现,如下所示:
首先,我们将使用 fs 正确读取 html
文件,当我们在 html
变量的回调函数中获得该文件时,我们可以将其与电子邮件一起发送。
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 的 回答进行了一些修改,以允许我将修改后的 link 传递到电子邮件中。
在我的 html 文件的一行中,我创建了一个 link,如下所示:
<a href="mySite.herokuapp.com/resetPassword/#replaceWithLink#">Reset Password</a>
然后我使用 JavaScript 的 String replace() 方法在文件加载 fs.readFile
后用我想要的任何内容替换 #replaceWithLink#
文本 fs.readFile
.
这是我的 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
});
}
});
}
结果是 #replaceWithLink#
在电子邮件中被替换为 myOtherLinkTest
。