5
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Gmailの新着をLINEに通知する

Last updated at Posted at 2020-04-21

〇問題と解決法

大学から配給されているメールアドレス(ラボメールと呼称します)をスマートフォンに登録して確認していますが、プッシュ通知にもかかわらずラボメールの受信時刻から2時間以上も後になってスマートフォンに通知がきます。しかし、ラボメールをGmailへの自動転送に設定してGmailへ迂回すると、なぜかラグなく受け取ることができます。なので、今までその自動転送設定で過ごしてきましたが、
Gmailの受信を見る
=>Gmailのメールを開いて既読にする
=>ラボメールを開く
=>ラボメールで返信する
かなり手間なうえ、Gmailの受信ボックスに重複したメールが溜まっていく良くない状態だったため、メール環境を整えることにしました。
今回はGmailのメール設定Google Apps Scriptを用いたLINEへの通知の設定をしました。
事後でこの記事を書いていますが、劇的に便利になったかというと正直そうでもないです。

〇参考にしたサイト

参考、というよりほとんどそこから拝借した形になります。
「【2020年版・iPhone向け】Gmailに届いた特定のラベルのメールをLINEに通知する方法|IFTTTではなくGASをつかいます。」
「Gmailの新着通知をLINEで受け取る by Google App Script」

〇やったこと

Gmail側の設定は

  • ラボメールからGmailへの転送設定
  • 転送されてきたメールのみをラベル付けしてアーカイブにいれる

です。

続いて、Google Apps Scriptを用いたLINEへの通知の設定ですが、1つ目の参考サイトをほとんどそのままやっただけです。なので、大半のことは割愛します。
Google Apps Scriptのコードのところは自分なりに色々いじってみました。
変更点は

  • 取得間隔:3秒へ変更(2つ目の参考サイトに倣って)
  • 検索条件指定をto:で指定(ここが重要だった)
  • getMonthのずれ修正
  • メールの本文を50字だけ表示
  • 細かな誤字修正

です。

コード 修正版
var lineToken = "********************"; //LINE notify token
var get_interval = 1; //1分前からの新着メールを取得


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); //秒
 
 //検索条件指定(未読で転送元のメールアドレス宛てのメール)
  var strTerms =  ('is:unread to:(転送元のメールアドレス)');
 
 //取得
 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()+1) + "/" + 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[Subject]" + myMsgs[i].slice(-1)[0].getSubject()
    + "\n\n\n[Message]"+ myMsgs[i].slice(-1)[0].getPlainBody().slice(0,50);
    myMsgs[i][0].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桁だと"14:06"が"14:6"になることです。getMinute()がよくわからなかったので断念。

5
8
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?