Google Apps 脚本正在替换内容,而不是将文本附加到草稿内容

Google Apps Script is replacing content instead of appending text to the draft contents

这是我的尝试,但是,我无法更新草稿 -- 我希望在保留草稿内容、收件人和主题的同时添加文本 "This Message has been verified"。

function dlpValidate(e) {
  var toEmails = e.draftMetadata.toRecipients, ccEmails = e.draftMetadata.ccRecipients, bccEmails = e.draftMetadata.bccRecipients, domains = [], uniqueDomains = [];
  var allEmails = toEmails.concat(ccEmails, bccEmails); 
  for (var i = 0; i < allEmails.length; i++) {
    domains[i] = allEmails[i].split("@").pop().split(".")[0];
  }  
  uniqueDomains = domains.filter(listUnique);
  if(uniqueDomains.length == 1 || (uniqueDomains.length <= 2 && uniqueDomains.indexOf("verasafe") != -1)) {
    var draft = GmailApp.getDrafts()[0];
    draft.update(toEmails,"test","This Message has been verified");
    return [notifyYes(uniqueDomains)];
  }
}

@param {event} e 是撰写触发器事件对象,在选择撰写操作时触发的撰写触发器函数内:Reference

这是在主函数中调用的函数listUnique

function listUnique(value, index, self) { return self.indexOf(value) === index; }

正如目前编写的那样,该函数完全替换了草稿内容,而不是附加它。此外,它还会删除 CC and/or BCC 字段下的收件人,并将它们放在 TO 字段中。

GmailDraft.update 替换草案 中的所有当前内容,如 the official documentation 中所述。您必须重新设置所有内容(主题、内容、收件人、抄送、密件抄送等)。

因此,如果您只想将消息 "This Message has been verified" 附加到内容中,而您希望保持其他所有内容不变,您应该首先检索有关当前草稿的数据,然后附加您想要的任何内容这些数据,最后用附加数据更新草稿。

您可以按照以下方式进行操作:

function dlpValidate(e) {
  var toEmails = e.draftMetadata.toRecipients, 
      ccEmails = e.draftMetadata.ccRecipients, 
      bccEmails = e.draftMetadata.bccRecipients, 
      domains = [], 
      uniqueDomains = [];
  var allEmails = toEmails.concat(ccEmails, bccEmails); 
  for (var i = 0; i < allEmails.length; i++) {
    domains[i] = allEmails[i].split("@").pop().split(".")[0];
  }  
  uniqueDomains = domains.filter(listUnique);
  if(uniqueDomains.length == 1 || (uniqueDomains.length <= 2 && uniqueDomains.indexOf("verasafe") != -1)) {
    var draft = GmailApp.getDrafts()[0];
    var message = draft.getMessage();
    var subject = message.getSubject();
    var content = message.getBody();
    // Append "This Message has been verified" to the current draft body
    content = content.concat("<div>This Message has been verified</div>");
    var options = { // Set cc, bcc and body for the updated draft
      bcc: bccEmails.join(","), 
      cc: ccEmails.join(","),
      htmlBody: content
    }
    draft.update(toEmails, subject, content, options); // Update draft
    return [notifyYes(uniqueDomains)];
  }
}

参考

希望对您有所帮助。