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

Google Script优化:将审批请求邮件改为线程发送而非单独邮件

如何将Google Script的审批邮件改为线程发送

Gmail 会将主题一致、且包含原邮件 Message-ID 的回复邮件归为同一线程。要实现线程发送,需要完成以下修改:

1. 表格新增列存储Message-ID

在你的表格中新增一列(建议放在第19列,对应脚本里的row[19]),用来保存每个审批请求首次发送邮件的Message-ID,确保后续邮件能关联到同一线程。

2. 修改脚本逻辑

修改后的脚本会在首次发送邮件时保存Message-ID,后续发送(如提醒邮件)时自动关联该ID,实现线程发送:

function sendEmail(){
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;
  var numRows = sheet.getLastRow();
  var numColumns = sheet.getLastColumn();
  var dataRange = sheet.getRange(startRow, 1, numRows-(startRow-1), numColumns);
  var data = dataRange.getValues();
  var complete = "sent";

  for (var i = 0; i < data.length; ++i) {
    var row = data[i];
    var aemail = row[16]; // 审批人邮箱
    var approval = row[13]; // 审批状态列
    var reqrow = row[17]; // 请求行号
    var emailed = row[18]; // 是否已发送标记
    var messageId = row[19]; // 新增列:存储首次邮件的Message-ID

    // 仅处理未审批的请求
    if(approval == ""){
      var sentRange = sheet.getRange(startRow + i, numColumns);
      var email = aemail;
      var subject = "Quotation Request";
      var emailtext = "Hi, " +
        "\n\nYou have quotation request pending your review and approval on row " + reqrow + ".\n" +
        "\nPlease go to the link below for your further action.\n" +
        "\nhttps://docs.google.com/spreadsheets/d/x123/edit?usp=sharing \n" +
        "\nThis is an automated email. Thanks.";

      var emailOptions = {};
      // 如果已有保存的Message-ID,关联到原邮件线程
      if(messageId){
        emailOptions.inReplyTo = messageId;
        emailOptions.references = messageId;
        // 可选:给主题添加提醒标记,Gmail仍会将其归为同一线程
        // subject = "[Reminder] " + subject;
      }

      // 发送邮件并获取返回的邮件对象
      var sentEmail = GmailApp.sendEmail(email, subject, emailtext, emailOptions);
      // 首次发送时,将Message-ID保存到新增列
      if(!messageId){
        sheet.getRange(startRow + i, 19).setValue(sentEmail.getId());
      }

      // 标记为已发送
      sentRange.setValue(complete);
    }
  }
}

关键修改说明

  • 新增messageId变量,读取表格中存储的首次邮件ID
  • 使用GmailApp.sendEmail的高级参数emailOptions,添加inReplyTo和references邮件头,让Gmail识别为同一线程
  • 首次发送邮件时,通过sentEmail.getId()获取Message-ID并写入表格
  • 后续发送提醒时,自动读取已保存的ID,无需手动设置线程关联

内容的提问来源于stack exchange,提问作者Yin Soon Wong

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 01:31:22