Google Sitesをいろいろ触る機会がありました。
しかし Gmailを見るガジェットが見当たらなかったので
未読メールを取得したときの備忘です
ちなみにCodeはコード.gsなどに記載するものです。
//inboxから1件目から最大500件取得してきます var thds = GmailApp.getInboxThreads(0,500);
var thds = GmailApp.search("is:unread", 0, 500);
※スレッドは最大500件ほどしか取得できないようです
取得方法1はめっちゃ重く、
比べて取得方法2はめっちゃ速いです
これは用途の違いかと思います
取得方法1は最初の直近のスレッドを30件ずつ取得して
操作が入った場合に次の31件~60件を取得するやり方であり
未読既読関係なくスレッドを順に見ていく分には適したものと思います
取得方法2は条件付きでスレッドを取得します
当たり前ですが未読情報が少なければ速くなります
今回の用途は未読分だけを表示なので取得方法2で行うほうがいいということです
ちなみに取得条件(今回は is:Unread の部分)はブラウザのGmail検索ボックスで指定可能なもの使用できそうです
比べて取得方法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 件のコメント:
新しいコメントは書き込めません。