使用 Node.js 和 Mailgun 发送 HTML 时遇到问题
Trouble sending HTML using Node.js and Mailgun
我很难在电子邮件中发送 HTML。为了测试和避免错误,我使用 Mailgun's email templates.
我可以成功发送电子邮件,但是当我收到它们时,我看到 HTML 是纯文本。我不确定我在哪里犯了错误,因为我一直在关注文档。另外,我使用 mailgun-js
和 mailcomposer
来实现这个目标。
function sendEmailNotif(name) {
var mail = mailcomposer({
from: process.env.MAIL_FROM_ADDRESS,
to: '********@*****.com', // My address, for testing purpose
subject: ' ****** ' + name +' ***** !',
text: '******* *****',
html: 'htmlBody should appear here'
});
mail.build(function(mailBuildError, message) {
var dataToSend = {
to: '*******@****.com',
message: fs.createReadStream(htmlBody)
};
mailgun.messages().sendMime(dataToSend, function (sendError, body) {
if (sendError) {
console.log(sendError);
return;
} else {
console.log('Email sent ! ', + body);
}
});
});
另外,我这样声明 html :
var htmlBody = path.join(__dirname, './emailTemplate/alert.html');
其他信息:我在 'Cloud Code' 中使用 Parse Server 执行此操作。
这是我收到的电子邮件:
我不确定我做错了什么以及为什么电子邮件没有以 .. html 的形式发送。
提前致谢。
我想你想要这个:
function sendEmailNotif(name) {
fs.readFile(path.join(__dirname, './emailTemplate/alert.html'), function (err, htmlBody) {
var mail = mailcomposer({
from: process.env.MAIL_FROM_ADDRESS,
to: '********@*****.com', // My address, for testing purpose
subject: ' ****** ' + name +' ***** !',
text: '******* *****',
html: htmlBody,
});
mail.build(function (mailBuildError, message) {
var dataToSend = {
to: '*******@****.com',
message: message.toString('ascii'),
};
mailgun.messages().sendMime(dataToSend, function (sendError, body) {
if (sendError) {
console.log(sendError);
return;
} else {
console.log('Email sent ! ', + body);
}
});
});
});
}
说明:mail.build
向您的回调发送正确的 MIME 编码正文(在 message
参数中),因此您需要实际使用它。 (您只是使用从文件中读取的 HTML。)我所做的修复是:
- 从文件中读取 HTML 并在使用
mailcomposer
创建邮件时将其放入 html
字段。
- 实际使用从
mail.build
获得的值。
注意上面的代码我没有测试过,只是阅读了mailgun-js
documentation。为任何 typos/mistakes!
道歉
我很难在电子邮件中发送 HTML。为了测试和避免错误,我使用 Mailgun's email templates.
我可以成功发送电子邮件,但是当我收到它们时,我看到 HTML 是纯文本。我不确定我在哪里犯了错误,因为我一直在关注文档。另外,我使用 mailgun-js
和 mailcomposer
来实现这个目标。
function sendEmailNotif(name) {
var mail = mailcomposer({
from: process.env.MAIL_FROM_ADDRESS,
to: '********@*****.com', // My address, for testing purpose
subject: ' ****** ' + name +' ***** !',
text: '******* *****',
html: 'htmlBody should appear here'
});
mail.build(function(mailBuildError, message) {
var dataToSend = {
to: '*******@****.com',
message: fs.createReadStream(htmlBody)
};
mailgun.messages().sendMime(dataToSend, function (sendError, body) {
if (sendError) {
console.log(sendError);
return;
} else {
console.log('Email sent ! ', + body);
}
});
});
另外,我这样声明 html :
var htmlBody = path.join(__dirname, './emailTemplate/alert.html');
其他信息:我在 'Cloud Code' 中使用 Parse Server 执行此操作。
这是我收到的电子邮件:
我不确定我做错了什么以及为什么电子邮件没有以 .. html 的形式发送。 提前致谢。
我想你想要这个:
function sendEmailNotif(name) {
fs.readFile(path.join(__dirname, './emailTemplate/alert.html'), function (err, htmlBody) {
var mail = mailcomposer({
from: process.env.MAIL_FROM_ADDRESS,
to: '********@*****.com', // My address, for testing purpose
subject: ' ****** ' + name +' ***** !',
text: '******* *****',
html: htmlBody,
});
mail.build(function (mailBuildError, message) {
var dataToSend = {
to: '*******@****.com',
message: message.toString('ascii'),
};
mailgun.messages().sendMime(dataToSend, function (sendError, body) {
if (sendError) {
console.log(sendError);
return;
} else {
console.log('Email sent ! ', + body);
}
});
});
});
}
说明:mail.build
向您的回调发送正确的 MIME 编码正文(在 message
参数中),因此您需要实际使用它。 (您只是使用从文件中读取的 HTML。)我所做的修复是:
- 从文件中读取 HTML 并在使用
mailcomposer
创建邮件时将其放入html
字段。 - 实际使用从
mail.build
获得的值。
注意上面的代码我没有测试过,只是阅读了mailgun-js
documentation。为任何 typos/mistakes!