Отправить электронное письмо из скрипта Google - триггер не работает - PullRequest
0 голосов
/ 26 мая 2020

У меня есть индивидуальная форма 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 - может ли это быть? И если да, то нет ли шанса получить уведомление по электронной почте при добавлении новой строки в электронную таблицу?!

1 Ответ

0 голосов
/ 26 мая 2020

Вы должны опубликовать sh новую версию веб-приложения, чтобы оно использовало ваш измененный код с обратным вызовом doPost. В редакторе сценариев go в ресурсы, Publi sh Web app и publi sh новую версию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...