我想使用nodemailer和node.js附加PDF文档,但是,我找到的与nodemailer附件的唯一示例是.txt文件(这里).
有谁知道节点制作者是否支持PDF文档附件?
最初看起来可以附加PDF,但通过电子邮件到达的PDF文件似乎已损坏(见图).
代码:(改编自Mahesh的答案)
fs.readFile('/filePath/fileName.pdf', function (err, data) {
if (err) throw err;
var mailOptions = {
from: 'Test <formEmail@gmail.com>', // sender address
to: 'toPersonName <toEmail@gmail.com>', // list of receivers
subject: 'Attachment', // Subject line
text: 'Hello world attachment test', // plaintext body
html: '<b>Hello world attachment test HTML</b>', // html body
attachments: [
{
filename: 'fileName.pdf',
contentType: 'application/pdf'
}]
};
// send mail with defined transport object
transporter.sendMail(mailOptions, function(error, info){
if(error){
return console.log(error);
}
console.log('Message sent: …Run Code Online (Sandbox Code Playgroud) 我正在开发Firebase函数,当向实时数据库中添加新订单时会触发该函数。它要做的第一件事是创建pdf并将其通过管道传输到Google云存储桶。
在存储区流的.on(“ finish”)事件上,下一个函数启动,该函数应通过电子邮件将管道的pdf发送给客户。
一切似乎都正常,至少有一点。
首先,我遇到了一个问题,即所附的pdf始终为空。(不仅是空白。我还用记事本++打开了它,实际上它全是空的)。当我检查bucketFileStream.on(“ finished”)函数内的doc和bucketFileSream变量的长度均为0时。直接在doc.end之后检查doc var的长度为612。
然后,我更改了流程,即在sendOrderEmail函数中,我还从存储桶中新创建的File中打开了一个新的Read Stream。
现在,我至少在附件中得到了一些PDF内容,但是没有获得全部内容。
当我检查上传到存储桶的PDF时,看起来应该是这样。
我在Google上搜索了很多,找到了一些也针对该主题的答案,但是正如对这些问题的评论所看到的那样,它们并没有完全帮助。
我还与nodemailer文档一起检查了如何正确传递附件并按文档所述实施了附件。但是没有成功。
我认为邮件是在读取流完成之前发送的。
这是我使用的软件包版本:
谁能告诉我我做错了什么,或提供一个使用此案例的使用当前软件包版本的有效示例?
这是令我疯狂的代码...
const functions = require("firebase-functions");
const admin = require("firebase-admin");
const nodemailer = require("nodemailer");
const pdfkit = require("pdfkit");
const storage = require("@google-cloud/storage")({projectId: `${PROJECT_ID}`})
const mailTransport = nodemailer.createTransport({
host: "smtp.office365.com",
port: 587,
secureConnection: false,
auth: {
user: "userName", …Run Code Online (Sandbox Code Playgroud)