node.js - 使用 Nodemailer 发送多封电子邮件时出现问题 - 主题未更改
问题描述
我正在尝试使用 nodejs 和 nodemailer 发送多封电子邮件,直到现在我尝试了 +50 种方法并且始终得到相同的结果:传输器发送具有不同正文但具有相同主题的电子邮件,
我试图一个一个地发送逻辑函数,我切换到将所有电子邮件有效负载推送到一个数组中,然后调用一个函数来发送它们,它总是相同的:相同的主题(当我做 console.log 我看到 3 个不同的并更正电子邮件对象)。
这是我的代码(书籍是猫鼬模型):
var TypesBook = [
"Comic",
"Action",
"Adventure"
];
sendDailyEmails = () => {
var emails = [];
Books.find({day: stringday}, (err, books) => {
if (err) {
console.log("error get books")
}
if (!stats) {
console.log("books not found")
}
for (let i=0; i < TypesBook.length; i++) {
let EmailPayload = {
from: '',
to:["test@test.test"],
subject : "[Book "+TypesBook[i]+"] is availbale at day "+stringday
}
for (let j=0; j<books.length; j++) {
if (TypesBook[i] !== books[j].Type) {
continue
} else {
EmailPayload["html"] =
'Hi' +
"Your book "+TypesBook[i]+" is ready <br/><br />" +
"details: "+books[j].Length.pages+" <br />"
emails.push(EmailPayload)
}
}
}
sendMyNewEmails(emails);
}).catch(err => console.log(err))
};
sendMyNewEmails = (tab) => {
console.log(tab) // here I get 3 correct objects with correct subject and body
tab.forEach(function(entry) {
Email.sendMail(entry);
});
}
sendMail = async (payload) => {
var mailOptions = {
from: 'email@email.email',
to: payload.to,
subject: payload.subject,
text: payload.text,
html: payload.html
};
transporter.sendMail(mailOptions, function(error, info){
if (error) {
console.log(error)
}
});
}
我把它改成了这个,但仍然是同样的错误:
sendMail = function(mailOptions){
return new Promise(function (resolve, reject){
transporter.sendMail(mailOptions, (err, info) => {
if (err) {
console.log("error: ", err);
reject(err);
} else {
console.log(`Mail sent successfully!`);
resolve(info);
}
});
});
}
更新 :
当我在收到的电子邮件中单击电子邮件详细信息时,我看到了正确的主题,但它进入了带有错误旧主题的收件箱(甚至不存在于代码中)。
解决方案
使用闭包函数调用:
var TypesBook = [
"Comic",
"Action",
"Adventure"
];
sendDailyEmails = () => {
var emails = [];
Books.find({day: stringday}, (err, books) => {
if (err) {
console.log("error get books")
}
if (!stats) {
console.log("books not found")
}
for (let i=0; i < TypesBook.length; i++) {
(function(idx){
let EmailPayload = {
from: '',
to:["test@test.test"],
subject : "[Book "+TypesBook[idx]+"] is availbale at day "+stringday
}
for (let j=0; j<books.length; j++) {
if (TypesBook[idx] !== books[j].Type) {
continue
} else {
EmailPayload["html"] =
'Hi' +
"Your book "+TypesBook[idx]+" is ready <br/><br />" +
"details: "+books[j].Length.pages+" <br />"
emails.push(EmailPayload)
}
}
}
sendMyNewEmails(emails);
}).catch(err => console.log(err))
};
sendMyNewEmails = (tab) => {
console.log(tab) // here I get 3 correct objects with correct subject and body
tab.forEach(function(entry) {
Email.sendMail(entry);
});
}
sendMail = async (payload) => {
var mailOptions = {
from: 'email@email.email',
to: payload.to,
subject: payload.subject,
text: payload.text,
html: payload.html
};
transporter.sendMail(mailOptions, function(error, info){
if (error) {
console.log(error)
}
});
})(i);
}
推荐阅读
- javascript - 如何在vuejs中拼接嵌套数组
- c++ - OpenCV 交叉编译路径
- regex - .htaccess 如果在最后一个斜杠之前没有扩展名,则添加斜杠
- python - NoneType 对象没有属性“get_text”——Python
- node.js - 在 Mongo DB 文档中找不到参考
- python - Python 字典乘法键 * 值
- json - 需要 Jolt Spec 将 JSON 数组键名转换为更新的名称
- r - 由于软件包安装,从 UBUNTU 运行 R 脚本失败
- python - Tensorflow 2.3 ImportError:DLL加载失败
- python - 从 API 获取内容