Ribbit.work

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

Google Apps Script

last modified date2021-9-16

publish date2021-8-11

Google Apps Scriptを用いることで、紐づくアカウントのGmailの情報を操作することができます。

ただ、このGmailから取得できる情報が独自の構造を持っており、一発でほしいメール情報を取得することができません。

今回は対象のメールをGoogle Apps Scriptから取得する方法を紹介します。

Gmailから取得される情報の構造について

基本的にGmailの情報を取得する際は、グローバルに定義されているGmailAppオブジェクトを使用します。

詳細は後ほど紹介しますが、このGmailAppから取得できるのは1件1件のメール情報ではなく、スレッドと呼ばれるメール群単位でのみ取得されます。

Gmailをよく利用されるかたは、UIでもメールがスレッド単位で集約されているのを見たことがあるかもしれません。

図解すると以下のような構造です。

GmailApp
  ├─ThreadA
  │      MailA
  │      MailB
  │      MailC
  │      
  ├─ThreadB
  │      MailA
  │      MailB
  │      MailC
  │      
  └─ThreadC
          MailA
          MailB
          MailC

ですので対象のメール1件を取得しようと思った場合、まずそのメールが含まれているスレッドを取得する必要があります。

コード

const MAIL_TITLE = '対象メールのタイトル';

// フリーワードでも広い範囲から検索してくれますが
// 今回はメールのタイトルから検索します。
const threads = GmailApp.search('subject: "' + MAIL_TITLE + '"');

for (let thread of threads) {

  // スレッド内のメールを全て取得
  const messages = GmailApp.getMessagesForThread(thread);

  for (let message of messages) {

    // メールのタイトルを取得
    const subject = message.getSubject();

    // タイトルが対象と一致している場合は終了
    if (subject.indexof(MAIL_TITLE) !== -1) {
      return message;
    }
  }
}

解説

上述した通り、まず対象のメールが含まれているスレッドを取得します。

取得にはGmailApp.searchを使用し、引数には検索クエリを設定します。

検索クエリはUIを使用した場合の検索条件と同様で、スター付きだけ、ゴミ箱は除くなど詳細に設定できます。

ただ注意すべきなのは、ここで詳細に検索したとしても、取得されるのは条件にヒットしたメールを含むスレッドだということです。

ゴミ箱のメールを除いたとしても、対象メールのスレッド内にゴミ箱内のメールが含まれていた場合、そのメールまで取得してしまいます。

そのあたりの不要なメールを省く方法は別の記事でも紹介しています。

参考

Class GmailApp

この記事をシェア

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

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

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

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