我有一個腳本可以逐行發送電子郵件。我遇到的問題是我無法在電子郵件模板中使用當前迭代中的數據。我知道如何從模板中調用函數,但在這種情況下,我無法調用正在評估的函數。如何使用谷歌應用程序腳本和谷歌表格數據一行發送HTML電子郵件
我的解決方案是創建另一個函數,可以再次循環數據並在電子郵件中發送行實例,然後中斷。問題是,現在需要很長時間來確定可以完成一次循環兩遍。
我希望我有道理。
Code.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>
我不能在這裏看到兩個'loops'? – iJay
嗨@iJay對不起,我沒有包含我的完整代碼。我現在更新了它。上面的代碼適用於這種規模的應用,但是一旦我採用這種方法並將其應用於大規模的實際工作,它將超出Google Apps腳本的時間執行限制。 –