【发布时间】:2015-12-18 19:03:36
【问题描述】:
目标
根据某人是否已收到电子邮件来发送 HTML 电子邮件,并根据 google 电子表格中适用行中单元格的内容有条件地向该电子邮件添加某些链接。
背景
我正在使用一个独立的脚本(因为这只是其中的一个函数,它实际上可以独立于自身)执行并且大多数时候会发送一封电子邮件。我设置了我的测试,以便满足发送两封电子邮件的条件,但是,大多数时候只发送一封。我最初认为这是需要成功处理程序的问题,因为我调用了 createTemplateFromFile() 方法并在三行之后对其进行评估,然后发送电子邮件。它是 for 循环的一部分,所以我预计会收到两封电子邮件。我的电子表格上有三行测试数据,但第一行是标题行。
代码
代码.gs
function sendForms () {
/*this function will determine which people are new entries and then send them an email with a link to the form.
the email should include a short code which will be used as a verification*/
var masterSS = SpreadsheetApp.openById("1GxM-NGk4kLOwaxFygJMfvafiL0lJmOCbCNsbmDmfJbU");
var masterSheet = masterSS.getSheets()[0];
var masterRange = masterSheet.getDataRange();
var masterData = masterRange.getValues();
var startRow = 1;
for (var i = 1; i < masterData.length; i++) {
var row = masterData[i];
var emailAddress = row[2];
var routineContact = row[5];
var requireDrive = row[6];
var compCheck = row[7];
var affidavit = " ";
if (routineContact != "SENT" && routineContact != "RECEIVED" && routineContact != "No") {
var affidavit = "<li>Form: <a href='www.duckduckgo.com'>Affidavit of Compliance with PA Background Checks</a> Verification Code: 169827C9</li>";
masterSheet.getRange(startRow + i, 6).setValue("SENT");
}
var motorVehicleUsage = " ";
if (requireDrive != "SENT" && requireDrive != "RECEIVED" && requireDrive != "No") {
var motorVehicleUsage = "<li>Form: <a href='www.yahoo.com'>Motor Vehicle Agreement</a> Verification Code: 13444C9</li>";
masterSheet.getRange(startRow + i, 7).setValue("SENT");
}
var workersCompForm = " ";
if (compCheck != "SENT" && compCheck != "RECEIVED") {
var workersCompForm = "<li>Form: <a href='www.google.com'>Workers Compensation</a> Verification Code: 13589C9</li>";
masterSheet.getRange(startRow + i, 8).setValue("SENT");
}
if (motorVehicleUsage != " " && affidavit != " ") {
//var html = function() {
var sendingDate = new Date();
var formatSendingDate = Utilities.formatDate(sendingDate, "GMT-05:00", 'DD');
masterSheet.getRange(startRow + i, 10).setValue(formatSendingDate);
var subject = "Additional Onboarding Forms";
var template = HtmlService.createHtmlOutputFromFile('Initial Form Email Message').getContent();
template.workersCompForm = workersCompForm;
template.motorVehicleUsage = motorVehicleUsage;
template.affidavit = affidavit;
var html = template.evaluate().getContent();//original
MailApp.sendEmail(emailAddress, subject, "Requires HTML", {htmlBody:html});
}
}
}
html文件sn-p
<ul>
<?!= workersCompForm ?><?!= motorVehicleUsage ?><?!= affidavit ?>
</ul>
研究与解决方案?
根据我从similar post about passing a variable into an HTML File 中读到的内容,我认为这可能是一个递归问题,但它并没有完全回答我的问题。我阅读了另外两个关于递归的资料(iteration and recursion 和 Java and recursion),但我并没有刻意尝试创建递归函数,至少我不认为是因为我几乎不理解它。
执行日志显示使用 setValues() 方法更新的第二行和第三行的值,这是我想要的行为,但大多数时候只显示一个正在发送的电子邮件实例。电子邮件为收件人正确评估,但只发送一封电子邮件,在这种情况下,我正在寻找每行一封。
我真的不知道如何解决它。我在想我需要将电子邮件的发送放入一个单独的函数中并将参数传递给它。如果我这样做,我不确定参数是什么,因为我认为使用“return”会结束函数。
我的另一个想法是我是否必须为我想在 HTML 文件上打印的三个变量中的每一个创建一个函数,但将它们直接放在 HTML 文件中。
我真的很想了解我的代码发生了什么,我也想修复它,但要了解为什么修复会起作用。
我添加了我的电子表格和脚本的可查看副本。不过,我使用的是电子表格中的实际电子邮件地址。但这些是我正在测试的条件,只给了我一封电子邮件。
【问题讨论】:
标签: email google-apps-script google-sheets google-apps