google-apps-script - 来自 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)
您有没有正确设置脚本和/或触发器的想法?当然,如何解决它?
非常感谢你的回答!
解决方案
虽然代码可能工作正常,但我会像这样重写它:
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 触发器触发代码,因此活动页面将始终是左侧的第一张工作表。如果那不是您想要的页面,那么您应该按推荐的重写中所示的名称获取页面。