邮件合并和sendEmail完全可以单独执行。如何使它们一起工作?

时间:2019-06-26 15:17:20

标签: email google-apps-script google-sheets mailmerge

为此问题加上开头:我是新手程序员。这是我第一次接触Google Apps脚本,我对执行该操作感到有些茫然。抱歉,是否已经有人问过这个问题。

我已经在Apps脚本中创建了一个邮件合并并对其进行了测试。它按照我的意图起作用。我创建了一个单独的sendEmail脚本,该脚本也可以按预期运行。但是,现在我确定我的代码可以工作,我需要找到一种方法来使Mail Merge和sendEmail脚本协同工作。

概述:

MailMerge脚本从Google表格中读取并收集数据,将Google模板中的{}文本替换为工作表中的数据,并根据上述数据创建唯一消息。

sendEmail脚本从同一工作表中收集数据,但使用模板工作表,替换{}文本,并发送电子邮件而不会出现问题。

我正在尝试做的事情:

获取sendEmail脚本以调用完整的MailMerge文档,并分别发送单独记录的电子邮件。

我已经尝试使用复制粘贴方法将代码从一个项目移动到另一个项目进行测试,尝试在执行后调用引用docFProduct的新变量,并研究了Developers网站以获得帮助无法真正解决我的问题。

代码段,以便任何想要帮助的人都可以看到我在做什么:

邮件合并:

function myFunction() {
  const docMTemplateID = ""; //empty strings to replace with Google App IDs
  const docFProductID = ""; //""
  const gsheetID = ""; //""

  var docMTemplate = DocumentApp.openById(docMTemplateID);
  var docFProduct = DocumentApp.openById(docFProductID);
  var gsheet = SpreadsheetApp.openById(gsheetID).getSheetByName("Data");

  var data = gsheet.getRange(2, 1, gsheet.getLastRow()-1,5).getValues();

  var templateParagraph = docMTemplate.getBody().getParagraphs();

  docFProduct.getBody().clear();

  data.forEach(function(r){
     createMailMerge(r[0], r[1], r[3], r[4], docFProduct, templateParagraph);
 });

function createMailMerge(first, last, team, number, docFProduct, 
templateParagraph){

  templateParagraph.forEach(function(p) {
    var theType = p.getType();
    if(theType == "PARAGRAPH"){
    docFProduct.getBody().appendParagraph(
      p
     .copy()
     .replaceText("{first}", first)
     .replaceText("{last}", last)
     .replaceText("{team}", team)
     .replaceText("{number}", number)
);
  }
    else if(theType == "LIST_ITEM"){
    docFProduct.getBody().appendListItem(
      p
     .copy()
     .replaceText("{first}", first)
     .replaceText("{last}", last)
     .replaceText("{team}", team)
     .replaceText("{number}", number)
).setGlyphType(DocumentApp.GlyphType.BULLET);  
    }

  })

  docFProduct.getBody().appendPageBreak();
}

发送电子邮件:

function sendEmail() {

  var finalProductID = docFProduct();

  SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Data").activate();

  var finalProduct = ScriptApp.getService(finalProductID);

  var templateText = finalProduct.getValue();
  // var templateText = SpreadsheetApp.getActiveSpreadsheet()
  //.getSheetByName("Template")
  //.getRange(1, 1)
  //.getValue();

  for (var i = 2; i <= lr; i++) {

    var cEmail = ss.getRange(i, 3).getValue();
    var cTeamInterest = ss.getRange(i, 4).getValue();
    var cName = ss.getRange(i, 1).getValue();

    var mBody = templateText.getBody();
    var sLine = "Thank you for your interest in " + cTeamInterest +
      "!";
    MailApp.sendEmail(cEmail, sLine, mBody);
  }
}

预期输出:

邮件合并将完成,并在docFProduct Google文档中填充唯一消息。调用sendEmail时,它将把docFProduct中的这些消息作为电子邮件分发给预期的收件人(位于Google表格中的电子邮件),而不是从Google表格中的模板进行编辑。

0 个答案:

没有答案