【问题标题】:Google app script trigger not working谷歌应用脚​​本触发器不起作用
【发布时间】:2015-02-24 16:42:48
【问题描述】:

我有一个发送电子邮件的谷歌应用程序脚本,并且我设置了一个触发器,以便它在每次提交表单时发送电子邮件。问题是触发器在最初的几分钟内工作得很好,但后来即使在输入正确的数据后也是如此。脚本不发送邮件,我必须手动按下脚本的执行按钮。这是我的代码

var EMAIL_SENT = "EMAIL_SENT";
function sendEmailsapp() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;  // First row of data to process
  var numRows = sheet.getLastRow();   // Number of rows to process
  // Fetch the range of cells A2:B3

  var dataRange = sheet.getRange(startRow, 1, numRows,8)
  // Fetch values for each row in the Range.
  var data = dataRange.getValues();
  for (var i = 0; i < data.length; ++i) {
    var row = data[i];
    var emailAddress = row[4];  // First column
    var message = row[5];       // Second column
    var emailSent = row[7];  // Third column
    var money=row[6]
    if (emailSent != EMAIL_SENT) {  // Prevents sending duplicates
      var subject = "You have been registered for follwoing events:-";
      var event;

      MailApp.sendEmail(emailAddress, subject, "Please bring your college id and copy of this mail either in phone or printed paper"+
                        "\n\n"+"Name:-"+row[1]+"\n"+"USN:-"+row[2]+"\n"+"Mobile:-"+row[3]+"\n"+"Event:-"+ message+"\nMoney status:-"+money+"You registered on"+row[0]);
        sheet.getRange(startRow + i, 8).setValue(EMAIL_SENT);


      // Make sure the cell is updated right away in case the script is interrupted
      SpreadsheetApp.flush();
    }
  }
}

代码运行良好。唯一的问题是触发器。

这是我的触发器的图像。 sendEmailsapp 是触发器,而 sendEmailsweb 是另一个触发器,它也遇到同样的问题。

这里是日志

我唯一的问题是触发器没有被触发,它不是与正在发送的电子邮件有关。

【问题讨论】:

    标签: google-apps-script google-sheets triggers google-forms eventtrigger


    【解决方案1】:

    即使脚本正确,我的触发器也不能像你的那样工作。

    解决方案非常愚蠢。我删除了触发器并添加了一个新触发器。完全相同的触发器。

    【讨论】:

    • 你救了我,我已经调试了超过 5 个小时,这就是解决方案。感谢 Allure Web 解决方案!
    • @Asim 乐于助人!如果您认为合适,可以将我的回答作为可接受的解决方案。
    • @AllureWebSolutions -- 发生这种情况有什么原因吗?我遇到了同样的问题。触发器只是在一段时间后继续退出工作。没有押韵或理由。
    • @gotmike 我无法确定问题的原因
    • @JohnCrawford 我不确定它是否以及何时修复。它是用户密集型的,但仅限于开发阶段。使用后,您将无需再次触摸它。
    【解决方案2】:

    我的脚本有这个问题,但我使用时间驱动作为事件。我每分钟都设置它,但它不会做任何事情。使用上面写的日志记录方法,我发现触发器工作正常——我设置的每一分钟。但它实际上不会做与我明确单击“运行”按钮时相同的事情。

    我怀疑它与以下行有关:

    var sheet = SpreadsheetApp.getActiveSheet();
    

    于是我就玩弄了一下,改成:

    var spreadsheet = SpreadsheetApp.openById("INSERT_SPREADSHEET_ID_HERE");
    var sheet = SpreadsheetApp.setActiveSheet(spreadsheet.getSheets()[0]);
    

    它终于奏效了。

    INSERT_SPREADSHEET_ID_HERE 替换为您的电子表格的 ID(来自您的 URL https://docs.google.com/spreadsheets/d/INSERT_SPREADSHEET_ID_HERE/edit#gid=0)。

    getSheets()[0] 开始,0 将是您在该特定电子表格中可能有多个工作表中的第一个。

    我希望这对您有所帮助。

    【讨论】:

    • 知道为什么会这样吗?
    【解决方案3】:

    我愿意打赌问题不是触发器。即使您的代码有效,它也可能是阻止代码的条件部分工作的条件。您可以测试以查看该功能是否实际触发,即使它没有给您预期的结果。在函数后立即添加Logger.log() 语句:

    function sendEmailsapp() {
      Logger.log('sendEmailsapp ran!');
    

    然后查看日志。我不敢相信该功能没有被触发。电子邮件可能没有被发送,但我敢打赌你会得到那个 msg 'sendEmailsapp run!'打印到日志。所以,这是你需要做的第一件事。

    接下来您需要做的是在检索到电子邮件后立即输入Logger.log() 声明:

    var emailSent = row[7];
    Logger.log('value of the email is: ' + emailSent);
    

    然后检查 LOGS 以了解实际返回的值。如果返回的每个值都是“EMAIL_SENT”,则不会发送任何电子邮件。

    我们需要知道实际结果是什么。您需要提供打印到 LOGS 的内容。

    【讨论】:

    • 请看编辑过的问题,我已经放了日志,我有触发器没有被触发的问题。在我手动按下执行按钮后,我收到了电子邮件,之后触发器在几分钟内工作得很好,后来他们不自动执行了。
    • 如果不是代码,那么它一定是谷歌需要修复的某种错误。要报告错误,请确保可以复制问题,以便对其进行测试。 Apps Script Issue Tracker
    • 完成了,希望得到解决,显然很多人都面临这个问题。
    【解决方案4】:

    我发现有用的是在“资源>当前项目触发器”中将通知设置为即时通知。我将其设置为在出错时向我发送电子邮件。该电子邮件包含您可以解决的问题的详细信息:)。

    【讨论】:

      【解决方案5】:

      这是一个老问题,但有一个新的解决方案。请将您的运行时环境更改为 V8。 V8 似乎不会导致此错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-11-09
        • 2020-09-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-21
        • 1970-01-01
        相关资源
        最近更新 更多