如何修改Gmail自动回复脚本实现单日仅回复同一发件人一次
改造Gmail自动回复脚本:避免当日重复发送回复
以下是修改后的完整脚本,已集成Properties Service记录当日已发送回复的邮箱地址,确保同一联系人当天不会收到多次自动回复:
function autoReply() { var interval = 5; // 脚本运行间隔(分钟),根据实际设置调整 var wkend = [6, 0]; // 周末:6=周六,0=周日(1=周一,2=周二,3=周三,4=周四,5=周五) var wkendMessage = "Hi, Thank you for your email. I will get back to you during the school week. Have a great weekend!\n"; var wkdayMessage = "Hi! Thank you for your email. I will get back to you during school hours.\n"; var date = new Date(); var day = date.getDay(); var hour = date.getHours(); var minute = date.getMinutes(); // 修复原脚本未定义minute的问题 var today = Utilities.formatDate(date, Session.getScriptTimeZone(), "yyyy-MM-dd"); // 获取当日日期字符串作为记录键 // 从Properties Service获取当日已发送回复的邮箱列表 var sentEmails = UserProperties.getProperty(today) || ""; var sentEmailsArray = sentEmails.split(",").filter(Boolean); // 转为数组并过滤空值 var timeFrom = Math.floor(date.valueOf()/1000) - 60 * interval; var threads = GmailApp.search('is:inbox after:' + timeFrom); for (var i = 0; i < threads.length; i++) { var thread = threads[i]; var sender = thread.getMessages()[0].getFrom(); // 获取发件人信息 var senderEmail = sender.match(/<([^>]+)>/)[1]; // 提取纯邮箱地址(兼容"姓名 <邮箱>"格式) // 检查当前发件人是否已在当日记录中 if (!sentEmailsArray.includes(senderEmail)) { // 根据时段选择回复消息 if (wkend.indexOf(day) > -1 || (day == 5 && hour >= 15 && minute >= 30)) { thread.reply(wkendMessage); } else if (hour < 7 || (hour >= 15 && minute >= 30)) { thread.reply(wkdayMessage); } // 将发件人邮箱加入当日记录 sentEmailsArray.push(senderEmail); UserProperties.setProperty(today, sentEmailsArray.join(",")); } } } function doGet() { return ContentService.createTextOutput(""); }
关键修改说明
- 修复minute变量未定义问题:原脚本直接使用
minute但未声明,添加var minute = date.getMinutes();解决报错。 - 用Properties Service记录已发邮箱:
- 生成当日日期字符串(如
2024-05-20)作为存储键,确保每天的记录独立,次日自动重置。 UserProperties存储用户专属数据,只有你能访问这些记录。
- 生成当日日期字符串(如
- 提取纯邮箱地址:通过正则表达式从发件人信息中提取纯邮箱,避免因姓名不同导致重复记录。
- 发送前检查记录:处理每封邮件前先验证发件人是否已在当日记录中,未记录才发送回复并更新记录。
注意事项
- 脚本运行间隔需与
interval变量保持一致(比如设置每5分钟运行一次,interval就设为5)。 - Properties Service用户属性总存储量不超过100KB,日常使用完全足够。
内容的提问来源于stack exchange,提问作者Jess I
相关产品推荐
相关产品推荐

