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
相关产品推荐
相关产品推荐

