使用ContactsApp获取电子邮件地址

时间:2015-09-09 10:59:50

标签: google-apps-script google-contacts

我正在制作一个Google Apps脚本,当他们的名字被选中作为出勤通知(暂停,实地考察等)时,会通知学生的老师。我尝试使用ContactsApp从Google Apps目录中获取教师信息,但根据Google Apps Script - ContactsApp - Directory search,该目录无法在课程中使用。

作为概念验证,我在目录中添加了一些联系人到我自己的库,以便我可以从脚本中访问信息。但是,当我使用他们的姓名,电子邮件地址搜索用户时......真的,我得到一个空的或null返回。我甚至将其缩减为硬编码查询(而不是变量)以查看是否可以返回任何内容。

function testing() {
  var user = ContactsApp.getContactsByEmailAddress('user@elkhart.k12.in.us');
  for(var i in user) {
    Logger.log(user[i].getGivenName());
  }
}

输入有效的电子邮件地址 - 即使是我自己的 - 也会返回一个空的日志条目。关于这是否只是剧本中的一个挑剔的类或者我是否以错误的方式接近它的任何想法?

2 个答案:

答案 0 :(得分:1)

由于您正在寻找将从常规域用户帐户运行的解决方案,因此最好避免依赖Admin SDK。只要您将所需的用户添加到您的联系人(或者您打算从中运行脚本的任何帐户的联系人),您就可以了。

您的代码适合我;我能够从我自己的消费者帐户的联系人中找到用户匹配。因此,值得深入研究您的源数据;例如,您的联系人的内容可能只是拼写错误。

在此,我修改了您的testing()功能,以转储有关您的联系人内容的信息,并最终查找共享您的域名的所有联系人,例如elkhart.k12.in.us。 (或gmail.com表示消费者帐户。)它会记录一些可能有助于查明源数据问题的其他信息。

/**
 * Get info about my contacts.
 *
 * @returns  Contact[]    Array of contacts in same domain as user.
 *
 * Adapted from //stackoverflow.com/questions/32477736
 */
function getContactsInfo() {
  // Get all my contacts, just to validate the number.
  var contacts = ContactsApp.getContacts();
  Logger.log("Total contacts: %s",contacts.length.toString());

  // Get info about my Contact groups (includes System Groups)
  var myGroups = ContactsApp.getContactGroups();
  Logger.log("Contact Groups (%s): %s",
             myGroups.length.toString(),
             myGroups.map(function(group){    // from //stackoverflow.com/a/16607599/1677912
               return group.getName();
             }).join());

  // Get my domain from my email (from //stackoverflow.com/a/5181776/1677912)
  var myDomain = Session.getActiveUser().getEmail().split("@")[1];
  Logger.log("My domain: %s", myDomain);

  // Get all domain users in my contacts
  var users = ContactsApp.getContactsByEmailAddress(myDomain);
  Logger.log("Matches in domain: %s",users.length.toString());
  for(var i=0; i<users.length; i++) {
    Logger.log(users[i].getGivenName());
  }
  return users;
}

答案 1 :(得分:0)

我有类似的问题。我有一个将联系人输入谷歌帐户的表单。当我填写表单时,绑定到表单电子表格的Google Apps脚本会在我的个人帐户中输入新的联系信息。在测试了Mogsdad的功能之后,我意识到问题在于我需要检查权限并在我想要添加联系人的帐户中再次授权。完成此操作后,脚本停止添加到我的个人联系人,并将联系人添加到正确的帐户。