-->

Error in sending Email in Google AppMaker

2019-08-03 22:16发布

问题:

I want to send an email notification whenever the user clicks on a button. The button will call sendEmail(widget) function and invoke a client script as follow:

function sendEmail(widget){

  var item = widget.datasource.item;

  google.script.run
    .withFailureHandler(function(error) {
      console.text = error.message;
    })
   .withSuccessHandler(function(result) {
      console.text = 'succeed';
   })
 .sendEmails(item);
}

then it will pass the datasource on item and call sendEmails(item) function from a server script as follows:

function sendEmails(item){  

  var to = item.OwnerEmail;

  var subject = 'Please Review';

  var body = 'hello<br/>my name is Muhammad Alif bin Azali';

  MailApp.sendEmail({
      to: to,
      subject: subject,
      htmlBody: body,
      noReply: true
  });
}

but when I click the button I got following error instead. Any help?

回答1:

Unfortunately, you cannot pass whatever you want as a parameter to your server function. Communication to the server has some limitations:

...most types are legal, but not Date, Function, or DOM element...

...objects that create circular references will also fail...

App Maker's records definitely violate those restrictions.

There are different strategies to handle this limitation, one of them is passing record's key as function's parameter.

// Client script
function sendEmail(widget) {
  var item = widget.datasource.item;

  google.script.run
  ...
 .sendEmails(item._key);
}

// Server script
function sendEmails(itemKey) {
  var item = app.models.MyModel.getRecord(itemKey);
  ...
}


回答2:

Looks like your Mail Body needs to be converted in HTML Body,

Here's the sample

function sendEmails(item){  

  var to = item.OwnerEmail;

  var subject = 'Please Review';

  var body = 'hello<br/>my name is Muhammad Alif bin Azali'; 
  var template = HtmlService.createTemplate(body);
  var htmlBody = template.evaluate().getContent();


  MailApp.sendEmail({
      to: to,
      subject: subject,
      htmlBody: htmlBody ,
      noReply: true
  });
}