使用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
相关产品推荐
相关产品推荐

