使用Google Apps Script发送PDF时出现无效参数错误求助
解决Google Apps Script发送PDF时的「Invalid argument: fileName」错误
问题根源
报错指向GmailApp.sendEmail的附件参数,核心原因是PDF Blob的文件名包含Gmail不支持的特殊字符。你的代码里用MM/dd/yy hh:mm a生成日期,其中的/和:属于邮件附件文件名的非法字符,导致Gmail拒绝处理。
修复方案
1. 修改日期格式,移除非法字符
把日期格式里的/换成-,:换成-,避免生成包含特殊字符的文件名。
2. 显式给Blob设置合法文件名
在获取PDF Blob时,直接通过setName指定合规的文件名,确保Gmail能识别。
修改后的代码片段
var date = new Date(); var zone = Session.getScriptTimeZone(); // 修改日期格式,替换非法字符 var formattedDate = Utilities.formatDate(date, zone, 'MM-dd-yy hh-mm a'); var docName = "title here - " + formattedDate; var doc = DocumentApp.create(docName); var docFiles = DriveApp.getFilesByName(docName); var docFile = docFiles.next(); var noteBody = doc.getBody(); var form = FormApp.getActiveForm(); var title = form.getTitle(); var items = form.getItems(); //includes non-question items var responseSet = form.getResponses(); var lastResponse = responseSet.length - 1; var itemResponse = responseSet[lastResponse].getItemResponses(); // 填充文档内容的代码... // 创建PDF部分 doc.saveAndClose(); var pdfBlob = docFile.getBlob().getAs('application/pdf'); // 显式设置Blob的合法文件名 pdfBlob.setName(title + " - " + formattedDate); var newPDF = docFolder.createFile(pdfBlob); docFile.setTrashed(true); var recipientEmail = itemResponse[1].getResponse(); var subject = title; var body = "Check out the PDF form attached!"; // 发送邮件 GmailApp.sendEmail(recipientEmail, subject, body, {attachments: [pdfBlob]});
额外优化
- 无需重复通过Drive ID获取PDF文件,第一次生成的Blob已经可以直接使用,减少不必要的Drive API调用。
- 始终确保文件名只包含字母、数字、
-、_、.这类通用合法字符,避免跨服务的兼容性问题。
内容的提问来源于stack exchange,提问作者Raffi
相关产品推荐
相关产品推荐

