使用Apps Script从Drive添加邮件附件失败求助调试
问题排查与修正方案
你的代码核心问题有三个,直接导致附件无法正常添加:
1. 参数拼写错误
GmailApp.sendEmail的附件参数是**attachments**,你写成了attachements(多了一个字母e),这个拼写错误会让系统直接忽略该参数,自然不会添加附件。
2. 附件参数格式错误
attachments要求传入文件对象数组,而非单个文件对象。哪怕只有一个附件,也需要用数组包裹起来。
3. Drive文件获取的作用域问题
你把listOfFiles定义在函数外部,Google Apps Script会对全局变量做缓存处理,可能导致后续执行时无法正确获取最新的文件。建议把文件获取逻辑放到函数内部。
修正后的完整代码
const subject = "Revenue & Billing Missing Information"; const body = ""; const emails = [Emails]; // 替换为实际邮箱数组 const pdfName = "Rev&Bill DP.pdf"; const bodySignature = [Body]; // 替换为实际HTML正文 function monthlyReminder() { let listOfFiles = DriveApp.getFilesByName(pdfName); if(listOfFiles.hasNext()){ const file = listOfFiles.next(); // 遍历邮箱数组发送邮件 for (const email of emails) { GmailApp.sendEmail( email, subject, body, { htmlBody: bodySignature, attachments: [file] // 修正拼写+改为数组格式 } ); } console.log(`已成功给${emails.length}个邮箱发送带附件的邮件`); } else { console.log("错误:未找到指定名称的PDF文件,邮件未发送"); } }
额外优化建议
- 用
for...of循环替代传统for循环,代码更简洁易读 - 添加成功日志,方便快速排查执行情况
- 如果Drive中存在多个同名PDF,
getFilesByName会返回第一个匹配的文件,若需要精确匹配,建议改用文件ID获取:DriveApp.getFileById("文件ID"),避免同名文件干扰
内容的提问来源于stack exchange,提问作者Apalila
相关产品推荐
相关产品推荐

