求助:Google Apps Script自动触发邮件发送故障排查
问题排查与解决方案
核心问题分析
你的脚本逻辑本身无错误,但未按预期触发或执行,主要是以下几个原因导致:
1. 未配置自动触发机制
你仅编写了sendEmails执行函数,但没有设置表格内容变更触发器,脚本只会在手动点击运行时执行,不会在Status列更新为指定值时自动触发。
解决步骤:
- 打开脚本编辑器,点击左侧「触发器」图标(时钟样式)
- 点击「添加触发器」,配置以下选项:
- 选择要运行的函数:
sendEmails - 选择部署来源:
从 spreadsheet - 选择事件类型:
当更改时(或「编辑时」,「当更改时」覆盖所有表格修改,「编辑时」仅在手动编辑单元格时触发) - 保存后完成授权流程(首次授权需允许脚本访问表格和邮件服务)
- 选择要运行的函数:
2. 状态判断文本不匹配
你脚本中判断条件是emailSent == 'Gửi'(越南语“发送”),但你描述的目标是当Status列更新为Send(英文)。如果表格Status列实际填写的是Send,脚本永远不会触发邮件发送。
解决方法:
将脚本中判断条件改为:
if (emailSent == 'Send') {
若表格确实使用越南语Gửi,则忽略此条。
3. 缺少HTML模板文件
createEmailTemplate函数调用了HtmlService.createTemplateFromFile('EmailTemplate'),但如果脚本编辑器中未创建名为EmailTemplate的HTML文件,会直接报错导致脚本终止。
解决方法:
- 在脚本编辑器中,点击左侧「文件」→「新建」→「HTML文件」
- 命名为
EmailTemplate,并写入HTML邮件模板示例:
<!DOCTYPE html> <html> <body> <p>您好 <?= firstName ?> <?= lastName ?>,</p> <p>这是您的自动邮件内容。</p> </body> </html>
4. 列索引与表格结构不匹配
确认表格列顺序严格对应:
- A列:First Name → 对应脚本
row[0] - B列:Last Name → 对应脚本
row[1] - C列:Email → 对应脚本
row[2] - D列:Status → 对应脚本
row[3]
若列顺序错误,会导致取值异常,无法触发判断逻辑。
5. 未完成首次授权
首次运行脚本时,需手动点击「运行」→「sendEmails」,完成Google权限授权流程,否则脚本无权限发送邮件和修改表格内容。
修正后的完整脚本(适配英文Status的情况)
function sendEmails() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var dataRange = sheet.getDataRange(); var data = dataRange.getValues(); for (var i = 1; i < data.length; i++) { var row = data[i]; var firstName = row[0]; var lastName = row[1]; var emailAddress = row[2]; var status = row[3]; // 匹配表格中的'Send'状态 if (status == 'Send') { var subject = '你的邮件主题'; var message = createEmailTemplate(firstName, lastName); MailApp.sendEmail(emailAddress, subject, "", { htmlBody: message }); // 更新状态为已发送(可按需修改文本) sheet.getRange(i + 1, 4).setValue('Sent'); SpreadsheetApp.flush(); } } } function createEmailTemplate(firstName, lastName) { var htmlTemplate = HtmlService.createTemplateFromFile('EmailTemplate'); htmlTemplate.firstName = firstName; htmlTemplate.lastName = lastName; return htmlTemplate.evaluate().getContent(); }
内容的提问来源于stack exchange,提问作者Hưng Nguyễn
相关产品推荐
相关产品推荐

