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

如何将两个Google Drive文件名存入数组以实现邮件多附件发送?

解决方案:构建多附件数组并优化Google Apps Script邮件发送代码

修改后的完整代码

function send_email() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet1 = ss.getSheetByName('MEMBER');
  var sheet2 = ss.getSheetByName('Email Template');

  var subject = sheet2.getRange(7, 1).getValue();
  var message = sheet2.getRange(7, 2).getValue();
  var n = sheet1.getLastRow();

  // 预先构建附件数组,避免循环内重复检索Drive
  var attachments = [];
  
  // 获取第一个PDF文件并加入数组
  var file1Iterator = DriveApp.getFilesByName('pdf1.pdf');
  if (file1Iterator.hasNext()) {
    attachments.push(file1Iterator.next());
  } else {
    Logger.log('未找到目标文件:pdf1.pdf');
  }

  // 获取第二个PDF文件并加入数组
  var file2Iterator = DriveApp.getFilesByName('pdf2.pdf');
  if (file2Iterator.hasNext()) {
    attachments.push(file2Iterator.next());
  } else {
    Logger.log('未找到目标文件:pdf2.pdf');
  }

  // 无可用附件时直接终止脚本,避免无效发送
  if (attachments.length === 0) {
    Logger.log('没有可用的附件文件,终止发送');
    return;
  }

  // 遍历成员列表发送邮件
  for (var i = 3; i <= n; i++) {
    var EmailAddress = sheet1.getRange(i, 5).getValue();
    // 补充原代码缺失的Member变量(示例取第2列,可根据实际调整)
    var Member = sheet1.getRange(i, 2).getValue();
    let message2 = message.replace("<Member>", Member);

    MailApp.sendEmail(EmailAddress, subject, message2, {
      name: "Iceman",
      attachments: attachments // 直接传入构建好的附件数组
    });
  }
}

关键优化点说明

  • 附件数组构建逻辑:先初始化空数组attachments,通过DriveApp.getFilesByName获取文件迭代器,判断文件存在后用push方法将文件对象加入数组,最终直接将数组作为attachments参数传入邮件发送方法。
  • 减少Drive检索次数:将文件获取逻辑放在循环外部,避免每次循环重复检索Google Drive,大幅提升脚本运行效率。
  • 错误防护:添加文件存在性检查,找不到文件时记录日志;无可用附件时直接终止脚本,避免无效执行。
  • 修复变量缺失:补充原代码中未定义的Member变量,从工作表中读取对应成员名称(需根据实际列位置调整代码中的列号)。

内容的提问来源于stack exchange,提问作者iceman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 21:54:56