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

如何使用GAS设置Google文件被共享时自动触发邮件通知

共享事件邮件通知实现方案

目前Google Apps Script没有原生针对文件共享事件的触发器,你可以通过以下两种可行方案实现需求:

方案1:通用账号适用(免费版/付费版均可):时间驱动触发器定期扫描权限变动

实现逻辑为定期拉取文件的当前访问权限列表,和上一次存储的快照做对比,发现权限变动即触发邮件通知:

  • 操作步骤:
    1. 打开目标表格,点击顶部菜单「扩展程序」-「Apps Script」进入脚本编辑器
    2. 粘贴如下代码,替换代码内的文件ID和通知邮箱为你的实际值
    // 首次运行初始化权限快照,只需要运行1次
    function initPermissionSnapshot() {
      // 替换为你的表格文件ID
      const FILE_ID = "xxx";
      const file = DriveApp.getFileById(FILE_ID);
      const currentPermissions = [
        ...file.getEditors().map(editor => editor.getEmail()),
        ...file.getViewers().map(viewer => viewer.getEmail())
      ];
      PropertiesService.getDocumentProperties().setProperty(
        "lastPermissionSnapshot", 
        JSON.stringify(currentPermissions)
      );
    }
    
    // 权限扫描逻辑,后续由触发器自动运行
    function checkShareChange() {
      // 替换为你的表格文件ID
      const FILE_ID = "xxx";
      // 替换为接收通知的邮箱
      const NOTIFY_EMAIL = "your-email@example.com";
      const file = DriveApp.getFileById(FILE_ID);
      const currentPermissions = [
        ...file.getEditors().map(editor => editor.getEmail()),
        ...file.getViewers().map(viewer => viewer.getEmail())
      ];
      const lastPermissions = JSON.parse(
        PropertiesService.getDocumentProperties().getProperty("lastPermissionSnapshot") || "[]"
      );
    
      // 检测新增的共享权限
      const addedUsers = currentPermissions.filter(email => !lastPermissions.includes(email));
      // 检测被移除的共享权限
      const removedUsers = lastPermissions.filter(email => !currentPermissions.includes(email));
    
      if (addedUsers.length || removedUsers.length) {
        let mailContent = `文件《${file.getName()}》发生共享权限变动:\n`;
        if (addedUsers.length) mailContent += `\n新增访问用户:\n${addedUsers.join("\n")}`;
        if (removedUsers.length) mailContent += `\n移除访问用户:\n${removedUsers.join("\n")}`;
        MailApp.sendEmail(NOTIFY_EMAIL, `文件共享变动通知:${file.getName()}`, mailContent);
        // 更新权限快照
        PropertiesService.getDocumentProperties().setProperty(
          "lastPermissionSnapshot", 
          JSON.stringify(currentPermissions)
        );
      }
    }
    
    1. 先选中initPermissionSnapshot函数运行一次,完成初始权限快照的存储,授权时按照提示完成权限验证即可
    2. 进入脚本编辑器左侧「触发器」页面,点击「添加触发器」,选择要运行的函数为checkShareChange,触发器类型选择「时间驱动」,按照你的需求设置运行频率(最短可设置为每分钟运行一次)
  • 优缺点:适配所有账号类型,不需要管理员权限,缺点是不是完全实时触发,存在最长等于你设置的运行频率的延迟

方案2:Google Workspace企业/教育版账号适用:管理员审计日志告警

如果你使用的是企业版或教育版Workspace账号,可以直接在管理员后台配置告警规则,不需要写代码:

  • 操作步骤:进入Google Admin后台,选择「报告」-「审计日志」-「Drive日志」,点击「创建告警规则」,触发条件设置为「文档共享事件」,通知渠道设置为你的邮箱即可
  • 优缺点:完全实时触发,不需要维护代码,缺点是仅适用于付费版Workspace账号,且需要管理员权限配置

补充说明:目前Google Drive原生确实不支持给不同编辑者设置差异化的共享开关权限,暂时只能通过上述权限监控的方式做事后管控,没有原生的事前限制方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 14:06:10