尝试发送创建通​​知电子邮件

时间:2017-07-20 20:25:47

标签: google-app-maker

当用户创建包含该条目(或窗口小部件)信息的条目时,我希望收到通知电子邮件。

前:

至: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”之类的东西。

非常感谢任何帮助。

谢谢。

2 个答案:

答案 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);