Google脚本发送的PDF部分收件人无法打开问题求助
PDF附件无法打开的排查与解决思路
- 优化PDF导出参数:当前代码直接导出整个表格为PDF,部分邮件客户端可能对默认导出的PDF兼容性不足。建议指定导出范围、纸张尺寸等参数,仅导出发票所在工作表,避免冗余内容干扰:
function EmailInvoice() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getActiveSheet(); var email = sheet.getRange("b12").getValue(); var cusname = sheet.getRange("b5").getValue(); // 配置PDF导出选项 var pdfExportOpts = { format: 'A4', portrait: true, sheetId: sheet.getSheetId(), // 仅导出当前工作表 printRange: 'A1:E20', // 替换为发票实际单元格范围 scale: 4 // 适配打印比例,防止内容裁剪 }; // 生成带配置的PDF Blob var pdfBlob = ss.getAs(MimeType.PDF) .setName("Invoice.pdf") .setContentOptions(pdfExportOpts); var message = { to: email, subject: "Invoice from *******", body: "Dear " + cusname + ", Please find attached Invoice. Any queries to: sales@sudburycaravans.co.uk", attachments: [pdfBlob] }; MailApp.sendEmail(message); }
- 添加内容加载延迟:偶尔表格内容未完全加载就生成PDF,会导致文件损坏。可在生成PDF前加入短暂延迟:
// 在生成PDF代码前插入延迟 Utilities.sleep(2000); // 延迟2秒,可根据表格复杂度调整
- 改用Drive API生成PDF:默认的
getAs()方法生成的PDF可能存在兼容性问题,使用Drive API导出的PDF兼容性更稳定(需在脚本编辑器的「服务」中启用Google Drive API):
function EmailInvoiceWithDriveAPI() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getActiveSheet(); var email = sheet.getRange("b12").getValue(); var cusname = sheet.getRange("b5").getValue(); var fileId = ss.getId(); // 构造Drive API导出链接,指定参数 var exportUrl = `https://docs.google.com/spreadsheets/d/${fileId}/export?` + `format=pdf&size=A4&portrait=true&gid=${sheet.getSheetId()}&range=A1:E20`; var token = ScriptApp.getOAuthToken(); var response = UrlFetchApp.fetch(exportUrl, { headers: { 'Authorization': `Bearer ${token}` } }); var pdfBlob = response.getBlob().setName("Invoice.pdf"); var message = { to: email, subject: "Invoice from *******", body: "Dear " + cusname + ", Please find attached Invoice. Any queries to: sales@sudburycaravans.co.uk", attachments: [pdfBlob] }; MailApp.sendEmail(message); }
补充收件人引导:在邮件正文添加提示,若附件无法打开,可联系sales@sudburycaravans.co.uk重新发送适配格式的发票,减少用户困扰。
针对性测试验证:联系几位出现问题的收件人,发送不同参数生成的PDF,确认是格式兼容性还是客户端环境问题,再调整优化方向。
内容的提问来源于stack exchange,提问作者Ben C
相关产品推荐
相关产品推荐

