GAS:onFormSubmit触发发送邮件问题(但它们位于“已发送”文件夹中)

时间:2019-04-02 14:03:55

标签: google-apps-script

我可以在Gmail“已发送”文件夹中看到所有由Google Apps脚本生成的邮件,但我在其他测试帐户中没有收到这些邮件。但是,如果我手动创建一条消息-我会收到它(在测试帐户中)。 你能给我什么主意吗?脚本似乎正常工作。 文档的触发器:事件:“ 来自电子表格-在表单上提交

第二天更新: 现在我看到这不是关于GAS的问题(我的代码有效),但是现在我的问题已经是关于某个地方的某些设置了...
我已经看到,当我在Google表单的设置中禁用选项“ 仅限于受信任的域中的用户”(https://support.google.com/a/answer/6160020)时-我开始接收由脚本生成的通知...

您知道如何保持此限制并可以使用onFormSubmit触发器吗?谢谢! 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 Developer Hub 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 个答案:

答案 0 :(得分:2)

将函数sendNotification(data)附加到onFormSubmit事件后,参数data被事件对象替换。

Event Object for OnFormSubmit