Google Apps Script @福岡

GASで面白Webサービス&コスト削減や!

Google Apps Script 講座初級編「GASでGmailを検索する」

はじめに

後藤銃士です。腰痛でダウンしています。

さて今回は趣を変えまして、Gmail を取り扱います。図書館でオンライン読みたい本を予約しています。予約していた本が届くと、登録していた Gmail アドレスに通知がくるんですけどたまに見逃すことがありました。ですので今回、見逃さないようにするための仕組みづくりをしたいと思います。

私は現在 Line を使っていますので、Gmail に予約本が届いたら、Line で通知があると便利かなと。以下の流れで GAS を組めばいけそうな気がします。

  • Gmail の件名に「予約本到着」の文字列を含むメールが来ているか監視する

  • 来ていた場合は Line bot に通知する

基本はこの2つですね。あとは監視〜通知に至る処理が必要となります。この処理をつなぐところがイメージできればプログラミングは楽しくなりますね。

今回はまず、「GASでGmailを検索する」をやります。

この機能が役に立つのは

Gmail を GAS で操作してみたい人向け

講座スタート

いつもどおりコピペだけで大丈夫です。

新しくタブを開き「script.google.com」を入力してコードを書ける状態にして下さい。

そしていつもどおり1行目の3行目の間に

  var query = '検索したい言葉';
  var threads = GmailApp.search(query, 0, 5);
     
  threads.forEach(function(thread, i, array){
    Logger.log(thread.getId());
    Logger.log(thread.getLastMessageDate());
    Logger.log(thread.getFirstMessageSubject());
  });

をコピペして保存します。

f:id:jijyoronn:20190113110508p:plain

それでは実行してログをみてみましょう。

f:id:jijyoronn:20190113110525p:plain

このように検索した結果を取得することができます。 ご自身 Gmail で同じように検索してみると、一致しているのがわかると思います。

f:id:jijyoronn:20190113110556p:plain

コードを見るとわかると思いますが、Gmail のメールって、やりとりを繰り返すとひとまとめにされてしまうのですね。それを「スレッド(thread)」と呼んでいます。スレッドって撚り糸(よりいと)ですから、1本の糸をよりあわせて1つの糸にする、つまりこの場合はメールをひとまとめに扱っている、というわけです。

で、スレッド単位で検索しておいて、そのうちの getFirstMessageSubject() を使ってそのスレッドの1番最初のメールのタイトルを取得してきています。受信しただけのメールでしたら大抵スレッドにはなっておらずメール=スレッドのような扱いにはなりますが、Gmail の仕様上こんなふうにスレッドを取得しています。

なお、スレッド検索に使っている

  var threads = GmailApp.search(query, 0, 5);

の数字ですが、

  • 0 … 検索開始位置です。0番目なので最初から(大抵の処理では一番最初は0から始まるケースが多い)

  • 5 … 最大取得数。この場合最大5件のスレッドを取得する、という意味です

というわけであっさり取得することができましたね。例によって保存したければ、スプレッドシートに書き込むとよいですね。

それでは次回は、LINE での通知にチャンレジします。実装は簡単なんですけど、説明を書くのが大変なので時間がかかるかもしれませんが、しばしお待ち下さい。

今回は以上となります。

それでは、ご覧いただきありがとうございました。