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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 18:01:16