2014年12月2日火曜日

Google Apps Scriptで自動的に連絡先のグループを作りたい! その1

こんにちは、最近はA-AUTO 50のリモートライセンスで奔走している井下です。


唐突ですが、みなさんはGメールを複数人に送りたい場合はどうされていますか?
オートコンプリートを駆使して1人ずつ入力したり、過去に送信したメールの送信先からコピペをしたり、色々な方法があると思います。

ただ部署宛のような毎回送信先が同じで、それなりに頻度が高い場合は、Googleで用意されている「連絡先」でグループを利用されることが多いのではないでしょうか。

会社によっては、情報システム部門の方が用意&更新してくれいて、自分が意識せずとも使えるようになっているかもしれませんね。

ただ、個人でグループを利用しようと思っても、ちょっと面倒くさいなと感じてしまうところがあったり…。
日頃の送信先は大体決まっていますが、プロジェクトや用途によって微妙にメンバーの増減が発生するので、それを1つずつグループ作成していこうというモチベーションがいまいち湧いてきません。

そこで、こんな感じのシステムがあればなと妄想してみました。

自分の送信メールから、送信先の情報を取得して(だいたい最新1週間分くらい)、グループとして作成してくれるWebアプリ

前置きが長くなりましたが、今回と次回の2回で、メール・グループ作成のWebアプリを作っていこうと思います。




利用するGoogle Apps Serviceですが、次のものがあれば作れそうです。
  • Gmail当然必須
  • Contactsグループを作るのに利用。日本だと「連絡先」として提供されています。日本もContactsじゃダメだったんだろうか…

核になる動作を実装してみて分かったのですが、送信先のメールアドレスのみでグループを作るのは難しそうです。

その理由ですが、まず送信先のメールアドレスからは次の2つの情報を取得できます。

  1. メールアドレス
  2. 名前("井下純樹 <xxxx@yyyy>"のように、"名前<メールアドレス>"の形式の場合)

そして、グループに登録するためには、Contactsに個人の情報を登録する必要があるのですが、そのために必要な情報は次の3つです。

  1. メールアドレス
  2. 姓(必須)

…ここまで見ていただければお分かりになると思いますが、送信先のメールアドレスからは、姓と名の情報が取得できません。
姓+名なら取得できる可能性があるのですが、どこまでが姓で、どこからが名かを判別するという無理難題に直面します。

もっとも、とりあえず送信先をまとめられるようにしたい! と考えているので、あまり重要な問題ではなさそうです。(適切なグループ名を付けておかないと、後でひどい目に遭いそうですが)

グループに登録する個人の情報までしっかりさせたいのであれば、あらかじめ手動で個人の情報をContactsに登録しておく必要があります。


今回は自分の送信したメールから、自動でグループを作成する部分を実装してみました。

function autoRegisterContact() {
  var thread= GmailApp.search('in:sent', 0, 10);
  var message = thread[0].getMessages()[0];
  
  var allTo = message.getTo();
  var to = getToList(allTo)[0];

  var newContactGroup= ContactsApp.createContactGroup('newContact');
  newContactGroup.addContact(ContactsApp.createContact(getName(to), ' ', getMailAdress(to)));
}

function getToList(allTo){
  return allTo.split(",");
}

function getName(to){
  return to.split("<")[0];
}

function getMailAdress(to){
  return to.split("<")[1].split(">")[0];
}


処理の流れとしては次のようになっています
  1. 「GmailApp.search('in:sent', 0, 10);」によって、最近送信したメールを10スレッド分取得
  2. 取得したスレッドから、メッセージを取得(今回は最初のスレッドの最初のメッセージのみ)
  3. 取得したメッセージから、全ての送信先を取得
  4. 取得した全ての送信先を元に、最初の送信先を取得
  5. グループを新規作成
  6. 新規作成したグループに、取得した最初の送信先を元にして連絡先を登録
これを実行すると、連絡先に「newContactGroup」というグループが作成され、1人分の連絡先が登録されるようになります。


ひとまずやろうとしていたことは条件こそあるもののできそうなことが分かりましたので、次回にWebアプリらしく仕上げていこうと思います。

考えてるのはこんな感じです。

  • 最新の送信メールを元に、画面で送信先の固まりをリスト形式で見られる
  • グループ作成したい送信先の固まりを選択すると、実際にContactsでグループ作成する
  • グループ名を画面から指定できる
  • 姓・名の情報がない送信先には、個別に姓・名を入力することができる
  • グループ作成をするのに不要な送信先を外したり、任意の送信先を追加できる

次回は上記のイメージのWebアプリの作成と、その説明をしていく予定です。

0 件のコメント:

コメントを投稿