gpt4 book ai didi

node.js - 无法正确地将使用nodejs PDFKit制作的pdf附加到通过Nodemailer发送的电子邮件中

转载 作者:太空宇宙 更新时间:2023-11-03 23:05:22 24 4
gpt4 key购买 nike

我在将使用 pdfkit(node) 制作的 pdf 附加到通过 nodemailer 和 Sendgrid API 发送的电子邮件时遇到问题。电子邮件工作正常。生成到磁盘的 pdf 没问题,但附件上的 pdf 不断出现损坏且无法读取的情况。我尝试了许多不同的变体,并通过谷歌进行了研究,但我不确定如何让它发挥作用。

创建 pdf 的代码:

var fs = require('fs');
var PDFDocument = require('pdfkit');

doc = new PDFDocument({
size: 'letter'
});

doc.pipe(fs.createWriteStream('./public/img/test.pdf'));

doc.text('my text')

doc.end();

我的nodemailer代码:

var nodemailer = require('nodemailer');
var sgTransport = require('nodemailer-sendgrid-transport');
var options = {
auth: {
api_key: process.env.SENDGRID_API
}
}
var mailer = nodemailer.createTransport(sgTransport(options));

var email = {
to: 'XXXXXXXX@gmail.com',
from: 'example@gmail.com',
subject: 'Please work',
text: 'Check out this pdf',
attachments: [{
filename: 'test.pdf',
path: './public/img/test.pdf',
contentType: 'application/pdf'
}]
};

mailer.sendMail(email, function(err, res){
if (err){
console.log(err);
}
console.log(res);
});

我错过了什么吗?我没有将 pdf 写入磁盘,而是读到另一种方法是将 pdf 直接流式传输到我的电子邮件。但我也不知道如何做到这一点。

最佳答案

我也遇到了同样的问题。我注意到我邮箱中收到的文件缺少最后几行,导致文件损坏。

原因是文件系统 fs 没有时间完成邮件已通过 Nodemailer 发送的 pdf 的写入。

您需要等待 fs 写入流上的“完成”事件。这就是我所做的:

  const doc = new PDFDocument();
const fileName = 'aPdfFile.pdf';
const writeStream = fs.createWriteStream(fileName);
doc.pipe(writeStream);

// do something with your pdf document ...

doc.end();
writeStream.on('finish', function () {
// call the callback function or in my case resolve the Promise.
resolve(fileName);
});

关于node.js - 无法正确地将使用nodejs PDFKit制作的pdf附加到通过Nodemailer发送的电子邮件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35775612/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com