我正在尝试使用
Drive API
和 nodemailer 的 mailComposer
发送电子邮件附件。我不想从 Google 云端硬盘下载文件,所以我这样做:
const attPDF = await drive.files.export(
{
fileId: "abcde123",
mimeType: "application/pdf",
},
{
responseType: "arrayBuffer",
}
);
然后我将其附加到 Nodemailer,如下所示:
const attachments = [
{
filename: "MyFile.pdf",
content: new Buffer.from(attPDF.data),
contentType: "application/pdf",
},
];
邮件发送成功,包含附件,但附件是空白页。它将遵循原始文件的页数,但全部为空白。如果文件有 2 页,它将显示 2 个空白页。有谁知道如何解决吗?
我相信使用
arrayBuffer
导出的 PDF 会生成一个空文件,因为 arrayBuffer
会一次性处理所有文件并且仅限于特定长度。这可能会导致导出完成之前过早停止。
最好使用
stream
作为响应类型来分块处理文件,这可确保导出完成后处理所有片段。由于这将是您要附加的 PDF,因此必须使用 base64 进行编码。
导出 Google Workspace 文档:
const attPDF = await drive.files.export(
{
fileId: "abcde123",
mimeType: "application/pdf",
},
{
responseType: "stream",
}
);
对于附件:
const attachments = [
{
filename: "MyFile.pdf",
content: attPDF.data,
encoding: "base64",
contentType: "application/pdf",
},
];
参考: