如何在Google Apps Script邮件发送代码中添加Google Drive附件?
如何在Google Apps Script邮件发送代码中添加Google Drive附件?
看起来你遇到的问题是给邮件加Drive附件后,不仅附件没加上,连邮件都发不出去了对吧?我来帮你梳理下代码里的问题,再给你修正后的可用版本。
首先说你最新代码里的两个核心问题:
- 你在
rows.forEach循环里面嵌套定义了另一个sendEmails函数,但这个内部函数根本没被调用,直接把原本的邮件发送逻辑给“藏”起来了,自然不会有邮件发出 MailApp.sendEmail的参数格式用错了:要添加附件,不能直接把文件对象当第四个参数,得用配置选项对象来传递附件信息
下面是修正后的完整代码,我已经帮你调整了结构,并且正确添加了附件逻辑:
function sendEmails() { // 加载表格数据 const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); const allData = sheet.getDataRange().getValues(); const headers = allData[0]; const rows = allData.slice(1); // 辅助函数:根据表头名获取列索引 const getColIndex = (headerName) => { const index = headers.indexOf(headerName); if (index === -1) throw new Error(`表头 "${headerName}" 未找到`); return index; }; // 获取各列索引(这里用了你修改后的表头名) const nameCol = getColIndex("Namn"); const emailCol = getColIndex("E-postadress"); const sentCol = getColIndex("Sent"); // 提前获取Drive中的附件文件(放在循环外,避免重复调用,提升效率) const attachmentFileId = '1ezM-QiJ73Ry4xmNMdWHdC-4jXJ4gUHhB'; const attachment = DriveApp.getFileById(attachmentFileId); // 遍历表格每一行 rows.forEach((row, i) => { const name = row[nameCol]; const email = row[emailCol]; const sent = row[sentCol]; // 跳过无邮箱或已发送的行 if (!email || sent) return; // 邮件主题和正文(保留你的个性化内容) const subject = `Postpartum Checklist`; const body = `Dear ${name},\n\nSå härligt att du tar dina första steg mot en positiv postpartum upplevelse. Oavsett om det är din första eller fjärde gång, hoppas jag att du hittar lite trygghet i den här checklistan.\n\nLadda ner och skriv ut den, eller få ditt utskriven exemplar från mig om du valde att bli kontaktad för en första konsultation.\n\nMvh,\nLeila`; // 正确发送带附件的邮件:用选项对象传附件 MailApp.sendEmail({ to: email, subject: subject, body: body, attachments: [attachment] }); // 在Sent列标记发送时间 sheet.getRange(i + 2, sentCol + 1).setValue(new Date()); }); }
另外再给你几个注意事项,避免后续踩坑:
- 确保你的Google Apps Script有访问该Drive文件的权限:如果文件是共享给你的,要确认共享权限是“查看者”及以上;如果是你自己的文件,一般不会有权限问题
- 检查
attachmentFileId是否正确:你可以从Drive文件的URL里提取ID(URL中d/和/view之间的字符串就是文件ID) - 测试的时候可以先找一行未发送的测试数据,避免一次性发大量邮件
内容来源于stack exchange
相关产品推荐
相关产品推荐

