首页 > 解决方案 > Apps 脚本不使用 MailApp.sendEmail() 发送电子邮件

问题描述

我有代码,当我在“N”列中选择一个复选框时,它应该发送一封电子邮件。它通过 pass1、pass2 和 pass3 警报,但在那之后,什么也没有。当我尝试通过用硬编码的数值替换 selRow 和 selCol 变量来在脚本编辑器中运行脚本时,它起作用了。

function onEdit(e) {

  var selRow = e.range.getRow();
  var selCol = e.range.getColumn();

  var activeWS = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Active');
  var closeWS = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Closed');

  if(activeWS.getRange(selRow, selCol).getValue() == true && selCol == 14){

    SpreadsheetApp.getUi().alert('pass 1');

    // Fetch the email address
    var emailAddress = 'sample@gmail.com';
    var subjPart = activeWS.getRange(selRow, 2).getValue();

    SpreadsheetApp.getUi().alert('pass2');

    // Send Alert Email.
    var message = 'Please visit www.sample.com to view the latest project ready for Cap Out';
    var subject = 'Roofing Project ' + subjPart + 'is ready for Cap Out';
    SpreadsheetApp.getUi().alert('pass3');
    MailApp.sendEmail(emailAddress , subject, message);

    SpreadsheetApp.getUi().alert('Email sent');

  }

}

有任何想法吗?

标签: google-apps-scriptgoogle-sheets

解决方案


为了解决您的问题,我想建议使用可安装的 OnEdit 事件触发器。当您onEdit作为简单触发器运行的功能时,会出现错误MailApp.sendEmail,因为在这种情况下,需要授权。

作为重要的一点,请将函数名称重命名onEdit为其他人。这样,可以避免函数的重复执行。例如,当onEdit作为可安装的 OnEdit 事件触发器安装时,当编辑单元格时,onEdit由简单触发器和可安装触发器两者运行。所以在这种情况下,需要将函数名从onEdit其他人重命名。这可以在这份报告中看到。

参考:


推荐阅读