我可以在Gmail“已发送”文件夹中看到所有由Google Apps脚本生成的邮件,但我在其他测试帐户中没有收到这些邮件。但是,如果我手动创建一条消息-我会收到它(在测试帐户中)。 你能给我什么主意吗?脚本似乎正常工作。 文档的触发器:事件:“ 来自电子表格-在表单上提交”
第二天更新:
现在我看到这不是关于GAS的问题(我的代码有效),但是现在我的问题已经是关于某个地方的某些设置了...
我已经看到,当我在Google表单的设置中禁用选项“ 仅限于受信任的域中的用户”(https://support.google.com/a/answer/6160020)时-我开始接收由脚本生成的通知... >
您知道如何保持此限制并可以使用onFormSubmit触发器吗?谢谢!
大修改:
对不起,我在提供源代码方面的错。函数 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上添加了脚本权限的屏幕截图):
更新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"
}
答案 0 :(得分:2)
将函数sendNotification(data)
附加到onFormSubmit事件后,参数data
被事件对象替换。