Google Apps ScriptでGmailのメッセージIDを取得する方法


みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

Google Apps Scriptでフォーム送信メールからデータを取得してスプレッドシートに蓄積していくツールを作っています。

前回の記事はこちら。

Google Apps Scriptでメールから正規表現で抽出したデータをスプレッドシートに蓄積する方法
Google Apps Scriptでフォーム送信メールからデータを抜き出してスプレッドシートに登録するツールを作成しています。今回はメールで取得したデータをスプレッドシートに蓄積する方法をお伝えします。

メールからデータを抽出してスプレッドシートに書き込むまでを作成しました。

ただ、このスクリプトを複数回実行すると、何度も同じメッセージからデータを取得してしまうという問題があるんですね。

今回はこの課題を「メッセージID」を使うことで解決をしていきます。

ということで、Google Apps ScriptでGmailメッセージのメッセージIDを取得する方法です。

では、行ってみましょう!

前回のおさらいとお題

では、まず前回のおさらいから

muFunctionでは、「[テスト]フォーム登録通知」という件名のスレッドを検索し、そのメッセージを取得します。

その各メッセージについて、関数fetchDataにより欲しいデータである「名前」と「年齢」を抽出して、スプレッドシートの最終行にそのデータを追加していくというものです。それで、fetchDataには正規表現を使用しています。

今回のお題

しかし、このスクリプトは複数回実行すると、以下のように同じメッセージを何度も取得して、データを抽出してしまうので、重複データが増えていってしまいます。

GASで同じデータが蓄積されてしまう

今回はこの何度も同じメッセージからデータを取得してしまうという問題を解決していきます。

メッセージIDを取得する

この問題を解決する方法はいくつか考えられます。

以下記事のように、取得したメッセージを既読にすることを「処理済み」の目印とする方法もあります。

【GAS】新たな問い合わせメールをGmailで取得しスプレッドシートに随時追加する
Gmailの未読メールを取得する方法、メールを既読にする方法などを活用して、Google Apps Scriptで問い合わせメールを都度スプレッドシートに追加していく方法についてお伝えします。

今回は、別の方法としてメッセージIDを使う方法を考えていきたいと思います。

メッセージIDとは

メッセージIDとはその名の通り、メッセージに一意に割り当てられたIDです。

そして、そのメッセージIDを使って、重複を防ぐための方針は以下の通りです。

  • getMessagesForThreadsメソッドで取得した各メッセ―ジについて、メッセージIDを取得する
  • 既にスプレッドシートのC列に同じメッセージIDが存在していないならば
    • 初めて取得するメッセージなので、データを取得する
    • スプレッドシートには、名前、年齢とともにメッセージIDを追加する

これで、同じメッセージから取得しようとするのを防ぐのです。

getIdメソッドでメッセージIDを取得する

メッセージIDを取得するには、getIdメソッドを使用します。

書き方はこちら。

Messageオブジェクト.getId()

試しにメッセージIDを取得してみましょう。

このスクリプトを実行してみますと

GASでメッセージIDをログ出力

それぞれのメッセージのメッセージIDを取得することができました。

メッセージIDをスプレッドシートに書き込む

これを踏まえて、メッセージIDもデータとともにC列に書き込むようにスクリプトを修正をしてみます。

10行目でメッセージIDを取得して、15行目でappendRowの配列に追加をしています。

実行結果はコチラ。

GASでメッセージIDをスプレッドシートに書き出す

バッチリOKですね。

まとめ

以上、Google Apps ScriptでGmailのメッセージIDを取得する方法をお伝えしました。

  • 同じメッセージを重複して取得しないようにするアルゴリズムの考え方
  • メッセージIDを取得するgetIdメソッド

あとは、スプレッドシート上にそのメッセージIDが存在するかどうかを判定する必要があります。

その部分は次回以降お伝えしていきますね。

Google Apps Scriptでスプレッドシートの列データを配列として取得する方法
Google Apps Scriptでフォーム送信メールからデータを取得してスプレッドシートにまとめるツールを作成しています。今回はスプレッドシートの列データを配列として取得する方法についてお伝えします。

どうぞお楽しみに!

連載目次:GASで正規表現を使ってデータを抽出&登録

正規表現を使うとGoogle Apps ScriptでメールやHTMLドキュメントからデータを抽出することができます。本シリーズでは、フォーム送信の通知メールからデータを抽出してスプレッドシートに追加するツールの作成を目指します。
  1. Google Apps Scriptで正規表現を使って必要な情報を抽出する最も簡単なスクリプト
  2. Google Apps Scriptで正規表現でマッチした文字列から不要な部分を削除する
  3. Google Apps ScriptでGmailの受信メールから正規表現でデータを抽出する
  4. Google Apps Scriptでメールから正規表現で抽出したデータをスプレッドシートに蓄積する方法
  5. Google Apps ScriptでGmailのメッセージIDを取得する方法
  6. Google Apps Scriptでスプレッドシートの列データを配列として取得する方法
  7. GASで列データの配列に特定の値が含まれているかを判定するsomeメソッドの使い方
  8. GASでフォーム送信メールからデータを取得してスプレッドシートに蓄積するツールの完全版

タイトルとURLをコピーしました