【GAS】Gmailの未読メールで取得できないものがある場合
- JavaScript -
2022.07.26
Google Apps Script/GASで抽出取得したGmailの未読メールに対して処理を加えようとして、
ん?確実に未読メールがあるのにmessage.isUnread()がfalseになってる?取得できていない未読メールがあるぞ?
...ということがあったので、解決策をメモしておきます。
【GAS】Gmailの未読メールで取得できないものがある場合
結論だけ書くと、threadsをforEachで回し、その中で取れるmessagesをさらにforEachで回してisUnread()で判定します。
以下、コード例。
Google Apps Scriptfunction myFunc() {
//検索条件
let query = 'label:XXX is:unread';
//条件に合致するメールのスレッドを取得(この場合15件)
let threads = GmailApp.search(query, 0, 15);
let count = 0;
// threadsを回す
threads.forEach(thread => {
let messages = thread.getMessages();
// 中でmessagesを回す
messages.forEach(message => {
if (message.isUnread()) {
count++;
console.log(count + '件目');
console.log("本文" + message.getPlainBody());
// 未読メールに対してやりたい処理を書く
// 次回から読み取らないよう既読に
message.markRead();
}
})
})
}
このように、threadsに含まれるmessages全てに対してisUnread()で判定することで、漏れなく未読メールを抽出して処理を加えることができるようになりました。