Отправка электронной почты из Служб Google
Я запутался в своем настроенном скрипте для Служб Google (особенно для таблиц Google).
Я воспроизвел урок из https://developers.google.com/apps-script/articles/sending_emails (см. "Раздел 2: Улучшения"), но он не работает: скрипт повторно отправляет все электронные письма один раз снова, даже если ячейка уже содержит "EMAIL_SENT" (вместо этого я использую "NOTIFICATION_SENT").
Вот источник настроенного скрипта:
var NOTIFICATION_SENT = "NOTIFICATION_SENT";
function NotifyNewBooking() {
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 2; // First row of data to process
var numRows = 47; // Number of rows to process
// Fetch the range of cells A2:N48
var dataRange = sheet.getRange(startRow, 1, numRows, 17)
// Fetch values for each row in the Range.
var data = dataRange.getValues();
for (var i = 0; i < data.length; ++i) {
var row = data[i];
var emailAddress = "natalya@berdyanskaya56.ru";
var subject = "Строка № " + row + ": " + "новое бронирование";
var message = "Уведомление о новом бронировании!" + "\n" + "\nДанные нового бронирования:" + "\n" + "\nЗаезд: " + row[0] + "\nВыезд: " + row[1] + "\nНомер: " + "«" + row[2] + "»" + "\nТип размещения: " + row[3] + "\nЦена за ночь: " + row[4] + " руб." + "\nВнесённый депозит: " + row[8] + " руб." + "\n" + "\nИмя и фамилия гостя: " + row[5] + "\nМобильный телефон: " + row[6] + "\nЭлектронная почта: " + row[7] + "\n" + "\nПримечание: " + row[11] + "\n" + "\n* Просмотреть список всех бронирований можно тут: " + "www.bitly.com/b56guests";
var notificationSent = row[17]; // The column where notification status is put
if (notificationSent != NOTIFICATION_SENT) { // Prevents sending duplicates
MailApp.sendEmail(emailAddress, subject, message, {name: "Мини-гостиница Бердянская 56", replyTo: "ruslan@berdyanskaya56.ru"});
sheet.getRange(startRow + i, 17).setValue(NOTIFICATION_SENT);
// Make sure the cell is updated right away in case the script is interrupted
SpreadsheetApp.flush();
}
}
}
Цель здесь - отправлять электронные письма, только если ячейки в столбце row[17]
не содержит NOTIFICATION_SENT
, Пожалуйста, дайте мне сильный совет, как это исправить.
Огромное спасибо заранее!
1 ответ
Проблема в этой строке: var notificationSent = row[17];
Попробуйте отладить код, зарегистрировав значения Logger.log(row[17])
а также Logger.log(row[16])
и вы получите undefined
в строке [17] и NOTIFICATION_SENT
в строке [16].
Зачем? Потому что Диапазон. getValues возвращает двумерный массив, а индексы массива начинаются с 0.
Это также указано в документации.
Помните, что, хотя индекс диапазона начинается с 1, 1, массив JavaScript будет индексироваться из [0][0].
Так что в то время как строка в порядке, потому что вы инициализировали i в 0 в вашем цикле for.
for (var i = 0; i < data.length; ++i) {
var row = data[i];
....
Вы должны вычесть 1 из индекса при получении столбца.
var notificationSent = row[17 - 1];
потому что если у вас есть 17 столбцов, первое значение в массиве будет начинаться с индекса 0 до 16.