-1

我正在开发一个 gmail 插件。当用户填写一些文本输入并单击按钮时,我创建了一个功能来创建回复草稿(有一些 API 调用可以使用这些详细信息创建电子邮件正文)。

function composeReply(e){
            var messageId = e.messageMetadata.messageId;
            var message = GmailApp.getMessageById(messageId);
            ......
            var msg = {
              htmlBody: result['email_content'],
              subject: result['email_subject']
            }
    
            var draft = message.createDraftReply('', msg);
            return CardService.newComposeActionResponseBuilder().setGmailDraft(draft).build();

    }

在上面的功能中,我想检查消息是否已经有回复草稿,然后更新,否则创建一个新的回复草稿或者有没有办法在创建新草稿之前删除现有草稿

4

1 回答 1

1

回答:

您无法使用 执行此操作GmailApp,但您可以使用高级 Gmail 服务获取邮件草稿列表并检查当前邮件是否与任何草稿具有相同的线程 ID。

例子:

使用用户 ID 的特殊me值,您可以进行高级 Gmail 服务调用以获取草稿列表:

var response = Gmail.Users.Drafts.list("me");

根据有关Users.drafts: list的文档,您将在响应中获得一系列users.drafts资源:

{
  "drafts": [
    users.drafts Resource
  ],
  "nextPageToken": string,
  "resultSizeEstimate": unsigned integer
}

然后您可以使用Users.messages: get从当前消息中获取线程 ID:

var threadId = Gmail.Users.Messages.get("me", messageId).threadId

或通过使用GmailApp

var threadId = GmailApp.getMessageById(messageId).getThread().getId()

从这里,您可以遍历草稿,检查线程 ID 是否匹配,如果匹配,则草稿已经存在,您可以将其删除:

try {
  response.drafts.forEach(function(draft) {
    if (draft.message.threadId == threadId) {
      throw draft.id;
    }
  });
}
catch (id) {
  Gmail.Users.Drafts.remove("me", id)
}  
// create new draft here

参考:

于 2020-08-20T10:15:46.840 回答