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

如何实现从Gmail插件直接发送邮件并返回收件箱?

当然可行!我之前开发Gmail插件时刚好做过类似的功能,完全能实现点击按钮直接发送回复、自动返回收件箱的需求,下面给你具体的实现思路和代码示例:

实现思路

1. 替换草稿创建为直接发送API

原来的message.createDraftReply()是生成草稿,要直接发送的话,有两种常用方式:

  • 简单回复:用GmailMessage.sendReply()方法,直接传入回复内容即可,会自动处理回复的上下文(比如主题前缀、收件人)
  • 自定义回复:如果需要添加抄送、附件、自定义主题等,用GmailApp.sendEmail(),需要手动指定回复相关的参数(比如inReplyTo关联原邮件)

2. 发送完成后导航回收件箱

在插件的动作响应里,使用Google Workspace Add-ons的CardService.Navigation类,调用navigateToInbox()方法,就能让UI从当前邮件视图跳转到收件箱。

3. 确保权限配置正确

发送邮件需要额外的权限https://www.googleapis.com/auth/gmail.send,必须在插件的appsscript.json配置文件里添加这个OAuth范围,否则会触发权限错误。

代码示例

1. 按钮定义(在构建插件卡片时)

// 假设你已经获取到当前邮件的GmailMessage对象
const currentMessage = GmailApp.getMessageById(e.messageMetadata.messageId);

// 创建直接发送的按钮
const sendButton = CardService.newTextButton()
  .setText("一键发送回复")
  .setOnClickAction(CardService.newAction()
    .setFunctionName("handleDirectReply")
    .setParameters({messageId: currentMessage.getId()}));

// 将按钮添加到卡片中
const card = CardService.newCardBuilder()
  .addSection(CardService.newCardSection().addWidget(sendButton))
  .build();

2. 点击事件处理函数

function handleDirectReply(e) {
  const messageId = e.parameters.messageId;
  const targetMessage = GmailApp.getMessageById(messageId);
  
  // 构建你的回复内容(和之前创建草稿的内容一致即可)
  const replyContent = {
    body: "这是自动发送的回复内容,无需手动操作",
    subject: "Re: " + targetMessage.getSubject()
  };

  try {
    // 方式一:简单直接发送回复(自动关联原邮件上下文)
    targetMessage.sendReply(replyContent.body);

    // 方式二:自定义回复(支持抄送、附件等)
    // const recipient = targetMessage.getReplyTo() || targetMessage.getFrom();
    // GmailApp.sendEmail(
    //   recipient,
    //   replyContent.subject,
    //   replyContent.body,
    //   {
    //     cc: "cc@example.com",
    //     attachments: targetMessage.getAttachments(),
    //     inReplyTo: targetMessage.getId(),
    //     references: targetMessage.getHeader("References"),
    //     name: "你的自定义发件人名称"
    //   }
    // );

    // 发送成功后,导航回收件箱
    return CardService.newActionResponseBuilder()
      .setNavigation(CardService.newNavigation().navigateToInbox())
      .build();
  } catch (err) {
    // 处理发送失败的情况,显示错误提示
    return CardService.newActionResponseBuilder()
      .setNotification(
        CardService.newNotification()
          .setText(`发送失败:${err.message}`)
          .setType(CardService.NotificationType.ERROR)
      )
      .build();
  }
}

3. 权限配置(appsscript.json)

打开插件的appsscript.json文件(如果看不到,点击编辑器顶部的「查看」→「显示清单文件」),添加gmail.send权限:

{
  "timeZone": "Asia/Shanghai",
  "dependencies": {},
  "oauthScopes": [
    "https://www.googleapis.com/auth/gmail.addons.execute",
    "https://www.googleapis.com/auth/gmail.send"
  ],
  "gmail": {
    "name": "你的插件名称",
    "logoUrl": "https://example.com/logo.png",
    "contextualTriggers": [
      {
        "unconditional": {},
        "onTriggerFunction": "buildPluginCard"
      }
    ],
    "primaryColor": "#4285F4",
    "secondaryColor": "#4285F4"
  }
}
注意事项
  • 测试时确保你有足够的权限发送邮件,第一次使用插件会触发权限授权提示
  • 如果需要处理复杂的邮件格式(比如HTML),可以在sendEmail的参数里添加htmlBody字段
  • navigateToInbox()是Google Workspace Add-ons的标准导航方法,会直接切换到Gmail的收件箱视图,无需用户手动返回

内容的提问来源于stack exchange,提问作者Matt Cashatt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:43:00