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

如何借助Google Apps Script可安装触发器识别活跃用户并获取邮箱?

解决Google Apps Script多用户场景下获取活跃用户邮箱的权限与运行身份问题

一、自动触发用户授权的友好方案

onOpen/onEdit(包括可安装的on-open触发器)默认处于受限运行模式,无法触发权限请求——这类触发器的运行环境不允许访问需要用户授权的服务(比如Session.getActiveUser())。以下是比全屏按钮/隐藏工作表更友好的替代方案:

  1. 自定义菜单引导授权
    在onOpen简单触发器中添加自定义菜单,绑定需要授权的函数。用户打开表格时会看到菜单,点击即可触发授权提示,流程自然无强制干扰:
function onOpen() {
  SpreadsheetApp.getUi()
    .createMenu('日志记录授权')
    .addItem('完成授权以启用日志', 'authorizeAndRecordUser')
    .addToUi();
}

function authorizeAndRecordUser() {
  const user = Session.getActiveUser();
  const email = user.getEmail();
  // 此处添加日志记录逻辑
  SpreadsheetApp.getUi().alert('授权完成,你的操作日志将正常记录');
}
  1. 侧边栏引导授权
    在onOpen中打开自定义侧边栏,引导用户点击按钮完成授权,不会遮挡表格核心内容:
function onOpen() {
  const html = HtmlService.createHtmlOutput(`
    <p>请点击下方按钮完成授权,以便系统记录你的操作日志:</p>
    <button onclick="google.script.run.authorizeAndRecordUser()" style="padding: 8px 16px;">完成授权</button>
  `);
  SpreadsheetApp.getUi().showSidebar(html.setTitle('日志授权引导'));
}

function authorizeAndRecordUser() {
  const user = Session.getActiveUser();
  const email = user.getEmail();
  // 日志记录逻辑
  return '授权成功!';
}

二、解决脚本运行身份问题

你提到的“多数脚本以所有者身份运行”是因为:可安装触发器默认以**触发器创建者(脚本所有者)**的身份执行,而非当前打开表格的用户。对于免费Google账号,只有两种可靠方式让脚本以当前用户身份运行:

  • 用户手动触发:通过表格内按钮、自定义菜单、侧边栏按钮触发的脚本,会以当前用户身份运行,此时Session.getActiveUser().getEmail()可正常返回用户邮箱(这也是你已发现的可行方式);
  • 付费Google Workspace账号可通过域范围授权实现,但免费账号无法使用该功能。

总结

针对免费Google账号的多用户场景:

  • 优先用自定义菜单或侧边栏引导用户完成授权,体验更友好;
  • 仅用户手动触发的脚本能正确识别当前用户身份,获取有效邮箱信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 13:00:24