我运行一个接收电子邮件地址的函数,然后检查这封电子邮件是否在组中注册,并且只有在没有注册时,才将它作为新成员添加。
检查是通过运行以下函数来完成的:
function CheckIfMemberExist(email)
{
var MemberExist = false;
var pageToken;
var page;
var groupEmail = 'MyGroupEmail';
var groupDomainName = 'MyGroupDomain';
do {
page = AdminDirectory.Members.list(groupEmail,{
domain: groupDomainName,
orderBy: 'Email',
maxResults: 100,
pageToken: pageToken
});
var members = page.members;
if (members)
{
for (var i = 0; i < members.length; i++)
{
var memberEmail = members[i].email;
if(memberEmail.toLowerCase() == email.toLowerCase())
MemberExist = true;
}
}
pageToken = page.nextPageToken;
} while (pageToken);
return MemberExist;
}然后,只有当函数返回MemberExist = false时,我才调用:
AdminDirectory.Members.insert(NewMember,groupEmail);
问题是,即使CheckIfMemberExist返回false,但当我运行AdminDirectory.Members.insert,时,会得到:对directory.members.insert的API调用失败了:成员已经存在,脚本中断。我怀疑google识别出一种情况,即用户有另一封与我试图注册的邮件相关的邮件,但我不知道如何处理这个问题。谢谢
发布于 2019-12-16 11:08:06
如果你试图通过他们的电子邮件将一个成员添加到这个组中,它会工作的。但是,如果您稍后尝试添加与插入的第一封电子邮件相关的别名的另一个成员,它将无法工作。当您使用别名添加成员,然后尝试使用电子邮件地址添加成员时,也会出现同样的问题。
解决问题的一个方法是使用G Suite Admin中的Members:list,然后列表中的每个成员都使用Users:get。
Users:get将返回一个表示User resource的列表,在该列表中您还将找到与该用户相关的所有电子邮件,包括别名。之后,你可以简单地检查一下这些电子邮件是否已经在你的组里了。这样,您就可以避免当前遇到的问题。
此外,我建议你看看这些链接,因为它们可能有帮助。
https://stackoverflow.com/questions/59335170
复制相似问题