Apps 脚本 Gmail createDraftReplyAll 错误的收件人:将我作为收件人而不是其他方

Apps Script Gmail createDraftReplyAll wrong recipient: Puts me as recipient instead of other party

我有一个用于创建新 Gmail 草稿的工作脚本,但是当我在现有线程中使用 createDraftReplyAll 时,它会将线程最后一封电子邮件的发件人作为草稿的收件人。

所以如果我发了最后一封邮件,我就成了回复的收件人,对方是抄送的。如果其他人写了最后一封电子邮件,他们就是收件人,但我会被抄送。与在 Gmail 中手动创建草稿(即通过单击“全部回复”)相比,这是不正常的行为,在这种情况下,收件人将始终是另一方。

此处显示(运行 下面脚本的结果):

在 Gmail 中单击“全部回复”的正常行为:

这是我用来创建草稿的功能。已通过主题和原始消息日期找到该主题:

  function createDraftReplyInThread(emailThread, htmlTemplateFileName) {
  Logger.log(">> IN createDraftReplyInThread");
  Logger.log("htmlTemplateFileName: " + htmlTemplateFileName);

  if (emailThread) {
    let emailTo = emailThread.to;
    Logger.log('Thread TO: ' + emailTo);
    let threadMessages = emailThread.getMessages();
    let messageCount = threadMessages.length;
    let lastMessage = threadMessages[messageCount - 1];

    let htmlTemplate = HtmlService.createTemplateFromFile(htmlTemplateFileName);
    let htmlBodyContent = htmlTemplate.evaluate().getContent();
    var myReplyID = lastMessage.createDraftReplyAll(
      "Plain text for draft reply (not used)",
      {
        'htmlBody': htmlBodyContent
      }).getId();

    Logger.log(`Draft created in thread; myReplyID: ${myReplyID}`);  // just to show it's executed okay

    return;
  }

  return null;
}

最好忽略这一点,但我确实尝试使用有限的现有更新方法来复制内容、更改收件人并在新草稿中恢复内容(纯属猜测)。请注意, draft.update() 确实可以更改收件人,但它还需要一个 Message 参数,但我未能开始工作。可能吗?

// based off Whosebug: 
function _sandbox_draftModify() {

  var draft = GmailApp.getDrafts()[0];
  var draftAsMessage = draft.getMessage();
  var recipients = draftAsMessage.getTo();
  var subject = draftAsMessage.getSubject();
  var origRaw = draftAsMessage.getRawContent();
  var newRaw = origRaw.replace("new draft", "old draft");
  var newRawB64 = Utilities.base64EncodeWebSafe(newRaw, Utilities.Charset.UTF_8);

  var emailTo = 'recipientsemail@gmail.com';  
  Logger.log(`recipients: ${recipients}`);
  Logger.log(`subject: ${subject}`);
  Logger.log(`newRaw: ${newRaw}`);

  draft.update(emailTo, subject, { message: { raw: newRawB64 } });

  var draftNew = GmailApp.getDrafts()[0];
  userId = 'me';
  Gmail.Users.Drafts.update({ message: { raw: newRawB64 } }, userId, draftNew.getId());
  Logger.log("Done");
}

最后,我需要的是能够为现有线程创建电子邮件草稿(我已经可以做到),但具有正确的收件人,然而,这可能会实现。

这似乎是 createDraftReplyAll 方法的预期行为。

如果您在此处查看文档页面:

createDraftReplyAll(body)

Creates a draft message replying to the sender of the last message in this thread, using the reply-to address and all recipients of this message. The size of the email (including headers) is quota limited.

但是,如果您想要复制 UI 行为的功能,可以在问题跟踪器上提交功能请求。可以在此 link 找到该表格,并确保填写所有必要信息。

参考