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

邮件序列脚本故障:无法识别回复并终止发送及记录时间戳

问题诊断

你的脚本当前仅实现了定时发送邮件序列的逻辑,但完全缺失监听客户回复并更新表格的核心功能——脚本没有对接Gmail的收件箱检查,自然无法识别客户是否回复,也就无法触发终止发送和记录时间戳的操作。

解决方案步骤

1. 添加Gmail回复监听函数

创建专门检查客户回复的函数,通过Gmail筛选目标邮件的回复,匹配表格邮箱并更新C列时间戳:

function checkCustomerReplies() {
  var sheet = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/1gRjF4QjLunF5jRE1qGj2hTSlIwyvPsI3h78bacJBDHI/edit#gid=0').getSheetByName('Sheet1');
  var data = sheet.getRange('A2:C').getValues();
  
  // 筛选收件箱中针对我们发送的前两封邮件的回复
  var threads = GmailApp.search('in:inbox is:reply (subject:"First Email Subject" OR subject:"Second Email Subject")');
  
  for (var i = 0; i < threads.length; i++) {
    var messages = threads[i].getMessages();
    var latestReply = messages[messages.length - 1];
    // 提取纯邮箱地址(排除姓名部分)
    var senderEmail = latestReply.getFrom().match(/<(.*)>/)[1];
    
    // 匹配表格中的客户并更新回复时间
    for (var j = 0; j < data.length; j++) {
      var customerEmail = data[j][0];
      var responseRecorded = data[j][2];
      
      if (customerEmail === senderEmail && !responseRecorded) {
        sheet.getRange(j + 2, 3).setValue(new Date(latestReply.getDate()));
        break;
      }
    }
  }
}

2. 设置自动监听触发器

给checkCustomerReplies加定时触发器,确保及时捕获回复:

  • 打开脚本编辑器→左侧「触发器」图标→添加触发器
  • 选择函数:checkCustomerReplies
  • 事件源选「时间驱动」,类型选「小时计时器」,间隔设为「每1小时」

3. 修复原sendEmails脚本的逻辑漏洞

原脚本的邮件发送顺序判断错误(第三封的判断在第二封之前,会跳过第二封),同时优化判断逻辑:

function sendEmails() {
  var sheet = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/1gRjF4QjLunF5jRE1qGj2hTSlIwyvPsI3h78bacJBDHI/edit#gid=0').getSheetByName('Sheet1');
  var data = sheet.getRange('A2:C').getValues();
  
  var subject1 = 'First Email Subject';
  var body1 = 'First Email Body';
  var subject2 = 'Second Email Subject';
  var body2 = 'Second Email Body';
  var subject3 = 'Third Email Subject';
  var body3 = 'Third Email Body';
  
  const ONE_DAY = 24 * 60 * 60 * 1000;
  const THREE_DAYS = 3 * ONE_DAY;
  
  for (var i = 0; i < data.length; i++) {
    var email = data[i][0];
    var sentDate = data[i][1];
    var responseDate = data[i][2];
    
    // 空邮箱或已回复的直接跳过
    if (!email || responseDate) continue;
    
    if (!sentDate) {
      // 发送第一封邮件
      MailApp.sendEmail(email, subject1, body1);
      sheet.getRange(i + 2, 2).setValue(new Date());
      Utilities.sleep(1000);
    } else if (new Date() - sentDate > ONE_DAY && new Date() - sentDate <= THREE_DAYS) {
      // 第一封发送后1-3天无回复,发第二封
      MailApp.sendEmail(email, subject2, body2);
      // 建议新增D列记录第二封发送时间,不要覆盖第一封的时间
      // sheet.getRange(i + 2, 4).setValue(new Date());
      Utilities.sleep(1000);
    } else if (new Date() - sentDate > THREE_DAYS) {
      // 第一封发送后3天以上无回复,发第三封并标记完成
      MailApp.sendEmail(email, subject3, body3);
      sheet.getRange(i + 2, 3).setValue(new Date());
      Utilities.sleep(1000);
    }
  }
}

4. 表格结构优化建议

原表格仅用B列记录发送时间无法区分邮件阶段,建议调整:

  • A列:客户邮箱
  • B列:第一封邮件发送时间
  • C列:客户回复时间戳
  • D列:第二封邮件发送时间
  • E列:第三封邮件发送时间

这样能更清晰追踪每个邮件节点,也方便脚本逻辑判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 09:22:26