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

如何在Gmail中添加按钮以运行Google Apps Script?

我明白你现在的困扰——好不容易写好的图片备份脚本,想做成Gmail插件方便随时用,结果跟着官方指南走却卡壳了。别着急,我帮你一步步排查和解决问题,毕竟刚接触Gmail插件和Apps Script的时候踩坑太正常了!

第一步:先检查核心配置文件(appsscript.json)

Gmail插件的manifest配置文件是重中之重,很多新手栽在这里。你需要确保appsscript.json里包含了插件运行的必要参数:

  • 首先,oauthScopes必须涵盖你需要的权限:比如读取邮件、操作Drive(如果存图片到Drive)、显示插件UI的权限
  • 其次,addOns字段要正确指定Gmail插件的触发逻辑,比如什么时候显示你的按钮

给你一个参考配置,替换成你的需求即可:

{
  "timeZone": "Asia/Shanghai",
  "dependencies": {},
  "oauthScopes": [
    "https://www.googleapis.com/auth/gmail.readonly",
    "https://www.googleapis.com/auth/drive.file",
    "https://www.googleapis.com/auth/script.container.ui"
  ],
  "addOns": {
    "gmail": {
      "contextualTriggers": [
        {
          "unconditional": {},
          "onTriggerFunction": "showBackupImageButton"
        }
      ],
      "primaryColor": "#4285F4",
      "secondaryColor": "#34A853"
    }
  },
  "runtimeVersion": "V8"
}

注意:onTriggerFunction是你用来生成插件按钮的函数名,必须和你脚本里的函数完全对应。

第二步:编写插件UI和适配的业务逻辑

你之前的脚本是提取图片的核心逻辑,但插件需要专门的函数来生成Gmail里的按钮界面,还要适配插件的触发环境:

1. 生成插件按钮的函数

这个函数负责在Gmail右侧边栏显示你的备份按钮:

function showBackupImageButton(e) {
  // 创建备份按钮,点击后调用图片提取函数
  var backupButton = CardService.newTextButton()
    .setText("备份邮件内嵌图片")
    .setOnClickAction(CardService.newAction()
      .setFunctionName("extractAndBackupImages"));
  
  // 把按钮放到卡片里(Gmail插件的UI必须用卡片承载)
  var cardSection = CardService.newCardSection().addWidget(backupButton);
  var card = CardService.newCardBuilder().addSection(cardSection).build();
  
  // 返回卡片,让Gmail显示出来
  return [card];
}

2. 适配插件环境的图片备份函数

你的原代码可能是手动指定邮件ID,现在要改成从插件触发事件里获取当前打开的邮件ID:

function extractAndBackupImages(e) {
  // 从插件事件中拿到当前打开的邮件ID
  var currentMessageId = e.gmail.messageId;
  var message = GmailApp.getMessageById(currentMessageId);
  
  // 提取内嵌图片(筛选inline类型的附件)
  var embeddedImages = message.getAttachments().filter(attachment => attachment.isInline());
  
  // 备份到Drive(这里替换成你的文件夹ID)
  var targetFolder = DriveApp.getFolderById("你的Drive文件夹ID");
  embeddedImages.forEach(img => targetFolder.createFile(img));
  
  // 给用户返回操作成功的提示
  return CardService.newActionResponseBuilder()
    .setNotification(CardService.newNotification()
      .setText(`备份完成!共保存${embeddedImages.length}张内嵌图片`))
    .build();
}
第三步:测试和排查常见问题
  1. 测试插件:在脚本编辑器里点击「测试部署」→「测试Gmail插件」,打开新的Gmail窗口后,随便打开一封邮件,看看右侧边栏有没有你的插件按钮。
  2. 权限授权:第一次运行会弹出授权请求,一定要用自己的Google账号完成授权;如果是工作域账号,可能需要管理员允许。
  3. 常见坑点:
    • 必须用V8运行时(配置里的runtimeVersion设为"V8"),旧版本不兼容Gmail插件
    • 函数执行时间不能超过30秒,如果图片太多,先测试少量图片的情况
    • 检查脚本编辑器的「执行记录」:点击「查看」→「执行记录」,如果有报错,里面会明确告诉你是权限不足、函数名拼写错误还是其他问题
  4. 插件启用检查:打开Gmail→右上角设置→「查看所有设置」→「插件」,确认你的插件已经被启用,没启用的话手动打开。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:25:31