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)
  }
}

先决条件:

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

它有什么作用?

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