【发布时间】:2021-10-13 08:49:23
【问题描述】:
问题:
在@Cooper 的出色帮助下,我能够使用 html 模板(“emailEinladung.html”)和收件人列表(“terminBestaetige”)优化我的邮件合并脚本。每个收件人都会收到一封基于 html 模板的个性化电子邮件,只要他/她在第 11 列(因此,“K”)中的状态未设置为“EMAIL SENT”。现在我想为每封发送的电子邮件添加一个或多个附件。
尝试的解决方案:
function terminEinladungVersendenWithAttachments() {
// variables to reference the sheet and its content
const anrede = 2;
const nachname = 3;
const emailAdresse = 5;
const terminTag = 6;
const terminUhrzeit = 8;
const terminURL = 9;
let emailTemp = HtmlService.createTemplateFromFile('emailEinladung');
const sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("terminBestaetigen");
// variables for "Betreff" (in English: "subject") coming from the google Sheet named "Vorlagen"
var wsVorlagen = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Vorlagen");
var betreff = wsVorlagen.getRange("B1").getValue();
const sr = 3;//start row of data
const data = sh.getRange(sr, 1, sh.getLastRow() - sr + 1, 11).getValues();
data.forEach((row, i) => {
if (row[10] == "EMAIL NOT SENT YET") {
emailTemp.anrede1 = (row[anrede]);
emailTemp.nachname1 = (row[nachname]);
emailTemp.emailAdresse1 = (row[emailAdresse]);
emailTemp.terminTag1 = (row[terminTag]);
emailTemp.terminUhrzeit1 = (row[terminUhrzeit]);
emailTemp.terminURL1 = (row[terminURL]);
// including attachements to each email being sent.
var attachment1 = DriveApp.getFileById("[FILE_ID1]")
var attachment2 = DriveApp.getFileById("[FILE_ID2]")
var blob1 = attachment1.getBlob()
var blob2 = attachment2.getBlob()
var htmlMessage = emailTemp.evaluate().getContent();
GmailApp.sendEmail(row[emailAdresse],
betreff, "Dies ist eine Nachricht im HTML-Format. Sie müßen Ihre Email-Software entsprechend einrichten.",
{ htmlBody: htmlMessage, replyTo: "f.dore@skillgainer.de", attachments: [blob1, blob2]});
sh.getRange(i + sr, 11).setValue("EMAIL SENT");//stops emails from being sent again
}
});
}
问题:
我的脚本有什么需要改进的地方吗?如果是,那将是什么改进?您的脚本会是什么样子?
非常感谢您的帮助。
【问题讨论】:
-
我能问一下您期望的
more efficient的详细信息吗?我能问一下您当前的剧本问题吗? -
@Tanaike:感谢您与我们联系。该脚本运行良好,因为它可以向我的谷歌表格列表中的每个收件人发送带有附件的电子邮件。但是一旦列表变长(因此,包含超过 500 个收件人!),脚本的执行时间就会变长。这就是问题的原因:有没有办法重新编写脚本,以便它可以运行得更快?谢谢:)
-
感谢您的回复。在您的脚本中,我认为
blob1和blob2可以排除在循环之外。我认为这样,工艺成本可能会有点低。但是,当发送 500 封电子邮件时,此过程成本会很高。所以我测试了降低这种情况的成本。但不幸的是,我仍然找不到它。这是因为我的技术不好。我对此深表歉意。但是当我找到它时,我想回答它。 -
我想到了一种解决方法来降低发送电子邮件的流程成本。所以我提出了一个答案作为解决方法。你能确认一下吗?这个方法是我的尝试。所以我不确定这是否是您问题的直接解决方案。我为此道歉。所以请测试我提出的脚本。如果这没有用,我很抱歉。
标签: google-apps-script google-sheets gmail