如何将两个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
相关产品推荐
相关产品推荐

