1

我正在尝试制作一个脚本,该脚本将组的电子邮件作为输入并解析所有成员以将它们添加到 CSV 文档中。

问题是我的一些组包含其他组,所以我必须递归调用我的函数。并且要递归调用它,我需要测试电子邮件地址以了解它是用户还是组。这里的代码:

var USERS = new Array();
var INDEX = 0;


function listAllUsersInGroup(email) {
  var temporaryObjectListMember = GroupsManager.getGroup(email).getAllMembers();
  for (z=0; z<temporaryObjectListMember.length; z++) {
    try {
      var group = GroupsManager.getGroup(temporaryObjectListMember[z]);
    }
    catch (err2){Logger.log(err2)}
    if (group != null) { listAllUsersInGroup(group.getId());}
    else {
      try {
        var user = UserManager.getUser(temporaryObjectListMember[z].substring(0,temporaryObjectListMember[z].lastIndexOf('@')));
      } catch(err) { Logger.log(err) }

      if (user != null) {
        USERS[INDEX] = user.getEmail();
        INDEX++;
      }
    }
  }
}

我用 main 调用这个函数:

function main() {
  var email = "grouptest@domain.com";
  listAllUsersInGroup(email);
}

当组包含用户和另一个组时,它会因“序列化继续时出现意外异常”错误而中断。

在这种情况下,try catch 似乎不起作用。

一种解决方案可能是测试电子邮件的类型(用户、组、别名......),但我还没有找到如何做到这一点。

谢谢 Jérémie BECOUSSE

4

1 回答 1

1

在对脚本稍作修改后,它似乎可以正常工作。

当您创建一个 google 组时,成员列表将自动删除所有别名,因此这些别名没有问题。您必须检查您是否面对其他组或电子邮件地址,可以来自 2 种类型:来自您域的电子邮件->您可以使用用户管理器功能找到它来自您的域外的电子邮件->我不相信有一种在向那些人发送东西之前知道它们是否有效的方法

下一个代码将返回您域中的“USERS”用户和非您域中的“EXTUSER”用户。(运行测试它())

 function listAllUsersInGroup(email) {
  var temporaryObjectListMember = GroupsManager.getGroup(email).getAllMembers();
  for (var z in temporaryObjectListMember) {
    var member = temporaryObjectListMember[z];
    try {
      var group = GroupsManager.getGroup(member);
    }
    catch (err2){
      //Logger.log("is not group: "+err2);
    }

    if (group != null) { 
      Logger.log(member+" is a group");
      listAllUsersInGroup(member);
    }
    else {
      try {
        var user = UserManager.getUser(member.split('@')[0]);
      } catch(err) { 
        //Logger.log("it's not a known mail: "+err);
        EXTUSERS.push(member);
      }

      if (user != null) {
        USERS.push(member);
      }
    }
  }
  Logger.log("end of the group");
}

var EXTUSERS = [];
var USERS = [];


function testingIt(){
  listAllUsersInGroup("groupemailadress@domain.ext");
  Logger.log("recognized users are: "+USERS);
  Logger.log("unrecognized users are: "+EXTUSERS);
}
于 2013-03-13T13:15:31.713 回答