проблема с использованием MailApp.sendEmail (emailAddress, subject, message); с новой средой выполнения Chrome V8 - PullRequest
0 голосов
/ 15 апреля 2020

Я использую скрипт Google Aps, который взаимодействует с листом Google, который извлекает и сравнивает некоторые значения при обновлении листа и отправляет электронное письмо, если превышены определенные критерии. Более года он работал без сбоев, но недавно остановился, и я обнаружил, что проблема в новой среде выполнения Chrome V8. Если я запускаю устаревшую среду java - она ​​работает, без проблем.

Сценарий ищет условие, при котором превышается пороговое значение, установленное в электронной таблице, - если это так, он должен отправить электронное письмо. Я доказал, что сценарий определяет условие превышения порога, что он может записывать и читать значения из электронной таблицы и что он может читать и записывать адрес электронной почты из ячейки.

Похоже, что MailApp.sendEmail ( адрес электронной почты, тема, сообщение); не работает Любые предложения с благодарностью.

Сценарий выдержки выглядит следующим образом:

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);
}  

Ответы [ 2 ]

1 голос
/ 15 апреля 2020

Я не знаком со скриптом Google Apps, но могу предположить:

getValue возвращает одно значение, getValues возвращает двумерный массив значений. В строке var emailAddress = emailRange.getValues(), если вы переключаетесь с последнего на первый, это заставляет его работать?

0 голосов
/ 15 апреля 2020

Проблема:

Скрипт работает во время выполнения Rhino, потому что за кулисами (если в двумерном массиве есть только один элемент) скрипт преобразует массив в строку, когда звонит sendEmail. Похоже, что это не так в V8, и вы должны предоставить строку. Интересно, что об этом поведении уже сообщалось в Issue Tracker .

В любом случае вам следует использовать getValue() вместо getValues(), если вы хотите получать информацию из одной ячейки .

Ссылка:

...