【Google Apps Script】メーリングリストから所属するメンバーのアドレスとフルネームをスプレッドシートに表示する

概要

GoogleAppsのグループ(メーリングリスト)に追加されているメンバーは、
管理コンソールから取得することが出来るのですが、取得できるのはアドレスのみです。
出来ればユーザの氏名も一緒に表示したい。。。という場合に。

スプレッドシートのA2セルに対象のグループ入力し、
メニューの「メーリングリスト」→「メンバー表示」をクリックすると、B列にメールアドレス、C列に氏名が表示されるようにします。
A5にメーリングリストの人数を表示します。

メニューはOnOpenでスプレッドシートを開いた時に表示されるようにします。

f:id:migrantbird:20160321112742j:plain

対象者

Gooogle Apps for Workでメーリングリストを管理している人
特定メーリングリストのオーナーである人

ListGroupMembers

function AddMenu(){
  var ss =  SpreadsheetApp.getActiveSpreadsheet()
  var sheet =  ss.getActiveSheet(); 
  var menus = [{name: 'メンバー表示', functionName: 'ListGroupMembers'}];
  ss.addMenu('メーリングリスト', menus);

}
function ListGroupMembers() {
  var ss =  SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('シート名');
  sheet.getRange('B2:D1000').clear(); 
  var groupEmail = sheet.getRange(2,1).getValue();
  var group = GroupsApp.getGroupByEmail(groupEmail);
  var users = group.getUsers();
 
  if (users) {
    for (var i = 0; i < users.length; i++) {     
      sheet.getRange(i+2,2).setValue(users[i]);
      var userEmail = sheet.getRange(i+2,2).getValue();
      var user = AdminDirectory.Users.get(userEmail);
      sheet.getRange(i+2,3).setValue(user.name.fullName);
      
    }
  } else {
      Logger.log('No users found.');
  }
  sheet.getRange(5,1).setValue(users.length);
}

処理内容

GroupAppクラスのgetGroupByEmailを使って、
セルに入力したグループのメールアドレスからグループオブジェクトを取得。
グループオブジェクトに対してgetUsersで、対象グループのメンバーのメールアドレス一覧を取得します。

メンバーのメールアドレス一覧を取得できたら、forでメールアドレスをB列に設定していきます。

その際にユーザの氏名をメールアドレスの情報を元にAdminDirectory.Users.getで取得するのですが、
そのまま値を呼び出すとエラーが出るため、先に値を設定したB列のセルからユーザのメールアドレスを変数として取得しています。

一番最後でメーリングリストにいるメンバーの数を出しています。

注意事項

注意事項としてはふたつ。

このスクリプト実行時は、
グループ設定の「アクセス権限」→「メンバーリストを閲覧する」で、スクリプトを実行するユーザに権限を与えてないと、権限がないとエラーが出るので注意。

特定のドメイン内の場合は、そのグループの「アクセス権限」の「メンバーリストを閲覧する」対象を、「ドメイン内のすべてのユーザー」にしてください。
デフォルトはそのグループのオーナーやメンバーのみになっていて、グループのメンバーのメールアドレスを取得できません。

またメーリングリストドメイン外のユーザがいる場合は、上手く表示できないようです。
この辺は別途調査する予定です。