关于Google Apps Script调用Admin Directory API的验证逻辑疑问
Google Admin API用户验证脚本逻辑解析
问题背景
我通过用户ID(第4列)拼接邮箱调用Google Admin API验证用户有效性,第10列(resolved)为空时才执行验证。现在发现try块里的两行setValue()代码,都会在同一批无效用户处触发错误,想搞清楚:
- 实际的验证逻辑在哪?
- 脚本是怎么识别检查主邮箱地址的?
对应脚本代码
function getNames() { var ss = SpreadsheetApp.getActiveSpreadsheet() var sheet = ss.getActiveSheet(); var values = sheet.getDataRange().getValues(); for(var i = 1; i < values.length; i++){ var data = values[i]; var resolved = data[10]; if(resolved === ""){ try{ var email = sheet.getRange(1+i,4).getValues() + '@buisness.com' var user = AdminDirectory.Users.get(email); var name = user.name.fullName; sheet.getRange(1+i, 5).setValue('Yes this is an employee');//How does this work? //sheet.getRange(1+i, 5).setValue(name);//This works which I expect } catch(errors){ sheet.getRange(1+i,5).setValue(errors); } } } }
一、实际验证逻辑的位置
验证的核心就在这行代码:
var user = AdminDirectory.Users.get(email);
这是直接调用Google Admin Directory API的Users.get方法,传入拼接好的邮箱地址。如果这个邮箱是你的Google Workspace域内有效的用户主邮箱,API会返回完整的用户对象;如果邮箱无效(比如用户名拼写错、域内无此用户),API会直接抛出错误,代码立刻跳到catch块执行,不会往下走try里的setValue步骤。
二、脚本识别检查主邮箱的流程
- 邮箱拼接:从第4列获取输入的用户名,拼接上
@buisness.com形成完整邮箱地址(注意这里域名拼写是buisness,如果是笔误可能会导致正常用户也验证失败)。 - API校验:
AdminDirectory.Users.get(email)会向Google的服务发起请求,在你的Workspace域用户数据库里精确匹配这个邮箱——只有完全匹配用户的主邮箱才会通过校验,别名、错误格式的邮箱都会触发错误返回。
三、为什么两行setValue()都会在同一批无效用户处触发错误
不管你用try里哪一行setValue,无效用户的邮箱在AdminDirectory.Users.get(email)这一步就会失败,直接进入catch块,根本到不了执行setValue的环节。你看到的“同一批无效用户触发错误”,本质是这些用户的邮箱通不过API校验,所以都会走catch写入错误信息,和try里的setValue代码无关——有效的用户才会执行try里的写入操作。
另外提个小优化:sheet.getRange(1+i,4).getValues()返回的是二维数组,拼接时虽然能正常转成字符串,但更规范的写法是用getValue()获取单个单元格的值:
var email = sheet.getRange(1+i,4).getValue() + '@buisness.com'
内容的提问来源于stack exchange,提问作者Mr. Anderson
相关产品推荐
相关产品推荐

