ワイズリマインダー

gmailの通知が遅延する問題について

gmailを受信した際にAndroidに通知がくるが
たまに数分~数時間遅延するので、代わりにLINEへ通知してみた

必須条件として、サーバ(プログラム)からLINEにメッセージを飛ばせる環境が必要
(こちらについても時間があるときに記載予定)

サンプルのコードでは、
プログラムURLをhttps://HOGEHOGE.com/gmail.php
渡すパラメータを
日時:date
送信者:from
件名:subj
と、しています
各自、URLとパラメータを変更してください

まず、同じ通知が送信されないように、
通知済みのメールを保存しておくスプレッドシートを作成します
Googleドライブにアクセスして、新規 > スプレッドシートをクリック

新しく作成されたスプレッドシートのURLが後に必要になる

次に、Google Apps Scriptsにアクセスして、空のプロジェクトを作成する
そこに記載するコードは次の通り

function myFunction() {
  // 通知済みを保存するスプレッドシート
  var url = "https://docs.google.com/spreadsheets/d/ユニークキー/edit#gid=0";
  var SS = SpreadsheetApp.openByUrl(url);
  var sheet = SS.getSheetByName('シート1');
  
  // 通知済みを配列に格納
  var row = sheet.getLastRow() + 1;
  var notified = new Array();
  for(var i=1; i<row; i++) notified.push(sheet.getRange(i, 1).getValue());
  
  // 未読メールを取得
  var unreads = GmailApp.search("label:inbox is:unread");
  
  // 未読メール処理
  for(var i in unreads){
    var unread = unreads[i];
    var msgs = unread.getMessages();
    for(var j in msgs){
      var msg = msgs[j];
      var date = msg.getDate();
      var from = msg.getFrom();
      var subj = msg.getSubject();
      var id = msg.getId();
      
      // 通知済みはスキップ
      if(notified.indexOf(id) > -1) continue;
      
      // LINEで通知
      var res = UrlFetchApp.fetch("https://HOGEHOGE.com/gmail.php", {
        "method" : "POST",
        "payload" : {
          "date" : date,
          "from" : from,
          "subject" : subj
        }
      });
      var content = res.getContentText("UTF-8");
      
      
      // スプレッドシートに保存
      sheet.getRange(row, 1).setValue(id);
      sheet.getRange(row, 2).setValue("" + date);
      sheet.getRange(row, 3).setValue("" + content);
      row++;
    }
  }
  
}

GASではGmailの受信をトリガーにできないので、
毎分Gmailをチェックするようにする

時計マークをクリックして

分タイマーの1分毎で設定する

これで、通知遅延問題は強引に回避できるかな

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください