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

求助: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 07:51:02