【GAS】Gmailの未読メールで取得できないものがある場合

- JavaScript -
2022.07.26
GAS/Google Apps Script

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()で判定することで、漏れなく未読メールを抽出して処理を加えることができるようになりました。

↑TOP