【问题标题】:In Google Apps Script, how to send an email only one time if condition met在 Google Apps 脚本中,如果满足条件,如何仅发送一次电子邮件
【发布时间】:2016-04-28 22:12:27
【问题描述】:

我正在尝试在某个单元格具有所需值时自动发送电子邮件。我想出了如何不断地做到这一点,即触发器被设置为每天在一天中的某个时间触发,以检查条件并在满足时发送电子邮件。但我希望触发器在发送一次电子邮件后停止工作。我以为我可以这样做:

如果满足条件,我有一个发送电子邮件的功能。如果不满足条件,则会创建一个触发器,它将再次运行该函数一次。以此类推,触发器将继续创建,直到满足条件为止。

这是我写的代码:

var ss = SpreadsheetApp.getActiveSpreadsheet();
var ssName = ss.getName();
var emailAddress = ss.getRange("Tab1!B4").getValue();
var Test1 = ss.getRange("Tab1!B6").getValue();

function SendEmailOnce(){
  if (Test1 <= 10) {
    MailApp.sendEmail({
      to: emailAddress,
      subject: "Sample subject: " + ssName,
      htmlBody: "Sample message<br/> Regards, robot",
    });
    }
    else {
      function createTriggerCheckAgain() {
      ScriptApp.newTrigger('SendEmailOnce')
      .timeBased()
      .after(60 * 1000)
      .create();
      }
    }
}

由于某种原因它不起作用。当我在 Test1 值为 15 时运行该函数,然后将值更改为 5,则不会发送任何电子邮件。

如果它们是分开的,它的部分工作: 1. 运行函数时,如果值为 5,则发送电子邮件。 2. 当值是 5 时,在我运行创建触发器的函数后一分钟后发送电子邮件。

也许有更简单的方法可以做到这一点?我是 JavaScript 的新手。提前感谢您的任何建议。

【问题讨论】:

    标签: javascript google-apps-script triggers google-sheets


    【解决方案1】:

    当您的触发器在 60 秒后运行时,Test1 不再定义,因此您无法检查 undefined 是否为 &lt;= 10。这样做的原因是因为只执行了SendEmailOnce 中的代码,而不是它之外的代码。 emailAddress 变量也是如此。

    您需要将前四行代码包含在您可以调用的函数中,该函数返回 Test1emailAddress 的值,或者将其包含在您的 SendEmailOnce 函数中。

    修改代码:

    function SendEmailOnce(){
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var ssName = ss.getName();
      var emailAddress = ss.getRange("Tab1!B4").getValue();
      var Test1 = ss.getRange("Tab1!B6").getValue();
    
      if (Test1 <= 10) {
        MailApp.sendEmail({
          to: emailAddress,
          subject: "Sample subject: " + ssName,
          htmlBody: "Sample message<br/> Regards, robot",
        });
      }
      else {
        function createTriggerCheckAgain() {
          ScriptApp.newTrigger('SendEmailOnce')
          .timeBased()
          .after(60 * 1000)
          .create();
        }
      }
    }
    

    【讨论】:

    • 感谢您的建议。它没有用,但可能是因为我缺少其他一些东西。但我能够以不同的方式使这一切工作:我只是安排一个触发器,当满足条件时,发送电子邮件,然后删除原始触发器。不过,非常感谢您的努力!
    猜你喜欢
    • 2020-05-10
    • 1970-01-01
    • 1970-01-01
    • 2021-01-14
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-15
    相关资源
    最近更新 更多