Gmail 自动回复脚本-如何停止多次回复?
Gmail auto reply script- how to stop multiple replies?
我有一个自动回复脚本来回复我收到的每封电子邮件,并附有附件
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)
}
}
现在,我只想每天回复一次发件人,这意味着它不会将自动回复消息发送给今天已经收到的发件人
我应该怎么做?
您可以使用 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()
将使用 setProperty(key, value) 创建一个值为空字符串 ''
的 email
键
- 对于
reply()
。首先使用 getProperty(key) 获取当前电子邮件日志
- 获取电子邮件的发件人
- 使用 string.includes() 检查发件人是否已存在于电子邮件日志字符串中。如果用户存在,不发送回复
- 如果用户不存在,发送回复并将当前发件人的电子邮件地址附加到电子邮件日志中。
我有一个自动回复脚本来回复我收到的每封电子邮件,并附有附件
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)
}
}
现在,我只想每天回复一次发件人,这意味着它不会将自动回复消息发送给今天已经收到的发件人 我应该怎么做?
您可以使用 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()
将使用 setProperty(key, value) 创建一个值为空字符串 - 对于
reply()
。首先使用 getProperty(key) 获取当前电子邮件日志
- 获取电子邮件的发件人
- 使用 string.includes() 检查发件人是否已存在于电子邮件日志字符串中。如果用户存在,不发送回复
- 如果用户不存在,发送回复并将当前发件人的电子邮件地址附加到电子邮件日志中。
''
的 email
键