我正在nodeJs中开发一个后端服务器,在某些时候我需要生成一个pdf并通过电子邮件将其发送给用户。我使用 GraphQl、Html-PDF 和 nodeJs 作为技术。
我之前用的是puppeteer,但是由于后端服务器位于Azure,所以配置起来非常头疼,所以我改成了html-pdf。
现在我的代码:
这是解析器的一部分。
let transporter = nodemailer.createTransport({
service: "Outlook365",
host: "smtp.office365.com",
port: 587,
secure: false,
auth: {
user: "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="abced3cac6dbc7ceebced3cac6dbc7ce85c8c4c6" rel="noreferrer noopener nofollow">[email protected]</a>",
pass: "example",
},
});
var i;
await pdf.create(html, options).toBuffer((err, buffer) => {
i = buffer
transporter.sendMail({
from: '"example" <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="8af9eff8fce3e9efcaeff2ebe7fae6efa4e9e5e7" rel="noreferrer noopener nofollow">[email protected]</a>',
to: `${a1.dataValues.email}`,
subject: "Result Email ✔",
text:
" Willkommen beim. Ihre Ergebnisse sind hier.Ihr/ Welcome to the Service. Your results are here. ",
html: `<p>Willkommen beim . <br /> <br /> Ihre Ergebnisse sind hier. <br /> <br /> <br /> <br /> Welcome. <br /> <br /> Your results are here.<br /> <br /> </p>`,
attachments: [
{
filename: `${a1.dataValues.kitID}.pdf`,
content: i,
},
],
})}
)
这在本地工作,但在部署到 Azure 时不起作用。我一直在服务器的其他部分使用nodemailer,通常在回调中它通常不起作用,但我也尝试这样做:
let transporter = nodemailer.createTransport({
service: "Outlook365",
host: "smtp.office365.com",
port: 587,
secure: false,
auth: {
user: "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="82e7fae3eff2eee7c2e7fae3eff2eee7ace1edef" rel="noreferrer noopener nofollow">[email protected]</a>",
pass: "example",
},
});
var i;
await pdf.create(html, options).toBuffer((err, buffer) => {
i = buffer
)}
transporter.sendMail({
from: '"example" <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="9fecfaede9f6fcfadffae7fef2eff3fab1fcf0f2" rel="noreferrer noopener nofollow">[email protected]</a>',
to: `${a1.dataValues.email}`,
subject: "Result Email ✔",
text:
" Willkommen beim. Ihre Ergebnisse sind hier Welcome . Your results are here.",y
html: `<p>Willkommen beim. <br /> <br /> Ihre Ergebnisse sind hier. <br /> <br /> <br /> <br /> Welcome . <br /> <br /> Your results are here.<br /> <br /> </p>`, // html body
attachments: [
{
filename: `${a1.dataValues.kitID}.pdf`,
content: i,
},
],
}
)
编辑:解决了 Azure 发送电子邮件的问题,尽管缓冲区为“空”
最佳答案
第一个版本应该可以工作。但是您需要将文件放置在缓冲区上,而不仅仅是常量上。
尝试改变
{
filename: `${a1.dataValues.kitID}.pdf`,
content: i,
},
至
{
filename: `${a1.dataValues.kitID}.pdf`,
content: new Buffer(buffer),
},
关于node.js - 部署到 azure 时,nodemailer 行为不稳定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64134856/