Google MailApp html选项出现问题

时间:2017-09-11 23:01:09

标签: javascript google-apps-script

我无法设置脚本来迭代Google电子表格,并向员工发送包含相关报告的行。

在我的测试中电子邮件地址和主题行正在通过电子邮件发送,但根据我尝试的内容,电子邮件是空白的,或者说“#object object”"。

我正在使用Chrome浏览器中的Gmail网站查看电子邮件。

HTML代码还没有任何变量。我仍在努力让它正确地发送电子邮件,然后我会尝试使用scriplets来为报告构建一个表格。

Code.gs

function changeName() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var shA = ss.getSheets()[0];    // Report download
  var shB = ss.getSheets()[1];    // Names & email address
  var alRow = shA.getLastRow();
  var blRow = shB.getLastRow();
  var data = shA.getRange(1, 1, alRow, 14).getValues();    // Array of all employees reports
  var employees = shB.getRange(1, 1, 2, 2).getValues();    // List of employees [i][0] and email address [i][1] in Scorecard data
  for(i=0;i<employees.length;i++){
    var html = HtmlService.createTemplateFromFile('Index').evaluate();
    MailApp.sendEmail(employees[i][1], employees[i][0] + ' Scorecards Test', {htmlbody: html.getContent()});
    Logger.log(html.getContent());
  }
}

的index.html

<body>
<p1>Test 5062</p1>
<table>
<tr>
<td>Test Cell 1</td>
<td>Test Cell 2</td>
<td>Test Cell 3</td>
</tr>
</table>
</body>

当我查看日志时,它会显示HTML文件。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

以下修改怎么样?

来自:

function changeName() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var shA = ss.getSheets()[0];    // Report download
  var shB = ss.getSheets()[1];    // Names & email address
  var alRow = shA.getLastRow();
  var blRow = shB.getLastRow();
  var data = shA.getRange(1, 1, alRow, 14).getValues();    // Array of all employees reports
  var employees = shB.getRange(1, 1, 2, 2).getValues();    // List of employees [i][0] and email address [i][1] in Scorecard data
  for(i=0;i<employees.length;i++){
    var html = HtmlService.createTemplateFromFile('Index').evaluate();
    MailApp.sendEmail(employees[i][1], employees[i][0] + ' Scorecards Test', {htmlbody: html.getContent()});
    Logger.log(html.getContent());
  }
}

致:

function changeName() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var shA = ss.getSheets()[0];    // Report download
  var shB = ss.getSheets()[1];    // Names & email address
  var alRow = shA.getLastRow();
  var blRow = shB.getLastRow();
  var data = shA.getRange(1, 1, alRow, 14).getValues();    // Array of all employees reports
  var employees = shB.getRange(1, 1, 2, 2).getValues();    // List of employees [i][0] and email address [i][1] in Scorecard data
  for(i=0;i<employees.length;i++){
    var html = HtmlService.createTemplateFromFile('Index').evaluate();
    MailApp.sendEmail({
      to: employees[i][1],
      subject: employees[i][0] + ' Scorecards Test',
      htmlBody: html.getContent()
    });
    Logger.log(html.getContent());
  }
}

如果这不起作用,我很抱歉。

答案 1 :(得分:1)

我发现在文件中直接构建html要容易得多:

sql

请记住,您的HTML不必完整。

我经常以这种方式构建电子邮件,并在构建它时禁用sendEmail,然后执行此操作以查看我的结果。

var s='<table>';
s+='Utilities.formatString('<tr><td>%s</td><td>%s</td><td>%s</td></tr>',data[i][0],data[i][1],data[i][2]);
s+='</table>'`;
MailApp.sendMail({to:emailAddress, subject: subj, htmlBody: s});

通过这种方式,我可以看到我在构建它时所做的事情,而无需发送电子邮件。有些人使用记录器,但我喜欢这样做。

通常人们最终想要在发送电子邮件时放一些条件。

  1. 电子邮件地址不为空
  2. 身体不是空的
  3. 电子邮件尚未发送
  4. 您还没有超出剩余的每日配额
  5. 但是,嘿,每个人都不同,你可以选择以任何让你开心的方式去做。