Google-apps-script不会在onEdit函数中发送电子邮件

Google-apps-script will not send email inside an onEdit function

本文关键字:电子邮件 函数 onEdit Google-apps-script      更新时间:2023-09-26

我有一个脚本,可以在编辑电子表格时发送电子邮件。脚本运行,但 MailApp 语句不起作用。

以下是执行日志:

[15-01-27 14:15:17:951 EST] 电子表格应用程序.getActiveSpreadsheet() [0 秒] [15-01-27 14:15:17:951 EST]Spreadsheet.getActiveRange() [0 seconds] [15-01-27 14:15:17:952 EST]Range.getRow() [0 seconds] [15-01-27 14:15:17:952 EST]Range.getLastRow() [0 seconds] [15-01-27 14:15:17:952 EST]Range.getColumn() [0 seconds] [15-01-27 14:15:17:952 EST]Range.getLastColumn() [0 seconds] [15-01-27 14:15:17:955 EST]开始执行 [15-01-27 14:15:17:969 EST]Logger.log([{"range":{"rowStart":79,"rowEnd":79,"columnEnd":6,"columnStart":6},"source":{},"value":"Xxxx","user":{}}, []]) [0 秒] [15-01-27 14:15:17:969 EST]SpreadsheetApp.getActiveSpreadsheet() [0 seconds] [15-01-27 14:15:18:058 EST]电子表格.getSheets() [0.088 秒] [15-01-27 14:15:18:145 EST]电子表格.getSheets() [0.086 秒] [15-01-27 14:15:18:145 EST]记录器.log([客户行 = 79, []]) [0 秒] [15-01-27 14:15:18:145 EST]Sheet.getRange([79, 6]) [0 seconds] [15-01-27 14:15:18:233 EST]Sheet.getDataRange() [0.087 秒] [15-01-27 14:15:18:324 EST]Range.getValues() [0.091 秒] [15-01-27 14:15:18:327 EST]执行失败:您无权调用 sendEmail(第 21 行,文件"代码")[0.368 秒 总运行时间]

我已经在其他脚本上使用过mailApp.sendEmail,它运行良好。这是附加到电子表格/表单的第二个脚本,第一个脚本还从formSubmit发送电子邮件。我已允许所有触发器和权限。

任何帮助表示赞赏代码如下:

function onEdit(e) {
  Logger.log(JSON.stringify(e));
  var ss = SpreadsheetApp.getActiveSpreadsheet();                
  var sheet1 = ss.getSheets()[0]
  var sheet2 = ss.getSheets()[4];       
  var column = Number(e.range.columnStart);
  if(column != 6){return};
  var Customer = Number(e.range.rowStart);
  Logger.log('Customer row = '+Customer);
  var name = sheet1.getRange(Customer,6);
  var emailArray = sheet2.getDataRange().getValues();
  for (i=0;i < emailArray.length;i++){
    if (name == emailArray[i][0]) { 
     var email_address = emailArray[i][1];
    }
  }                 
  var subject = "Job assignment";
  var body    = "X";
  MailApp.sendEmail(email_address,subject,body);
}

就像另一个答案说你不能从正常的onEdit调用sendMail。

解决方法:将onEdit重命名为"onEditTrigger"等其他名称,然后从"资源"菜单中手动安装触发器。

该链接还解释了不同类型的触发器之间的差异,包括您刚刚发现的限制。在这种情况下,onEdit 是一个简单的触发器,而我的 onEditTrigger 是可安装的触发器

您收到此错误是因为您在onEdit()触发器中调用sendMail。您不能在 onEdit 中调用 URLFetch 或 MailApp 方法。