首页 > 解决方案 > 来自 Google 表格的函数 sendEmails():错误消息 = 异常:发送电子邮件失败:没有收件人(第 17 行,文件“SendEmail”)

问题描述

从我的 Google 表格运行函数 sendEmails() 时遇到了一些麻烦。我基于本教程中的脚本:https ://developers.google.com/apps-script/articles/sending_emails它是从 2009 年 5 月开始的,我不知道它是否总是最新的。本教程中的脚本是这样的:

/**
 * Sends emails with data from the current spreadsheet.
 */
function sendEmails() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2; // First row of data to process
  var numRows = 2; // Number of rows to process
  // Fetch the range of cells A2:B3
  var dataRange = sheet.getRange(startRow, 1, numRows, 2);
  // Fetch values for each row in the Range.
  var data = dataRange.getValues();
  for (var i in data) {
    var row = data[i];
    var emailAddress = row[0]; // First column
    var message = row[1]; // Second column
    var subject = 'Sending emails from a Spreadsheet';
    MailApp.sendEmail(emailAddress, subject, message);
  }
}

我已经按照我在 Google 工作表上要做的事情(创建 1 列电子邮件地址,1 列消息)。我的列将自动从 Google 表单中填写。这就是我调整脚本并更改“var numRows = 2;”的原因 通过“var numRows = 1000;” 包括 1000 第一行。

当我手动运行脚本时(单击播放按钮),该脚本“有效”。电子邮件已发送,但我收到一条错误消息: 异常:发送电子邮件失败:没有收件人(第 17 行,文件“SendEmail”)

但是,它不适用于我的触发器。我设置了一个触发器:“SendEmails”/“来自电子表格”/“提交表单”(我想这就是我必须配置的方式?但我正在尝试使用事件类型“编辑时”和“更改时”,看起来同样的问题=不起作用) 我如何设置触发器

当我检查“我的执行”时,我可以看到失败状态:[法语]错误异常:Les paramètres ((class),String,String) ne 通讯员 pas à la signature de la méthode "MailApp.sendEmail"。在 sendEmails(SendEmail:17:13) [我认为是英文]错误异常:参数 ((class), String, String) 与“MailApp.sendEmail”方法的签名不对应。在 sendEmails (SendEmail: 17:13)

您有没有正确设置脚本和/或触发器的想法?当然,如何解决它?

非常感谢你的回答!

标签: google-apps-script

解决方案


虽然代码可能工作正常,但我会像这样重写它:

function sendEmails() {
  var ss=SpreadsheetApp.openById("ssid");
  var sheet=ss.getSheetByName('**********Your sheet name***********');
  var startRow=2; 
  var numRows=2;
  var dataRange=sheet.getRange(startRow, 1, numRows, 2);
  //changed to getDisplayValues
  var data=dataRange.getDisplayValues();
  //changed to for loop
  for (var i=0;i<data.length;i++) {
    var row=data[i];
    var emailAddress=row[0]; 
    var message=row[1];
    var subject='Sending emails from a Spreadsheet';
    MailApp.sendEmail(emailAddress, subject, message);
  }
}

错误消息表明您的数据有问题。MailApp.send 需要三个字符串,错误表明 A 列有问题。它可能是您的电子表格中的某些内容或您阅读它的方式。

所以也许从getValues()to改变getDisplayValues()可能是一种补救措施。

......

for (var i in data) { 当数据对象是标准数组对象时,您还应该避免使用它。如需更完整的解释,请阅读此处

您的电子表格应如下所示:

在此处输入图像描述

另一种可能性是,由于您从 onFormSubmit 触发器触发代码,因此活动页面将始终是左侧的第一张工作表。如果那不是您想要的页面,那么您应该按推荐的重写中所示的名称获取页面。


推荐阅读