You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Drive API与nodemailer mailComposer发送PDF附件空白的问题求助

问题:Drive API导出PDF作为Nodemailer附件显示空白

我尝试使用Drive API和nodemailer的mailComposer发送邮件附件,为避免下载Google Drive中的文件,执行了以下代码:

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

邮件发送成功,但附件为空白页,页数与原文件一致但内容全为空,请问该如何解决此问题?


解决办法
  • 验证导出数据有效性
    先确认Drive API导出的arrayBuffer是否完整。可以将数据写入本地文件测试:

    const fs = require('fs');
    fs.writeFileSync('test.pdf', Buffer.from(attPDF.data));
    

    如果本地PDF也是空白,说明导出环节有问题,检查fileId是否正确、文件权限是否允许导出,以及原文件是否能正常生成PDF。

  • 简化附件内容处理
    Nodemailer支持直接使用arrayBuffer作为附件内容,无需手动转换为Buffer。修改附件配置:

    const attachments = [
      {
        filename: "MyFile.pdf",
        content: attPDF.data,
        contentType: "application/pdf",
      },
    ];
    

    手动转换Buffer可能引发编码异常,直接使用原始arrayBuffer即可。

  • 根据文件类型选对API方法
    如果Drive中的文件是原生PDF,改用files.get方法替代files.export:

    const attPDF = await drive.files.get(
      {
        fileId: "abcde123",
        alt: 'media'
      },
      {
        responseType: "arrayBuffer",
      }
    );
    

    files.export主要用于将Google Docs/Sheets/Slides等格式转成PDF,原生PDF用此方法可能出现数据异常。

内容的提问来源于stack exchange,提问作者Victor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 12:14:57