GAS: проблема с триггером onFormSubmit при отправке сообщений (но они находятся в папке «отправлено») - PullRequest
1 голос
/ 02 апреля 2019

Я вижу все сообщения, которые были сгенерированы скриптом Google Apps в папке "Gmail", но я не получил их в другом тестовом аккаунте. Но если я создаю сообщение вручную - я получаю его (в тестовом аккаунте). Не могли бы вы дать мне какие-либо идеи, что не так? Похоже, что скрипт работает правильно. Триггер документа: событие: « из таблицы - при отправке формы »

Обновление на следующий день: Теперь я вижу, что это еще не вопрос о ГАЗЕ (мой код работает), но теперь мой вопрос уже о некоторых настройках где-то ...
Я видел, когда я отключил опцию " Ограничить пользователей в и доверенных доменах " (https://support.google.com/a/answer/6160020) в настройках формы Google - я начал получать уведомления, генерируемые скриптом ...

Знаете ли вы, как сохранить это ограничение и заставить работать триггер FormSubmit? Спасибо! Google Form's Settings: Restrict Users

Большой Редактировать:

Извините, я виноват в предоставлении исходного кода. Функция sendNotification (data) вызывается не напрямую как обработчик события onFormSubmit, а изнутри onFormSubmit (event) функция, которую я использую как обработчик события onFormSubmit. В этом случае функция sendNotification (data) получила мой собственный подготовленный объект данных, а не объект события, который получил функцию обработчика события.

//onFormSubmit Event Handler:
function onFormSubmit(event) {
  ...
  sendNotification(data) 
}

/**
 * Sending a HTML Notification Message to all recipients in the Email List
 */
function sendNotification(data) {
  try {

    Logger.log("-------------------------------- in sendNotification") 

    var template = HtmlService.createTemplateFromFile('NotificationEmail');
    template.data = data;
    var htmlOutput = template.evaluate();
    var htmlMessage = htmlOutput.getContent() 


    var notifySheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Notifications");
    var notifyRange = notifySheet.getDataRange(); 

    var addresses = notifyRange.getValues(); 
    addresses.shift(); //skip Headers (first row)

    Logger.log("addresses: " + addresses);


    //Loop through all Addresses:
    for (i in addresses) {
      var row = addresses[i];
      var address = row[0]; //1st column  <-----
      if(address) {
        Logger.log("address: " + address);

        //MailApp.sendEmail(emailAddress, subject, message);            
        MailApp.sendEmail({
          name: "notification",
          to: address,
          subject: data.emailTitle,
          htmlBody: htmlMessage,
          //noReply: true,
          inlineImages: {
            logoImage: data.logoImage
          }
        });

      }    
    }
    Logger.log("-------------------------------- end of sendNotification")

  } catch (err) {
    Logger.log(err.toString());
  }
}

Обновление (добавлен снимок экрана с разрешениями сценария в центре разработчика Suite https://script.google.com): enter image description here

Обновление 2 (Отредактировано) Исходный код исходного сообщения:

    Delivered-To: admin@g<company_name>.com
    Received: by ..... with SMTP id .....;
            Tue, 2 Apr 2019 07:20:12 -0700 (PDT)
    DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;.....
    X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;........
    X-Google-Smtp-Source: ........
    MIME-Version: 1.0
    X-Received: by ...... with SMTP id ......; Tue, 02 Apr 2019 07:20:12 -0700 (PDT)
    Message-ID: <000000000000.......@google.com>
    Date: Tue, 02 Apr 2019 14:20:12 +0000
    Subject: ......
    From: ...... admin@g<company_name>.com
    To: ....@gmail.com
    Content-Type: multipart/related;

Обновление 3

function onFormSubmit(event) {
  try {

    Logger.log("onFormSubmit trigger runs-------------------------------------")

    //PREVENT AN ERROR: Service invoked too many times in a short time: exec qps. Try Utilities.sleep(1000) between calls.
    Utilities.sleep(300);

    var submitterEmail = Session.getEffectiveUser().getEmail();
    var submitRow = event.range.rowStart;
    var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = spreadsheet.getSheetByName("Form Responses 1");

    ...

    //exec Log:
    var execLog = spreadsheet.getSheetByName("ExecLog");
    var execLastRow = execLog.getLastRow();

    //setCellValue(sheet, row, col, newValue) 
    setCellValue(execLog, execLastRow+1, 1, JSON.stringify(event));

    ....
    var data = { ... }

    //Sending HTML Messages:
    sendSubmitterConfirmation(data); //Submitter's confirmation
    sendNotification(data); //Notifications
    sendRequestToApprove(data); //Requests to approve

  } catch (err) {
    Logger.log(err.toString());
  }
}

Лист «ExecLog» содержит исходный код объекта события:

{
  "authMode": {},
  "values": [
    "4/2/2019 14:00:24",
    "admin@<COMPANY_NAME>.com",
    "test",
    "test",
    "test",
    "01-01-01",
    "test@test.com"
  ],
  "namedValues": {
    QUESTIONS.....
  },
  "range": {
    "columnStart": 1,
    "rowStart": 2,
    "rowEnd": 2,
    "columnEnd": 10
  },
  "source": {},
  "triggerUid": "XXXXX"
}

1 Ответ

2 голосов
/ 03 апреля 2019

Когда функция sendNotification(data) присоединена к событию onFormSubmit, параметр data заменяется объектом события.

Объект события для OnFormSubmit

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