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でフォーム送信メールからデータを取得してスプレッドシートに蓄積するツールの完全版

The following two tabs change content below.
1976年こどもの日生まれ。東京板橋区在住。「ITで日本の『働く』の価値を上げる!」をテーマに、VBA&GASの開発、講師、コンサル、執筆本を中心に活動しています。→詳しいプロフィールはコチラ ★ご依頼・ご相談はお気軽にどうぞ!→お問い合わせはコチラ ★フォロー頂ければ嬉しいです。