【问题标题】:Gmail auto reply script- how to stop multiple replies?Gmail 自动回复脚本 - 如何停止多次回复?
【发布时间】: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)
      }
}

现在,我只想每天回复发件人一次,这意味着它不会将自动回复消息发送给今天已经收到的发件人 我该怎么做?

【问题讨论】:

    标签: javascript google-apps-script gmail-api


    【解决方案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)
      }
    }
    

    先决条件:

    1. 运行一次initializeLogs() 以使用空字符串初始化email 键。
    2. 创建Time-driven trigger 以每天致电initializeLogs()(旨在每天重置您的回复电子邮件列表

    它有什么作用?

    1. 如前所述,initializeLogs() 将创建一个 email 键,其值为空字符串 '',使用 setProperty(key, value)
    2. reply()。首先使用getProperty(key) 获取当前的电子邮件日志
    3. 获取电子邮件的发件人
    4. 使用string.includes() 检查发件人是否已存在于电子邮件日志字符串中。如果用户存在,请不要回复
    5. 如果用户不存在,请发送回复并将当前发件人的电子邮件地址附加到电子邮件日志中。

    【讨论】:

    • 如果您遇到有关所提供解决方案的一些问题,请告诉我,以便我进行相应更新
    • 哇!但让我明白,'initializeLogs()' 需要在哪里运行,在同一个脚本中还是在另一个脚本中?
    • 您可以在与您的reply() 相同的脚本中定义initializeLogs() 函数,然后在您的应用程序脚本编辑器中运行一次。之后不要忘记创建一个时间触发事件,以每天自动初始化您的电子邮件列表
    • 我希望“回复”功能应该每分钟运行一次,所以我每分钟都使用触发器,但我希望每天只删除一次日志。那么,如果它在同一个脚本中运行,该属性将每分钟重新启动一次?不? (对不起我的英语)
    • 没有。您可以在同一个脚本中创建多个触发器。您可以参考我在答案中分享的配置。 initializeLogs() 被设置为在每个midnight to 1am 上触发一个Day timer。因此,您的脚本将有 2 个触发器。 1 个用于您的 reply(),另一个用于您的 initializeLogs()
    猜你喜欢
    • 2020-01-12
    • 2016-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多