Ribbit.work

【GAS】スレッドに引っ張られて、不要なメールまで取得してしまう場合の対処法

Google Apps Script

last modified date2021-8-12

publish date2021-8-11

Google Apps Scriptを用いてGmailのメールを取得する際、取得される単位はスレッド単位になります。

これが厄介で、1通のメールが欲しい場合も、まずはスレッドから取得する必要があります。

データとしては、GmailAppからスレッドオブジェクトを検索して、スレッドオブジェクトにメールオブジェクトが紐づいているようなイメージです。

さらに、一部のメールをゴミ箱へ送り、見た目上スレッドを分断しても、内部的には同一スレッドとみなされ、ゴミ箱からもメールを拾ってきてしまいます。

これ自体はどうしようもないので、ゴミ箱のデータなのか、受信ボックスのデータなのかを判断してやる必要があります。

今回はその判断方法をご紹介します。

コード

const messages = GmailApp.getMessagesForThread(thread);

for (let message of messages) {
  if (message.isInInbox()) {
    console.log(message.getSubject() + 'は受信ボックスに入っています');

  } else if (message.isInTrash()) {
    console.log(message.getSubject() + 'はゴミ箱に入っています');
  }
}

解説

GmailMessage - isInInbox

GmailMessageオブジェクトはメール1件単位の情報を持っており、isInboxはそのメールが受信ボックスに存在する場合はTrueを返します。

一度対象メールを含むスレッドを取得する必要はありますが、そのスレッド内の各メールが受信ボックスにいるのかを判定し、目的のデータだけを取得することができます。

GmailMessage - isInTrash

isInTrash関数も同様に、対象メールがゴミ箱に存在する場合はTrueを返します。

注意点

注意すべきなのは、GmailThreadオブジェクトにも同じ関数が用意されているということです。

スレッド単位でゴミ箱にいるのか、受信ボックスにいるのか判定しても、画面で確認できる結果とは異なる場合があるので注意してください。

この記事をシェア

この記事を読んだ方におすすめの記事

【GoogleAppsScript】Gmailから特定のメールを取得する
2021-8-11

【GoogleAppsScript】Gmailから特定のメールを取得する

Google Apps Script
【GAS】スプレッドシートからJSONへの変換を短く安全に記述する方法
2021-6-23

【GAS】スプレッドシートからJSONへの変換を短く安全に記述する方法

Google Apps Scriptjavascript

最新の記事

kuromoji.jsで形態素解析
2021-12-4

kuromoji.jsで形態素解析

TypeScriptJavaScript
レコードのサブテーブルを並び替えて登録する【Kintone JavaScriptカスタマイズ】
2021-12-4

レコードのサブテーブルを並び替えて登録する【Kintone JavaScriptカスタマイズ】

JavaScriptKintone
レコード一覧表示時(app.record.index.show)のサンプルコード集【Kintone】
2021-11-29

レコード一覧表示時(app.record.index.show)のサンプルコード集【Kintone】

JavaScriptKintone
スライダーを使って数値を設定できるKintoneプラグイン【無料公開】
2021-11-26

スライダーを使って数値を設定できるKintoneプラグイン【無料公開】

KintoneJavaScriptTypeScript