You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过App Script程序化关闭Gmail add-on的撰写窗口?

解决Gmail Add-on发送草稿后无法关闭撰写窗口的变通方案

目前Gmail Add-ons官方并未提供直接关闭撰写窗口的API,以下是基于App Script的几种变通方案,可优化用户体验避免重复点击:

方案1:利用草稿删除后的Gmail自动感知+成功提示

调用drafts[0].send()后,该草稿会被自动删除,Gmail前端通常会在几秒内检测到草稿不存在并自动关闭撰写窗口。你可以在发送成功后返回醒目的通知,提前告知用户这一行为:

function handleSendAction(e) {
  const drafts = GmailApp.getDrafts();
  if (drafts.length > 0) {
    drafts[0].send();
    // 返回成功通知,提示用户窗口将自动关闭
    return CardService.newActionResponseBuilder()
      .setNotification(CardService.newNotification()
        .setText("邮件已发送,撰写窗口将自动关闭")
        .setType(CardService.NotificationType.SUCCESS))
      .build();
  }
  // 处理无草稿的情况
  return CardService.newActionResponseBuilder()
    .setNotification(CardService.newNotification()
      .setText("未找到可发送的草稿")
      .setType(CardService.NotificationType.ERROR))
    .build();
}

方案2:直接发送邮件内容(绕过草稿)

如果你的Add-on可以从compose触发器的上下文获取撰写窗口的邮件信息(收件人、主题、正文等),可以直接调用GmailApp.sendEmail()发送,这种方式可能触发Gmail原生的撰写窗口关闭逻辑:

function handleDirectSend(e) {
  const composeMeta = e.gmail.composeMetadata;
  // 提取撰写窗口中的邮件信息
  const to = composeMeta.toRecipients.join(',');
  const subject = composeMeta.subject || "无主题";
  const body = composeMeta.bodyContent;
  const cc = composeMeta.ccRecipients.join(',');
  const bcc = composeMeta.bccRecipients.join(',');

  // 直接发送邮件
  GmailApp.sendEmail(to, subject, body, {
    cc: cc,
    bcc: bcc,
    htmlBody: composeMeta.bodyContent // 如果是HTML格式邮件
  });

  // 返回成功通知
  return CardService.newActionResponseBuilder()
    .setNotification(CardService.newNotification()
      .setText("邮件已发送")
      .setType(CardService.NotificationType.SUCCESS))
    .build();
}

方案3:刷新插件卡片+明确引导手动关闭

如果上述自动方案效果不稳定,可以在发送成功后将插件卡片替换为仅显示成功信息的简洁卡片,明确提示用户手动关闭撰写窗口,避免重复操作:

function handleSendAndRefresh(e) {
  const drafts = GmailApp.getDrafts();
  if (drafts.length > 0) {
    drafts[0].send();
    // 创建成功提示卡片
    const successCard = CardService.newCardBuilder()
      .setHeader(CardService.newCardHeader().setTitle("邮件发送成功"))
      .addSection(CardService.newCardSection()
        .addWidget(CardService.newTextParagraph().setText("请手动关闭撰写窗口,无需重复点击发送")))
      .build();
    // 返回更新后的卡片
    return CardService.newActionResponseBuilder()
      .setNavigation(CardService.newNavigation().updateCard(successCard))
      .build();
  }
  // 无草稿的错误处理
  return CardService.newActionResponseBuilder()
    .setNotification(CardService.newNotification()
      .setText("未找到可发送的草稿")
      .setType(CardService.NotificationType.ERROR))
    .build();
}

内容的提问来源于stack exchange,提问作者Yuchao Wu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 12:17:36