У меня есть индивидуальная форма html, отправляющая все данные в мой лист Google. С этим кодом - он работает.
var sheetName = 'Ark1'
var scriptProp = PropertiesService.getScriptProperties()
function intialSetup () {
var activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet()
scriptProp.setProperty('key', activeSpreadsheet.getId())
}
function doPost (e) {
var lock = LockService.getScriptLock()
lock.tryLock(10000)
try {
var doc = SpreadsheetApp.openById(scriptProp.getProperty('key'))
var sheet = doc.getSheetByName(sheetName)
var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0]
var nextRow = sheet.getLastRow() + 1
var newRow = headers.map(function(header) {
return header === 'timestamp' ? new Date() : e.parameter[header]
})
sheet.getRange(nextRow, 1, 1, newRow.length).setValues([newRow])
return ContentService
.createTextOutput(JSON.stringify({ 'result': 'success', 'row': nextRow }))
.setMimeType(ContentService.MimeType.JSON)
}
catch (e) {
return ContentService
.createTextOutput(JSON.stringify({ 'result': 'error', 'error': e }))
.setMimeType(ContentService.MimeType.JSON)
}
finally {
lock.releaseLock()
}
}
Но теперь я хочу отправить некоторые данные формы себе по электронной почте. Для этого я создал дополнительный скрипт вроде этого:
function sendEmail(e){
var sheet = SpreadsheetApp.getActiveSheet();
var dataRange = sheet.getRange(sheet.getLastRow(), 1, 1, 16);
var data = dataRange.getValues();
var row = data[0];
var myEmail = "email@mail.com";
var virksomhed = row[1];
var email = row[3];
[...]
var yderlig = row[15];
var subject = "Formular: " + virksomhed;
var message = "Yderlig:" + "\t" + yderlig;
MailApp.sendEmail (myEmail, email, subject, message);
}
При запуске скрипта он работает. Но не работает настройка триггера.
Кто-нибудь знает, что я делаю не так? Это из-за функции doPost для получения данных из моей формы? Я также попытался использовать MailApp.sendEmail внутри функции doPost, следуя советам: https://support.google.com/docs/thread/26659691?hl=en Но это тоже не работает - по крайней мере, так, как я пытался настроить код.
Вот пример кода внутри doPost.
sheet.getRange(nextRow, 1, 1, newRow.length).setValues([newRow])
return ContentService
.createTextOutput(JSON.stringify({ 'result': 'success', 'row': nextRow }))
.setMimeType(ContentService.MimeType.JSON)
var virksomhed = String(newRow[1]);
var myEmail = 'my@email.com';
var subject = 'Forform';
var body = 'Indsendt formular fra' + virksomhed;
MailApp.sendEmail(myEmail, subject, body);
}
catch (e) {
return ContentService
.createTextOutput(JSON.stringify({ 'result': 'error', 'error': e }))
.setMimeType(ContentService.MimeType.JSON)
}
finally {
lock.releaseLock()
}
}
Похоже, MailApp.sendEmail просто игнорируется, когда он находится внутри doPost - может ли это быть? И если да, то нет ли шанса получить уведомление по электронной почте при добавлении новой строки в электронную таблицу?!