javascript - 如何使用 Google Apps 脚本和 Google Sheet 数据逐行发送 html 电子邮件

标签 javascript email google-apps-script html-email

我有一个脚本可以逐行发送电子邮件。我遇到的问题是我无法在电子邮件模板中使用当前行迭代中的数据。我知道如何从模板调用函数,但在这种情况下我无法调用正在评估的函数。

我的解决方案是创建另一个函数,该函数将再次循环数据并在电子邮件中发送行实例,然后中断。问题是,当我确信可以完成一次时,现在需要很长时间才能循环两次。

我希望我说得有道理。

代码.gs

function sendMail() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('EmailList');

  // get the data as an array
  var data = sheet.getDataRange().getValues();

  // Loop over each line
  for (var i = 1; i < data.length; i+=1) {

    // Check the status of the email
    if (data[i][4] != 'Sent') {
      // get html file content
      var html =     HtmlService.createTemplateFromFile('Index').evaluate().getContent();

      // send the email
      MailApp.sendEmail({
        to: data[i][2],
        subject: 'Hi ' + data[i][0],
        htmlBody: html
          });

      // Set the status to sent
      sheet.getRange(i + 1,5).setValue('Sent');
    }
  } // end for
} // end function sendMail


function getData() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('EmailList');

  // get the data as an array
  var data = sheet.getDataRange().getValues();

  // Loop over each line
  for (var i = 1; i < data.length; i+=1) {

    // Check the status of the email
    if (data[i][4] != 'Sent') {

      var firstName = data[i][0];
      var lastName = data[i][1];
      var email = data[i][2];
      var message = data[i][3];
      break; 
    }
  } // end for
  var returnData = [firstName, lastName, email, message];
  return returnData;
} // end function getData

Index.html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <? var data = getData(); ?>
  </head>
  <body>
    Hi <?= data[0];?> <?= data[1];?> , with email address <?= data[2];?>
    I have a message for you:
    <?= data[3];?> 
  </body>
</html>

最佳答案

您需要阅读此pushing variables to templates

您的 Code.gs

for (var i = 1; i < data.length; i+=1) {

 // Check the status of the email
 if (data[i][4] != 'Sent') {
 var firstName = data[i][0];
 var lastName = data[i][1];
 var email = data[i][2];
 var message = data[i][3];

 var returnData = [firstName, lastName, email, message];
 var html =     HtmlService.createTemplateFromFile('Index');

 html.data = returnData ;
 var template = html.evaluate().getContent();

      // send the email
 MailApp.sendEmail({
   to: data[i][2],
   subject: 'Hi ' + data[i][0],
   htmlBody: template
   });

  // Set the status to sent
  sheet.getRange(i + 1,5).setValue('Sent');
}

您的 Index.html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    Hi <?= data[0];?> <?= data[1];?> , with email address <?= data[2];?>
    I have a message for you:
    <?= data[3];?> 
  </body>
</html>

关于javascript - 如何使用 Google Apps 脚本和 Google Sheet 数据逐行发送 html 电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34914845/

相关文章:

java - 如何在 GWT 应用程序中发送电子邮件

email - Golang net/smtp 通过 tls 发送电子邮件

javascript - Google Apps 脚本将日期插入 GSheets 但更改为未定义

google-apps-script - 既然链接没有反射(reflect)为超链接,如何从单元格中提取链接?

javascript - 如何将变量从客户端传递到服务器并将其保存在服务器中以用于其他功能

javascript - 为什么要使用 npm/yarn 之外的构建工具(例如 grunt/gulp)?

javascript - $.post 和 $.ajax 的区别?

javascript - 如何将 Angular Directive(指令)的链接和 Controller 传递给它

python - 似乎无法通过 Google API (Python) 发送电子邮件

javascript - 防止 Elements Below 弹出窗口响应