撰写邮件草稿

在插件中,您可以创建 小部件,这些小部件具有关联的 操作。您可以使用操作来撰写新的电子邮件草稿,并可以选择使用在插件界面中输入的信息或来自打开的消息的信息来填充草稿。例如,您可以在插件的消息界面中添加一个按钮,该按钮可以创建对当前打开的消息的回复,并使用插件中的信息预先填充该回复。

当触发构建消息的操作时,Gmail 会执行回调函数来构建并返回草稿。然后,Gmail 会在标准电子邮件撰写窗口的界面中显示该草稿,用户可以根据需要编辑并发送该草稿。

配置用于构建草稿消息的操作

如需配置小部件以在被选中时启动草稿构建操作,您必须执行以下操作:

  1. 确保您的 清单 包含 action.compose 范围

    https://www.googleapis.com/auth/gmail.addons.current.action.compose

    您可以使用更宽松的范围,但只有在绝对必要时才应这样做。

  2. 创建一个 Action 对象 并将其与您定义的 回调函数 相关联。

  3. 调用小部件的 setComposeAction 小部件处理程序函数, 向其提供 Action 对象并指定 ComposeEmailType

  4. 实现执行草稿构建操作的回调函数。此 函数会获得一个 事件对象 作为实参。回调函数必须执行以下操作:

    1. 创建一个 GmailDraft 对象。
    2. 使用 ComposeActionResponseBuilder 类和 GmailDraft 对象构建 ComposeActionResponse 对象。
    3. 返回构建的 ComposeActionResponse

您可以使用GmailDraft 您在回调函数中创建的 收件人、主题、邮件正文和附件预先填充。如需填充草稿,数据可以来自任何来源,但通常来自提供给插件本身的信息、打开的消息中的信息或从第三方服务收集的信息。传递给回调函数的事件对象包含打开的消息 ID 和其他插件信息,您可以使用这些信息预先填充草稿。

您可以将草稿创建为新的独立消息或对现有消息的回复。此过程由提供给 setComposeActionComposeEmailType 枚举控制。 您可以将回复草稿创建为单条回复或“全部回复”消息。

独立草稿

独立草稿会启动新会话,而不是对任何现有消息的回复。您可以使用以下 Gmail 服务函数之一创建独立草稿:

回复草稿

回复草稿是现有消息会话的一部分。回复草稿可以是仅发送给消息发件人的单条回复,也可以是发送给收到该消息的所有人的“全部回复”草稿。您可以使用以下 Gmail 服务函数之一创建回复草稿:

示例

以下代码段展示了如何将构建回复草稿的操作分配给按钮。

var composeAction = CardService.newAction()
    .setFunctionName('createReplyDraft');
var composeButton = CardService.newTextButton()
    .setText('Compose Reply')
    .setComposeAction(
        composeAction,
        CardService.ComposedEmailType.REPLY_AS_DRAFT);

// ...

/**
 *  Creates a draft email (with an attachment and inline image)
 *  as a reply to an existing message.
 *  @param {Object} e An event object passed by the action.
 *  @return {ComposeActionResponse}
 */
function createReplyDraft(e) {
  // Activate temporary Gmail scopes, in this case to allow
  // a reply to be drafted.
  var accessToken = e.gmail.accessToken;
  GmailApp.setCurrentMessageAccessToken(accessToken);

  // Creates a draft reply.
  var messageId = e.gmail.messageId;
  var message = GmailApp.getMessageById(messageId);
  var draft = message.createDraftReply('',
      {
          htmlBody: "Kitten! <img src='cid:kitten'/>",
          attachments: [
            UrlFetchApp.fetch('https://example.com/images/myDog.jpg')
                .getBlob()
          ],
          inlineImages: {
            "kitten": UrlFetchApp.fetch('https://example.com/images/myKitten.jpg')
                          .getBlob()
          }
      }
  );

  // Return a built draft response. This causes Gmail to present a
  // compose window to the user, pre-filled with the content previously
  // specified.
  return CardService.newComposeActionResponseBuilder()
      .setGmailDraft(draft).build();
}