【问题标题】:Google-apps-script will not send email inside an onEdit function [duplicate]Google-apps-script 不会在 onEdit 函数中发送电子邮件 [重复]
【发布时间】:2015-01-27 04:30:01
【问题描述】:

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

这里是执行日志:

[15-01-27 14:15:17:951 EST] SpreadsheetApp.getActiveSpreadsheet() [0 秒] [15-01-27 14:15:17:951 EST] Spreadsheet.getActiveRange() [0 秒] [15-01-27 14:15:17:952 EST] Range.getRow() [0 秒] [15-01-27 14:15:17:952 EST] Range.getLastRow() [0 秒] [15-01-27 14:15:17:952 EST] Range.getColumn() [0 秒] [15-01-27 14:15:17:952 EST] Range.getLastColumn() [0 秒] [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 秒] [15-01-27 14:15:18:058 EST] Spreadsheet.getSheets() [0.088 秒] [15-01-27 14:15:18:145 EST] Spreadsheet.getSheets() [0.086 秒] [15-01-27 14:15:18:145 EST] Logger.log([客户行 = 79, []]) [0 秒] [15-01-27 14:15:18:145 EST] Sheet.getRange([79, 6]) [0 秒] [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);
}

【问题讨论】:

  • 脚本运行,但不完全。它在第 21 行失败。错误表明这是调用 sendEmail 函数的权限问题。 sendEmail 函数是否在同一个项目中?我们需要看一些代码。
  • 上面添加的代码,不知道为什么有些是代码格式,其余的不是,对不起
  • 作为以下答案的补充,请在此处阅读有关简单触发限制的文档:developers.google.com/apps-script/guides/triggers
  • 谢谢大家,我现在有另一个错误,我在电子邮件中收到了未定义的错误。似乎 var name = sheet1.getRange(Customer,6);没有获取值来馈送数组?
  • 好的,感谢所有提供帮助的人。我已经解决了第二个问题,使用sheet1.getSheetValues(Customerrow,2,1,1); 选择正确的值并提供数组和电子邮件

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


【解决方案1】:

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

修复:将 onEdit 重命名为“onEditTrigger”和manually install 触发器从“资源”菜单。

该链接还解释了不同类型的触发器之间的区别,包括您刚刚发现的限制。在这种情况下,onEdit 是 simple trigger 而我的 onEditTrigger 是 installable trigger

【讨论】:

  • 这对我来说效果很好。我想知道如果您以编程方式复制电子表格文件,是否会复制可安装触发器?
  • 似乎很容易尝试 :) 我怀疑它们被复制了。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-05
    • 2016-11-28
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多