【问题标题】:Authorization required to perform that action执行该操作所需的授权
【发布时间】:2019-12-30 00:17:02
【问题描述】:

我现在有困难。我每天都收到"Authorization required to perform that action"

我使用的触发事件是onFormSubmit。创建触发器后我根本没有编辑代码,但我每天都会收到此错误。当我创建触发器时,谷歌确实要求我批准和允许触发器。即便如此,它还是一直有这个错误。

我可以知道这可能是什么原因吗?

 function onFormSubmit(e) {

    if (e.values && !e.values[1]) { return; }

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Form Responses 1");

  var stage1pressUL = sheet.getRange("AI2").getValue();
  var stage1pressLL = sheet.getRange("AJ2").getValue();

  var recipients = ""+sheet.getRange("AH2").getValues();
  var params = new Array();
  var positivelimit = Number.POSITIVE_INFINITY;
  var negativelimit = Number.NEGATIVE_INFINITY;

  for(var i=0; i<sheet.getMaxColumns(); i++){
   params[i] = e.values[i]; 
  }

  console.log(params);

  var paramsInfo = [
    {
      name: "ap2233stage1press", number: 3, min: stage1pressLL, max: stage1pressUL
    },
    {
      name: "ap2234stage1press", number: 4, min: stage1pressLL, max: stage1pressUL
    },
    {
      name: "ap2235stage1press", number: 5, min: stage1pressLL, max: stage1pressUL
    },
    {
      name: "ap2236stage1press", number: 6, min: stage1pressLL, max: stage1pressUL
    },
    ];

  for(var z=0; z<paramsInfo.length; z++){
    var paramsInfoCheck = paramsInfo[z];
    var template = HtmlService.createTemplateFromFile(paramsInfoCheck.name);
    template[paramsInfoCheck.name] = params[paramsInfoCheck.number];
    template.recorded = params[31];

    if((params[paramsInfoCheck.number] != "-5") && ((params[paramsInfoCheck.number] < paramsInfoCheck.min) || (params[paramsInfoCheck.number] > paramsInfoCheck.max))){

      MailApp.sendEmail(recipients,
    "40K RO Parameter Out of Range Notification",
     "",{htmlBody: template.evaluate().getContent()});
    }
}
}

【问题讨论】:

  • 您是否从脚本编辑器中授权了您的脚本?你能分享你的脚本吗?
  • 是的,我确实通过脚本编辑器授权了它。每当我通过事件页面创建触发器时,它都会请求授权以查看权限。当我收到一条失败通知指示我需要授权代码时,几乎每天都会这样做。会不会是我的收件人由 13 个单独的电子邮件组成?
  • 代码以谁的身份执行?
  • 电子表格和脚本的所有者创建了触发器。即使我不是所有者,我也尝试创建触发器,但仍然无法正常工作。
  • 表单、电子表格、脚本和触发器是否拥有相同的所有者?

标签: google-apps-script


【解决方案1】:

问题出在你的线路

var recipients = ""+sheet.getRange("AH2").getValues();

说明

MailApp.sendEmail() 接受逗号分隔的字符串作为多个收件人的参数。

但是,getValues() 会返回一个嵌套数组而不是字符串,例如

[[user@gmail.com, user2@gmail.com]]

解决方案

getValues() 替换为getValue()getValues()[0][0](如果您的范围包含多个单元格则有意义)。这将返回

user@gmail.com, user2@gmail.com

没有括号。

【讨论】:

  • 我设法找到了一种更简单的方法来解决这个多电子邮件问题。我使用 Google Group 创建了一个虚拟电子邮件。该电子邮件由我要发送给的几个收件人组成。该程序会将电子邮件发送到这个虚拟电子邮件,并将其发送到我设置它发送到的不同电子邮件。经过几天的监控,我没有授权错误了。但是,您的答案可能是一个解决方案,但使用 Google Groups 解决了我的问题。顺便说一句,谢谢。
  • 当然,如果您的收件人列表始终相同,您的解决方案是一个很好的解决方法,但是如果您想从单元格内容中动态选择收件人 - 请记住将 getValues() 替换为 @ 987654330@.
  • 明白了。如果我需要更改收件人,我可以通过 Google 群组添加/删除。非常感谢您强调另一种可能的解决方案。
猜你喜欢
  • 2013-04-29
  • 2020-04-22
  • 2019-04-22
  • 1970-01-01
  • 2021-08-25
  • 2020-05-03
  • 2021-11-29
  • 2012-07-10
  • 2022-12-29
相关资源
最近更新 更多