2015年6月3日水曜日

Google Apps ScriptでGmail取得してみる

ちょっと趣向を変えてGoogle Apps Script(以下:GAS)について
Google Sitesをいろいろ触る機会がありました。
しかし Gmailを見るガジェットが見当たらなかったので
未読メールを取得したときの備忘です

ちなみにCodeはコード.gsなどに記載するものです。

  • スレッド取得方法1
  • //inboxから1件目から最大500件取得してきます
    var thds = GmailApp.getInboxThreads(0,500);
    
  • スレッド取得方法2
  • var thds = GmailApp.search("is:unread", 0, 500); 
    
    ※スレッドは最大500件ほどしか取得できないようです

    取得方法1はめっちゃ重く、
    比べて取得方法2はめっちゃ速いです
    これは用途の違いかと思います

    取得方法1は最初の直近のスレッドを30件ずつ取得して
    操作が入った場合に次の31件~60件を取得するやり方であり
    未読既読関係なくスレッドを順に見ていく分には適したものと思います

    取得方法2は条件付きでスレッドを取得します
    当たり前ですが未読情報が少なければ速くなります
    今回の用途は未読分だけを表示なので取得方法2で行うほうがいいということです

    ちなみに取得条件(今回は is:Unread の部分)はブラウザのGmail検索ボックスで指定可能なもの使用できそうです
    あとはスレッド分ループしてメッセージを取得します。
      var oReturn =new Object();
      var i = 0;
      var cFrom, cTo, cDate, cSub, cMsgid, cThdurl
      for(var n in thds){
        var thd = thds[n];
        var msgs = thd.getMessages(); 
        cThdurl = thd.getPermalink(); //メッセージへのLinkURL取得
        for(m in msgs){
          var msg = msgs[m];
          cFrom =msg.getFrom();
          //自分が出した返信メールも未読にカウントされているので除外する
          var searchchar = Session.getActiveUser().getEmail();
          var searchidx = cFrom.search(searchchar);
          if (searchidx <= 0 && msg.isUnread() == true){
          cTo = msg.getTo();
          cDate = Utilities.formatDate(msg.getDate(),'JST','yyyy-MM-dd HH:mm:ss');
          cSub = msg.getSubject();
          cMsgid = msg.getId();
          oReturn['from' + i] =cFrom;
          oReturn['to' + i] = cTo;
          oReturn['date' + i] = cDate;
          oReturn['subject' + i] = cSub;
          oReturn['msgid' + i] = cMsgid;
          oReturn['url' + i] = cThdurl;
          i++; //←件数をカウント
          }
        }
      }
      oReturn['count'] = i; //←件数
    
    上記以外にもGASにはできることが多数あるので リファレンス 辺りを調べれば幸せになれると思います

    0 件のコメント: