menu
書いてる野郎
orebike@gmail.com
GAS で Gmail を扱う。
https://developers.google.com/apps-script/reference/gmail/gmail-app
若干特殊なので気をつける必要がある。 GAS では GmailApp というオブジェクトを使ってメールにアクセスするのだが、Gmail ではメール1通1通は管理できず、スレッドという単位で管理することになる。
スレッドの中にメールの個別にあたるリストが入っているという構造になっている。
そしてメールを検索する search というメソッドはこのスレッドの配列を返してくる。 スレッドの中には複数のメールが入っている可能性がある。これがメールのリストとして格納されている。 つまり検索結果が出てそのメールを読みたい場合は、スレッドのループ、メッセージリストのループ、メッセージのループというループをする必要がある。
function hoge() { var resultList = []; var threads = GmailApp.search('hogehoge', 0, 30); threads.forEach(function(thread){ thread.getMessages().forEach(function(messageList){ messageList.forEach(function(message){ resultList.push(message.getSubject()); }); }); }); }
癖があるのがこの search にわたすパラメータである。 最初の文字列は Gmail の検索画面で書き込む検索条件をそのまま書かけると思って良い。 次の数字がどこのスレッドから何スレッド取得するかを示している。 結果はおそらく日時の降順で固定である。
30件ずつ取得したいなら
GmailApp.search('hogehoge', 0, 30); GmailApp.search('hogehoge', 30, 30); GmailApp.search('hogehoge', 60, 30);
このようにパラメータを書けばいい。0 から 30スレッドということは thread index で言う 29スレッドまで取得するということになる。なので次の取得は 30 からとなる。
この同時取得数は 500 が限界になっていて、大量のメールを処理したいなら必ず分割がひつようになる。