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 更改回复和返回路径标头

如果我需要从gmail回复到我的php网站该怎么办?

在没有弹簧身份验证的情况下通过 web-socket 多次回复

Microsoft Exchange 外出回复未到达 gmail 地址

使用 gmail api ios 回复邮件