Gmailの新着通知をLINEで受け取る by Google App Script
やりたいこと
みなさんは、複数のメールアカウントを持ってますよね?
僕も例に漏れず持っています。人は複数のメールアカウントを持つものです。
そうすると、時にどのアカウントにメールが来たかわからなくなることはないでしょうか。僕はよくあります。
ホテルの予約メールどこいったっけ、と思いながら複数のGoogleとYahoo!のアカウントにログインして、メールを検索するのは大変ですよね。
そこで、複数のアカウントから、ひとつのアカウントにメールを転送して探しやすくするというライフハックがあります。
下記のようなイメージです
これでひとつのアカウントを探せば良くなりますね。
僕はこのまとまったアカウントを親玉と呼んでいます。
さらに欲を出せば、なるべく通知ってまとめたいですよね。
あれ、思いませんか。
LINEとメールはどちらもメッセージアプリなので、僕はどちらかで一方で受け取りたいと思ってしまいます。
そこで、今回は親玉と化したGmailをさらにLINEで通知していきたいと思います。
こんなイメージです
メールの転送設定
それではまずメールをまとめていきます。
Gmailにログインして右上の設定を押します。
設定の「アカウントとインポート」の「他のアカウントでメールを確認」欄から「メール アカウントを追加する」を選択します。
どうでもいいですけどGmailって設定画面ややこしいですよね。
するとウィンドウが出てくるので、追加したいアドレスを入れます。
僕の場合はYahoo!のアドレスです。
POP3による受信を選択して
パスワードを入力して、任意のチェックボックスを入れます。
僕の場合は、上から3つをチェックしました。ラベルは付けておいたほうがいいでしょうね。
これで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に通知する仕組みを作っていきます。
まずはこちらにアクセスして利用を開始します。
こちらに非常に完成に近いコードがあったので、めちゃくちゃ参考にさせていただきます。
左上の「新規スクリプト」を押すとエディタが開きましたね。
最初から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」を選択します。
自分で自分にテストメール送って、直後に実行してみると…
ちゃんと届きました!
そういえば昔、好きだった女の子が、「自分にメール送ったら自分に届くんだけど!」って言いながら大爆笑してました。太陽のように明るい子でした。元気にしてるかな。
トリガーの設定
最後にトリガーを設定していきます。
このスクリプトを一定時間ごとに実行するものです。
上記のコードは直近5分間の新着メールを取得しているので、1分おきに実行する場合は2行目の数字を1に変えてください。
ただし、1分おきだと実行時間が相対的に大きくなるので、取りこぼしが出るかもしれません。そのかわり、よりリアルタイムで通知がきます。
先程の画面から「編集」>「現在のプロジェクトのトリガー」をクリック!右下の「トリガーを追加」を押して、「時間手動型」の「5分おき」に設定します。
これでスクリプトは5分おきに実行されます。5分以内にメールの通知が受け取れるということです。
以上で完成です。
これでメールの通知はオフにしておいて、LINEだけを確認すれば良くなります。Gmailは重要なメールが来たときやメールを検索するときだけ開くようにできます。
役に立ったら、コメント・スキお願いします!