見出し画像

Gmailの新着通知をLINEで受け取る by Google App Script

やりたいこと

みなさんは、複数のメールアカウントを持ってますよね?
僕も例に漏れず持っています。人は複数のメールアカウントを持つものです。

そうすると、時にどのアカウントにメールが来たかわからなくなることはないでしょうか。僕はよくあります。
ホテルの予約メールどこいったっけ、と思いながら複数のGoogleとYahoo!のアカウントにログインして、メールを検索するのは大変ですよね。

そこで、複数のアカウントから、ひとつのアカウントにメールを転送して探しやすくするというライフハックがあります。
下記のようなイメージです

画像1

これでひとつのアカウントを探せば良くなりますね。
僕はこのまとまったアカウントを親玉と呼んでいます。

さらに欲を出せば、なるべく通知ってまとめたいですよね。
あれ、思いませんか。

LINEとメールはどちらもメッセージアプリなので、僕はどちらかで一方で受け取りたいと思ってしまいます。
そこで、今回は親玉と化したGmailをさらにLINEで通知していきたいと思います。

こんなイメージです

画像2


メールの転送設定

それではまずメールをまとめていきます。
Gmailにログインして右上の設定を押します。

画像3


設定の「アカウントとインポート」の「他のアカウントでメールを確認」欄から「メール アカウントを追加する」を選択します。
どうでもいいですけどGmailって設定画面ややこしいですよね。

画像4


するとウィンドウが出てくるので、追加したいアドレスを入れます。
僕の場合はYahoo!のアドレスです。

画像5


POP3による受信を選択して

画像6


パスワードを入力して、任意のチェックボックスを入れます。
僕の場合は、上から3つをチェックしました。ラベルは付けておいたほうがいいでしょうね。

画像7

これでGmailにメールを集める設定は完了です。無事に受信できたでしょうか。件数が多い場合は時間がかかりますが、寝て起きたら終わっています。

これで親玉Gmailが出来上がりました。

親玉GmailのメッセージをLINEで通知させる

さて、Gmailに届いたメールをLINEで通知するのはどうしましょう。
以前はIFTTTでできたようですが、2019年3月にトリガーとしてのGmailが利用できなくなったようです。Webサービスって変化が早いから困りますよね。

いろいろ調べたところ、Google App Script(GAS)でやる方法が良さそうです。
GASの仕込みをやる前に、LINE Notifyのトークンを取得しておいてください。

LINE Notifyのページはこちらです。


この記事が参考になります。


Google App Scriptの仕込み

GASでLINEに通知する仕組みを作っていきます。
まずはこちらにアクセスして利用を開始します。


こちらに非常に完成に近いコードがあったので、めちゃくちゃ参考にさせていただきます。

左上の「新規スクリプト」を押すとエディタが開きましたね。

画像8

最初からmy function()とやらが書かれてますが消して、下記のコードを書きます。

var lineToken = "xxxxxxxxxxxxxx"; //LINE notify token
var get_interval = 5; //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) + 3); //秒にして+3秒しておく
 
 //検索条件指定
 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] = " " + myMsgs[i].slice(-1)[0].getDate().getMonth() + "/"+ myMsgs[i].slice(-1)[0].getDate().getDate() 
    + " " + myMsgs[i].slice(-1)[0].getDate().getHours() + ":" + myMsgs[i].slice(-1)[0].getDate().getMinutes() 
    + "\n[from]" + myMsgs[i].slice(-1)[0].getFrom()
    + "\n\n[sbject]" + myMsgs[i].slice(-1)[0].getSubject();
    // + "\n\n[Message]\n"+ myMsgs[i].slice(-1)[0].getPlainBody();
 }
 
 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])
   }
 }
}

​ほとんど参考記事のままです。大阪からで恐縮ですが、拝ませていただきます。

僕の場合は件名だけ知らせてくれれば良かったのと、受信日時を「8/8 12:34」のように、シンプルに表示したかったので、軽く変更してます。

本文も見たい場合は、34行目のコメントアウトを外せばいいです。

また、後ほどこのスクリプトを1分 or 5分おきで実行するのですが、参考記事のまま実行すると、その単位時間ぴったりにきたメールが通知されなかったので19行目で3秒のバッファを持たせています。
(逆に複数届くかもしれないけど、届かないよりは良い)

ここわかりにくくてハマったんですが、上の「関数を選択」から、「main」を選択します。

画像9

自分で自分にテストメール送って、直後に実行してみると…
ちゃんと届きました!

画像10

そういえば昔、好きだった女の子が、「自分にメール送ったら自分に届くんだけど!」って言いながら大爆笑してました。太陽のように明るい子でした。元気にしてるかな。

トリガーの設定

最後にトリガーを設定していきます。
このスクリプトを一定時間ごとに実行するものです。

上記のコードは直近5分間の新着メールを取得しているので、1分おきに実行する場合は2行目の数字を1に変えてください

ただし、1分おきだと実行時間が相対的に大きくなるので、取りこぼしが出るかもしれません。そのかわり、よりリアルタイムで通知がきます。

先程の画面から「編集」>「現在のプロジェクトのトリガー」をクリック!右下の「トリガーを追加」を押して、「時間手動型」の「5分おき」に設定します。

画像11

これでスクリプトは5分おきに実行されます。5分以内にメールの通知が受け取れるということです。

以上で完成です
これでメールの通知はオフにしておいて、LINEだけを確認すれば良くなります。Gmailは重要なメールが来たときやメールを検索するときだけ開くようにできます。

役に立ったら、コメント・スキお願いします!


いいなと思ったら応援しよう!