Gmail 自动回复脚本 - 如何停止多次回复?
Posted
技术标签:
【中文标题】Gmail 自动回复脚本 - 如何停止多次回复?【英文标题】:Gmail auto reply script- how to stop multiple replies? 【发布时间】:2021-09-28 01:13:50 【问题描述】:我有一个自动回复脚本来回复我收到的每封电子邮件,并附上附件
var file = DriveApp.getFileById('file_id').getAs('application/pdf')
function reply()
var label = GmailApp.getUserLabelByName('new-mail');
var messages = label.getThreads();
for (let mess of messages)
if (mess.getMessageCount() == 1)
mess.reply('attached',
attachments:[file]
);
mess.removeLabel(label);
else mess.removeLabel(label)
现在,我只想每天回复发件人一次,这意味着它不会将自动回复消息发送给今天已经收到的发件人 我该怎么做?
【问题讨论】:
【参考方案1】:您可以使用Properties Service 保存您已回复的所有电子邮件地址。
示例代码:
function initializeLogs()
//Get Script properties
var scriptProperties = PropertiesService.getScriptProperties();
scriptProperties.setProperty('email','');
function reply()
//Get Script properties
var scriptProperties = PropertiesService.getScriptProperties();
var emailLogs = scriptProperties.getProperty('email');
Logger.log(emailLogs);
var label = GmailApp.getUserLabelByName('new-mail');
var messages = label.getThreads();
for (let mess of messages)
if (mess.getMessageCount() == 1)
//get email address of the message sender
var sender = mess.getMessages()[0].getFrom();
if(!emailLogs.includes(sender))
Logger.log(sender);
//sender not yet in the logs, send reply
mess.reply('attached',
attachments:[file]
);
mess.removeLabel(label);
//add sender to the logs
scriptProperties.setProperty('email', emailLogs+sender)
else mess.removeLabel(label)
先决条件:
-
运行一次
initializeLogs()
以使用空字符串初始化email
键。
创建Time-driven trigger 以每天致电initializeLogs()
(旨在每天重置您的回复电子邮件列表
它有什么作用?
-
如前所述,
initializeLogs()
将创建一个 email
键,其值为空字符串 ''
,使用 setProperty(key, value)
为reply()
。首先使用getProperty(key) 获取当前的电子邮件日志
获取电子邮件的发件人
使用string.includes() 检查发件人是否已存在于电子邮件日志字符串中。如果用户存在,请不要回复
如果用户不存在,请发送回复并将当前发件人的电子邮件地址附加到电子邮件日志中。
【讨论】:
如果您遇到有关所提供解决方案的一些问题,请告诉我,以便我进行相应更新 哇!但让我明白,'initializeLogs()' 需要在哪里运行,在同一个脚本中还是在另一个脚本中? 您可以在与您的reply()
相同的脚本中定义initializeLogs()
函数,然后在您的应用程序脚本编辑器中运行一次。之后不要忘记创建一个时间触发事件,以每天自动初始化您的电子邮件列表
我希望“回复”功能应该每分钟运行一次,所以我每分钟都使用触发器,但我希望每天只删除一次日志。那么,如果它在同一个脚本中运行,该属性将每分钟重新启动一次?不? (对不起我的英语)
没有。您可以在同一个脚本中创建多个触发器。您可以参考我在答案中分享的配置。 initializeLogs() 被设置为在每个midnight to 1am
上触发一个Day timer
。因此,您的脚本将有 2 个触发器。 1 个用于您的 reply(),另一个用于您的 initializeLogs()以上是关于Gmail 自动回复脚本 - 如何停止多次回复?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Nodejs 中使用 gmail api 在同一对话中回复电子邮件
如何在 django 中使用 gmail smtp 更改回复和返回路径标头
在没有弹簧身份验证的情况下通过 web-socket 多次回复