Google Apps ScriptでGmailの特定のメールを受信したらLINEと連携して通知する

こんにちは~。「デザインもできるシステムエンジニア」のあつもり(@atumori17)です。
今日も「時間クリエーター」としてバシバシ時短に取り組んでます!

今回はGoogle Apps Scriptを使い、Gmailで特定の件名のメールを受信したらLINEに通知するプログラムの紹介です。

私はチャットワークを使用しているのですが、スマホにアプリをインストールしておらず、グループチャットでの発言の通知を全てGmailで受け取っていました

でもGmailだと通知が届いたのに気づかないことがけっこうあったんですね。そこでGmailで受け取った通知メールをLINEに転送できないかな~って思っていたところ、LINEのWeb APIが使える!ということを知り、やってみようとなったわけですっ。

まあでもスマホにチャットワークアプリを入れればこんなことしなくていいんですけどね・・・他の用途にも使えるし、勉強にもなるし何事もチャレンジということで。興味のある人は見ていってくださいね~。

レクタングル大336×280

LINEのWeb APIサービスを使えるように設定する

まずはLINEのWeb APIを使えるようにする必要があります。それでは順を追って説明していきますね。

LINE Notifyの設定する

まずは下記URLにアクセスします。

LINE NotifyはGitHub,IFTTT,MackerelなどのWebサービスからの通知を、LINEで受信することが出来る便利なサービスです。

LINEをインストールしたときに登録した「メールアドレス」「パスワード」を入力します。

「登録したメールアドレスと、パスワードなんて忘れちゃったよ」という人。心配しないでください。調べ方がありますからっ。

まずはスマホからLINEを開きます。

「その他」→「設定」→「アカウント」→「メールアドレス」の順にタップすることで確認できます。

それではWeb APIの設定の説明にもどります。

画面右上の「マイページ」をクリックします。

トークンを発行するをクリックします

トークン名に適当な名前を入れ、1:1でLINE Notifyから通知を受け取るをクリックします。そして画面下にある「発行する」ボタンをクリックします。

するとトークンが発行されるので、コピーボタンを押してコピーし、テキストエディタなどに保存しておきます。このトークンはWeb APIを使うためのパスワードのようなものだと思っておいてください。

これで準備OKです。次にGoogle Apps Scriptでスクリプトを書いていきます。

Gmailでメールを受信したらLINEに通知メッセージを送るスクリプト

Web APIの設定が終わったところで、今度はGoogle Apps ScriptでGmailメールを操作するスクリプトを書いていきます。

今回のスクリプトは「特定の文字が件名に入っていたらLINEと連携して通知メッセージを送る」ようにします。

Goooleのサイトを開き、「Googleドライブ」→「マイドライブ」→「その他」→「Google Apps Script」の順でクリックし、スクリプエディタを開きます。

続いて下記のコードを入力します。プロジェクト名は「特定のメールをLine転送」などとし保存します。

プログラムコードの解説

それではプログラムコードの解説をしていきます。「とりあえず動けばいい」という人は読み飛ばしてください。

searchメソッドで指定した件名のメールを取得する

GmailApp.search(検索条件, スレッドの読み込み開始位置, スレッドの最大取得数)

検索条件はスクリプトの1行目で指定している、subject:(チャットワーク)です。件名にチャットワークという文言が入ったメールだけを抽出します。

スレッドの読み込み開始位置は0を指定すると、検索条件にヒットした中で最新の日付のスレッドから取得します。スレッドの最大数はこの開始位置からいくつ日付を遡って、スレッドを取得するかを指定します。仕様では500が最大になっています。

getMessagesForThreadsメソッドでスレッドからメールを取得する

GmailApp.getMessagesForThreads(スレッド)

searchメソッドで取得した全てのスレッドに入っているメールを取得して二次元配列に格納します。

For文でメールの数だけ処理を繰り返す

for(var i in myMessages)

最初のfor文はスレッドの数だけ繰り返します。

for(var j in myMessages[i])

次のfor文はスレッド内のメールの数だけ繰り返します。

ちょっとわかりにくいと思いますので、下記の図のようなメールを受信した場合を例にしてみます。スレッド数は全部で3つ。一番上のスレッドのみメールが5通入っています。

「受信したメールを返信」というようなことを繰り返すと、このように一つのスレッドにメールがまとめられます

残り2つのスレッドは数字が表示されていませんね。その場合は返信などのやりとりをしておらずスレッドに紐づくメールは1通だけです。

このメールを2次元配列であるmyMessagesで表すと以下のようになります。

YOUYUBEからのメール
1スレッド目の1番目のメールはmyMessages(0,0)
1スレッド目の2番目のメールはmyMessages(0,1)
1スレッド目の3番目のメールはmyMessages(0,2)
1スレッド目の4番目のメールはmyMessages(0,3)
1スレッド目の5番目のメールはmyMessages(0,4)

Lookout Mobile Securityからのメール
2スレッド目の1番目のメールはmyMessages(1,0)

Google+からのメール
3スレッド目の1番目のメールはmyMessages(2,0)

スターがついていないメールだけを取得する

Messageオブジェクト.isStarred()

isStarredメソッドを使うとスターがついているかを調べることができます。ついている場合はture、ついていない場合はFalseを返します。

メールから日時、件名、本文を取得する

Messageオブジェクト.getDate()

Messageオブジェクト.getSubject()

Messageオブジェクト.getPlainBody().slice(開始位置,文字数)

日時はgetDate()、件名はgetSubject()、本文はgetPlainBody()を使用します。

getPlainBody()の開始位置は取り出す本文の開始位置、文字数は開始位置から何文字抜き出すかを指定します。

関数sendLineに引数を渡してLINEに通知を送信する

sendLine(日時,件名,本文)

関数sendLineに引数である、日時、件名、本文を渡します。

var token = “LINEトークン”

さきほど発行したトークンをダブルクォーションの中に貼り付けます。

LINEに通知済みのメールにスターをつける

Messagesオブジェクト.star()

starメソッドでメールにスターをつけることができます。ここでスターをつけておかないと、後でこのスクリプトを実行したときに、LINEに送った通知を再び送ってしまうことになります。
下記のようにスターがついてないメールのみ、関数sendLineをコールするような処理にしてるためです。

プログラムコードの説明は以上です。

トリガーの設定をする

最後にトリガーを設定します。トリガーとはどのようなタイミングでプログラムを動かすかを指定する設定です。

メニューから「編集」「現在のプロジェクトのトリガー」をクリックします

タイマーを5分ごとに設定します。

これで5分ごとにメールをチェックしてLINEに送るという設定ができました。

プログラムの動作確認

それでは実際にプログラムが動くか試してみましょう。ドキドキしますね~。

Gmailの受信トレイにチャットワークから通知メールが届きました。

おお~!LINEにも通知が届きました。ちょっと感動!

以上で説明を終わります。

まとめ

いかがでしたか?今回はGoogle Apps ScriptでGmailの特定のメールを受信したらLINEと連携して通知する方法を紹介しました。

Gmailに届くメールで重要なメールだけLINEで通知したり、アイデア次第で便利に使えそうです。

今回の内容をまとめます。

  • LINEのWeb APIサービスを使うためのトークンを発行する
  • 特定のメールを受信したらLINEに通知するスクリプトを作成する
  • トリガーの設定をする

以上おつかれさまでした~。

GASを学びたいならこの本がおすすめですよ~。

「詳解! GoogleAppsScript完全入門」は初心者目線でわかりやすいプログラム本
プログラムの参考書ってある程度プログラムを理解していることが前提で書かれていることが少なくありません。この本はとことん初心者の目線に立ち、つまずきそうなポイントなどを丁寧に解説してくれています。GASを学ぼうとしてるかたで、効率的かつ体系的に学びたいかたにおすすめです。

コメント