使用 MailApp.sendEmail(emailAddress, subject, message) 时出现问题;使用新的 Chrome V8 运行时

problem using MailApp.sendEmail(emailAddress, subject, message); with the new Chrome V8 runtime

我正在 运行 宁一些 Google Apps 脚本,它与 Google Sheet 交互,提取和比较一些值,因为 sheet 是如果超过某些标准,则会更新并发送电子邮件。它已经稳定运行了一年多,但最近停止了,我发现问题出在新的 Chrome V8 运行time 环境中。如果我 运行 遗留 java 环境 – 它可以工作,没问题。

该脚本会寻找一个条件,在该条件下超过了在价差sheet 中设置的阈值——如果是这样,它应该发送一封电子邮件。我已经证明该脚本可以识别超出阈值的情况,它可以从 spreadsheet 写入和读取值,并且可以从单元格读取和写入电子邮件地址。

看来MailApp.sendEmail(emailAddress, subject, message); 不起作用。非常感谢任何建议。

脚本摘录如下:

var DP_THRESH1 = doc.getSheetByName("DASHBOARD").getRange("L11"); //THRESHOLD
var DP_THESHOLD1 = DP_THRESH1.getValue();
var DP_SPREAD1 = doc.getSheetByName("DASHBOARD").getRange("H11"); //CALCULATED SPREAD
var DP_LASTSPREAD1 = DP_SPREAD1.getValue();
if (DP_LASTSPREAD1 < DP_THESHOLD1){
  // SET TO ZERO IS READY TO EMAIL STATE - THRESHOLD NOT EXCEEDED
  doc.getSheetByName("mailSheet").getRange('N2').setValue('0');
}
//EMAIL STATUS = 0 = READY TO EMAIL - 1 = HAVE SENT EMAIL
var EMAIL_status = doc.getSheetByName("mailSheet").getRange("N2"); 
var EMAIL_oneshot = EMAIL_status.getValue();
      
if ((DP_LASTSPREAD1 > DP_THESHOLD1) && (EMAIL_oneshot == 0)) {
  // IF THRESHOLD EXCEEDED AND NO EMAIL SENT
  doc.getSheetByName("mailSheet").getRange('N2').setValue('1'); 
  // Fetch the email address
  var emailRange =  doc.getSheetByName("mailSheet").getRange("B2");
  var emailAddress = emailRange.getValues();
  // Send Alert Email.
  var message = 'measured value is ' + DP_LASTSPREAD1;
  var subject = 'Possible Choke Alert';
  MailApp.sendEmail(emailAddress, subject, message);
}  

我不熟悉 Google Apps 脚本,但我可以猜测一下:

getValue returns 单个值,getValues returns 值的二维数组。在行 var emailAddress = emailRange.getValues() 中,如果您从后者切换到前者,是否可以正常工作?

问题:

该脚本在 Rhino 运行时运行,因为在调用 sendEmail 时脚本在幕后(如果二维数组只有一个元素)将数组转换为字符串。在 V8 中似乎不是这样,你必须提供一个字符串。有趣的是,此行为已在 Issue Tracker.

中报告

无论如何,如果您想从单个单元格中获取信息,您应该使用 getValue() 而不是 getValues()

参考: