当用户创建包含该条目(或窗口小部件)信息的条目时,我希望收到通知电子邮件。
前:
至:groupemail@company.com
主题:项目名称
正文:“User1创建了一个具有”正在进行状态“的新项目。
我试着查看Project Tracker应用程序作为参考,但我还是输了。
我假设我需要创建一个客户端脚本,执行类似下面的功能,并将该功能添加到页面片段中用于创建新条目的“提交按钮”的onClick事件,但它不起作用。
提交按钮onClick事件:
widget.datasource.createItem();
sendEmailCreated_(to, subject, body);
app.closeDialog();
客户端脚本:
function sendEmailCreated_(to, subject, body) {
var widgets = widget.root.descendants;
try {
MailApp.sendEmail({
to: 'groupemail@company.com',
subject: widgets.ProjectName.value,
body: 'User1 has created a new project with the Status of' + widgets.ProjectStatus.value,
noReply: true
});
} catch (e) {
// Suppressing errors in email sending because email notifications
// are not critical for the functioning of the app.
console.error(JSON.stringify(e));
}
}
当函数尝试运行时,说“to”是未定义的,我确定我没有使用正确的选项来处理“widgets.ProjectName.value”之类的东西。
非常感谢任何帮助。
谢谢。
答案 0 :(得分:2)
没有客户端API发送电子邮件。您需要将 'sendEmailCreated _' 函数移动到Server Script并在onCreate模型事件中调用它(从安全角度来看它更可取):
// onCreate model event receives about-to-create record
// Undersocre in the end of the function name means that
// function is private (cannot be called from the client)
sendEmailCreated_(record.to, record.subject, record.body);
...或在创建回调中使用google.script.run(由于您向最终用户公开Mail API,因此安全性较低):
widget.datasource.createItem({
success: function(record) {
google.script.run
.withSuccessHandler(function() {
// TODO: Handle success
})
.withFailureHandler(function(error) {
// TODO: Handle failure
})
.sendEmailCreated(record.to, record.subject, record.body);
// sendEmailCreated - is a server side function.
// It is public (can be called from the client), since
// it doesn't end with underscore
},
failure: function(error) {
// TODO: Handle failure
}
});
如果您不关心安全性和错误处理,那么代码的客户端可以简化为:
widget.datasource.createItem(function(record) {
google.script.run.sendEmailCreated(record.to, record.subject, record.body);
});
有关主题的有用链接:
答案 1 :(得分:1)
除了不使用服务器端脚本,实际上可以访问MailApp(正如Pavel在他的回答中指出的那样),我将指出你为什么会收到这个错误。
你正在使用
sendEmailCreated_(to, subject, body);
来自OnClick事件的,没有定义到,主题或正文。相反,当尝试将某些内容从窗口小部件传递到客户端脚本时,您应该使用以下内容:
doSomething(widget);
(因为您可以从小部件中检查onClick是否允许直接访问当前小部件)
功能就像
function doSomething(widget) {
var variable1 = widget.value;
doSomethingElse(variable1);
}
因此,您需要确保实际已经定义了要发送给函数的参数。
如果您使用了
的内容,那么您的电子邮件示例不会出现这些特定错误(但部分由Pavel解释的不同错误)var to = "example@example.com";
var subject = "Example subject";
var body = "Example text body";
sendEmailCreated_(to, subject, body);