Gmailの受信をLINEに通知する方法

仕事とプライベートをなんとか結び付けたいバンドマン岡村です。
みなさん、スマホに来る通知を見逃していませんか?
僕は見逃します!!なので対策をしてみました!

今回はGmailをLINEに通知する方法を紹介します。
バンドに限らず、何かチームに所属していて、
複数人でGmailを管理している方におすすめしたい手法です。

複数人でGmailを管理するとどのようなことが起きるのかというと、
各メンバーのスマホにGmailのポップアップ通知が届いても、
自分以外のメンバーが先にメールを開いてしまうと自分のスマホからは通知が消えてしまいます。
そのためメールが来ていたことに気づかず、返信せず放置してしまっていた、というケースが発生するのです。しました。
とはいえメールを最初に読んだら他のメンバーに周知するなんてことを毎回行うのには手間がかかりすぎます…
そこでいろいろ調べてみたところ、以下の記事を発見しました。

https://qiita.com/Damon/items/bbe6350ef1a4a10fe397

Gmailを受信したらLINEグループに通知する方法、というものでした。
LINE通知なら他の誰かが先にメールを開いても通知が消えるといったことはないので、
メールの見逃しがなくなるのです!

それでは実際に行った手順を紹介していきたいと思います。
プログラムを触りますが、コピペだけでもいけるのでぜひ試していただきたいです。
それではどうぞ!

目次

LINE Notifyにアクセス。
LINEアカウントでログインし、「マイページ」をクリック。

「トークン名」は自由に設定。
「通知を送信するトークルームを選択してください」は通知を送信したいグループを選択。
岡村の場合はバンドメンバーの中でもGmailやSNSを管理するメンバーだけを招待した、
通知専用のグループをあらかじめ作っておきました。
話し合いを妨げるといけないので!
設定できたら「発行する」をクリック。

発行されたトークンをコピーしてメモしておく。

GoogleAppsScriptにアクセス。
「新しいプロジェクトを作成」をクリック。

プロジェクト名を自由に設定。

エディタ画面に以下のソースコードをコピペ。

var lineToken = "hogehogehogehoge"; //LINE notify token
var get_interval = 5; //〇分前~現在の新着メールを取得 #--トリガーをこれに合わせておく!!


function send_line(Me){
  var payload = {'message' :   Me};
  var options ={
        "method"  : "post",
        "payload" : payload,
        "headers" : {"Authorization" : "Bearer "+ lineToken}  
      };
    UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options);
}


function fetchContactMail() {
  //取得間隔
  var now_time= Math.floor(new Date().getTime() / 1000) ;//現在時刻を変換
  var time_term = now_time - (60 * get_interval); //変換

  //検索条件指定
  var strTerms = '(is:unread after:'+ time_term + ')';

  //取得
  var myThreads = GmailApp.search(strTerms);
  var myMsgs = GmailApp.getMessagesForThreads(myThreads);
  var valMsgs = [];
  for(var i = 0; i < myMsgs.length;i++){
    valMsgs[i] = "\n【date】: " + myMsgs[i].slice(-1)[0].getDate() 
                  + "\n【From】: " + myMsgs[i].slice(-1)[0].getFrom()
                  + "\n【Subject】: " + myMsgs[i].slice(-1)[0].getSubject()
                  + "\n【Body】: \n" + myMsgs[i].slice(-1)[0].getPlainBody().slice(0,200); 
  //  myMsgs[i].markRead(); //メッセージを既読にする
  }

  return valMsgs;

}

function main() {
  new_Me = fetchContactMail()
  if(new_Me.length > 0){
    for(var i = new_Me.length-1; i >= 0; i--){
      send_line(new_Me[i])
    }
  }
}

ソースコードを少し修正。

  • 1行目のlineTokenに代入されているhogehogehogehogeを手順1:LineNotifyからアクセストークン取得するにてメモを取ったトークンに変更。
  • 2行目のget_intervalに代入されている5をお好みの数値に変更。(何分ごとに通知が欲しいのか?岡村は5分ごとに欲しいので5です。新しい受信がなかった場合の通知はありません!)

修正できたら「プロジェクトを保存」をクリック。

少し解説をすると、

  • mainメソッドがこれから設定するトリガーによって実行される。
  • fetchContactMailメソッドが呼び出され、未読かつ、get_intervalに代入した○分前~現在時刻の間に受信したメールの内容を取得する。
  • メールを取得できていれば(新しい受信があれば)send_lineメソッドを呼び出し、LINEのAPIを利用しLINE通知を行う。

といったプログラムになっています。

「トリガー」をクリック。
「トリガーを追加」をクリック。

以下のように設定し、保存。

  • 「実行する関数を選択」→main
  • 「デプロイ時に実行」→Head
  • 「イベントのソースを選択」→時間主導型
  • 「時間ベースのトリガーのタイプを選択」→分ベースのタイマー
  • 「時間の感覚を選択」→手順2:GoogleAppsScriptにプログラムを書くのget_intervalに代入した数値と同じ値。岡村の場合は5分おき!
  • 「エラー通知設定」→毎日通知を受け取る

このようにトリガーを設定することにより、5分おきにmainメソッドが実行されます。
Gmailの受信をLINE通知するための設定はこれで完了です。

設定は完了ですが、本当に送信されるのか、テストしていきます。

Gmailアドレスに適当なテストメールを送信。

エディタ画面で「実行する関数を選択」はmainを選択し、「実行」をクリック。

「このアプリは確認されていません」と表示された場合、
詳細>"プロジェクト名"(安全ではないページ)に移動>許可
の順でクリック。

これでLINE通知が来るようになっていればバッチリです!

今回作成した仕組みを使って、Gmail以外にもSNSのダイレクトメッセージ通知を一緒に受け取るための設定も紹介します。

Twitterの例で紹介します。
Twitterの場合もGmailと同様、
他の誰かが先にダイレクトメッセージを読んでしまうと
ポップアップ通知が消えてしまうので、
何かしら消えない通知が欲しいところ。
そこで、Twitterにログインし、以下のように設定していきます。

設定とサポート>設定とプライバシー>通知>メール通知
ダイレクトメッセージのみにチェックを入れる。

このように設定することにより、

Twitterダイレクトメッセージを受信したこと通知するメールをGmailに送信
↓
Gmailがメールを受信したことをLINEに通知

という流れができるため、SNSダイレクトメッセージの見逃がしもなくなります!
Twitter以外でもメール通知機能を持ったSNSであれば、同じように設定することでLINE通知を行うことができます。

■あとがき

以上がGmailの受信をLINEに通知する方法でした。
GoogleAppsScriptを初めて触ってみましたが、感想としてはいろいろな可能性を感じてワクワクしました。
バンドの軽作業、もっとラクしたい…!という欲がどんどん湧き上がってきました

そこで最近だと、
GoogleSpreadSheetに入力した内容を毎月自動でdiscordにリマインドしてくれる、
といったプログラムを書いてみました。
既存のbotだと細かい設定ができなくて融通が利かなかったりしたので。
まあテストで動いたっきり指定した当日に動いてくれなかったんですけどね…

めげずに頑張ります。仕事で得た技術をプライベートにも活かしたい。
岡村がいるからメンバーがラクできるバンドにします。
岡村本人は浮いた時間で"ゆるキャン△"を見ます。みんな幸せ!

また何か作ったら共有します!

お問い合わせ

サービスに関するご相談やご質問などこちらからお問い合わせください。

03-55107260

受付時間 10:00〜17:00