带有 Google Drive 和 Nodemailer 的电子邮件附件

问题描述 投票:0回答:1

我正在尝试使用

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 个空白页。有谁知道如何解决吗?

google-drive-api nodemailer
1个回答
0
投票

推荐:

我相信使用

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",
    },
  ];

参考:

© www.soinside.com 2019 - 2024. All rights reserved.