先日、GmailからGoogle Apps Scriptを使ってGoogleスプレッドシートに書き込むスクリプトを書く仕事の話をしましたが、スレッド関連で調べたことを備忘録として書いておきます。
一つひとつはよく知られている情報だと思います。
取得するメールは、あるWebサイトのメールフォームからGmailに転送されて来ます。
例えば今日は2月2日でスレッドのスタートが2月1日のメール、そこに2月2日のメールがくっ付いているとします。
このスレッドのメールは、「昨日」を指定してもゴミ箱に移らず、「今日」を指定してもサーチできません。
なので、ゴミ箱に移すには「今日以前」を指定してスレッドを全部移すしかありません。一度に削除できるのは最大100件までらしいのでこんな感じ。
var myThreads = GmailApp.search('older_than:0d', 0, 99);
GmailApp.moveThreadsToTrash(myThreads);
実際にはトリガーを使って下の方法でGoogleスプレッドシートに書き込んで行くのですが、上記の削除は毎日深夜にトリガーで実行します。
仮にこのスレッドをゴミ箱に移したあと、スレッドに続くはずのメールが来たとします。
このメールも「今日」を指定してもサーチできないので、「昨日以降」を指定してゴミ箱の情報まで含めてサーチすることになります。こんな感じ。
var myThreads = GmailApp.search('subject:メールの件名 after:2019/02/01', 0, max);
var myMsgs = GmailApp.getMessagesForThreads(myThreads);
var myDate = [];
var myBody = [];
for(var i = 0;i < myMsgs.length;i++){
for(var j = 0;j < myMsgs[i].length;j++){
myDate[j] = myMsgs[i][j].getDate();
myBody[j] = myMsgs[i][j].getPlainBody();
// 何かの処理
}
}
Gmailサーチの件数制限は1日2万回のようです。
スクリプトではゴミ箱のスレッドを削除できないようなので、定期的に手動で削除する必要があります。
あとは、Googleスプレッドシートに書き込み済みのメールの最終タイムスタンプとmyDate[j]を比較して、最終タイムスタンプよりあとのメールを書き込んで行けばいいですね。