【GAS】GmailのメッセージIDを利用して新規メールのみをスプレッドシートに追加する


Gmail新規メッセージIDアイキャッチ
みなさん、こんにちは!
もり(@excelprog)です。

前回の記事で、Gmailで検索条件にヒットしたスレッドの全メールをスプレッドシートに書き込むスクリプトを紹介しました。

【GAS】Gmailの特定条件で検索したスレッドの全メールを取得してスプレッドシートに書き出す
Google Apps Scriptを使用して、Gmailのスレッドを特定の条件で検索し、スレッドに含まれるすべてのメールを取得してスプレッドシートに書き出す方法についてお伝えします。

このスクリプトは、実行するたびに、検索条件にヒットしたすべてのメッセージを書き出す仕組みになっています。

今回の記事では、Gmailの「メッセージID」を使用して、検索条件にヒットしたメッセージのうち、新規メッセージのみをスプレッドシートに追記するように改良していきます!

前回のスクリプトの確認

前回作成したスクリプトがこちらです。

スクリプト修正のポイント

前回のスクリプトと今回のスクリプトの違いです。

【例】1日に3回実行・検索条件にヒットしたメッセージの件数

  • 1回目:4件ヒット
  • 2回目:7件ヒット(=新規3件)
  • 3回目:9件ヒット(=新規2件)

すべてのメッセージを書き込む(前回の記事)

スクリプトを実行するたび、検索条件にヒットしたすべてのメッセージを、2行目を起点として書き込みました。
つまり、1回目・2回目の実行結果は、3回目の実行結果によって上書きされます。
GmailメッセージID追記型2

新規メッセージのみを追記する(今回の記事)

E列にメッセージIDの列を用意します。
メッセージIDを使用して前回実行からの差分を判定し、新規メッセージのみを末尾に追記していきます。

GmailメッセージID追記型1

メッセージIDを取得して新規メッセージのみをスプレッドシートに書き出す

それではスクリプトを修正していきましょう!

メッセージIDを取得する

メッセージIDとは、Gmailの各メッセージに一意に割り当てられたIDのことです。
このメッセージIDはgetIdメソッドで取得できます。

Messageオブジェクト.getId()

二次元配列myMsgsに格納したそれぞれのメッセージから「メッセージID」を取得するコードをfor文の中に組み入れます。

こちらの記事もあわせてご覧ください。

Google Apps ScriptでGmailのメッセージIDを取得する方法
Google Apps Scriptでフォーム送信メールからデータを取得してスプレッドシートに蓄積していくツールを作っています。今回は、GmailメッセージのメッセージIDを取得する方法です。

スプレッドシートにメッセージIDが存在するか判定する

取得した「メッセージID」を書き込む列をスプレッドシートのE列に用意して、検索条件にヒットしたメッセージの「メッセージID」が既に存在するか判定します。

  • 存在する→書き込み不要
  • 存在しない→新規メッセージなので書き込む

判定関数のスクリプトがこちらです。
オブジェクト変数のmySheetはグローバル変数として定義しておきます。

someメソッドの使い方はこちらの記事をご覧ください。

GASで列データの配列に特定の値が含まれているかを判定するsomeメソッドの使い方
Google Apps Scriptでフォーム送信メールからデータを取得してスプレッドシートに登録していくツールを作成しています。今回は、配列の中に特定の値が含まれているか判定をするsomeメソッドの使い方です。

hasIdの返り値はこのようになります。

  • メッセージIDが存在する → true
  • メッセージIDが存在しない → false

新規メッセージのデータを配列に格納する

if文を使用して、メッセージIDがスプレッドシートに存在するかチェックし、存在しない場合は、pushメソッドで配列変数valMsgsにデータを格納します。

論理NOT演算子です。条件式の真偽値を反転させます。

hasIdの返り値がtrueでなければ(=falseであれば)、処理を実行します。

スプレッドシートに書き出す

配列変数valMsgsに格納されたデータを、setValuesメソッドでスプレッドシートの末尾に書き込みます。
ポイントは2点です。

  • valMsgsの要素数が0の場合は書き込まない(=新規メッセージ無し)
  • getRangeメソッドの行番号に、最終行+1を指定する(末尾に追記する)

スクリプトまとめ

以上をまとめたスクリプトがこちらです。

実行結果

検索条件にヒットした新規メッセージについて、この6つの情報が取得できます。

  1. 日付
  2. 差出人
  3. 件名
  4. メッセージ(冒頭200文字)
  5. メッセージID
  6. パーマリンク

まとめ

Gmailのメッセージに一意に割り当てられたメッセージIDを取得・利用して、スクリプトを実行する都度、新規メッセージのみをスプレッドシートに追記する方法を紹介しました。

スクリプトを実行するたびに全件の書き込みをするよりも、新規メッセージのみを判定して追記していくほうが、「データ蓄積」という観点ではより合理的ですよね。

ほんのひと手間くわえて、よりスマートなスクリプトを作成していきましょう。

今後もGASの便利なツールを紹介していきます。

どうぞお楽しみに!

連載目次:GASでGmailに届いた問い合わせメールを分析する

お仕事の現場では日々様々なメールが届きます。その中で重要なのが「問い合わせメール」ですね。このシリーズでは、Webサイトからの問い合わせメールを自動でスプレッドシートに取り込んだり、チャットワークに送る方法についてお伝えしていきます。

  1. 【GAS】Gmailに送られた過去のメールから特定条件のメールを検索して取得する
  2. 【GAS】Gmailからメールを検索してスプレッドシートに書き出す
  3. フリーランスの仕事はどこから来たか、独立して1年間の受注件数を全て晒す
  4. 【GAS】新たな問い合わせメールをGmailで取得しスプレッドシートに随時追加する
  5. 【GAS】Gmailに来た問い合わせをチャットワークに通知してかつタスク追加する
  6. Google Apps ScriptにおけるGmailの読み取り件数の制限とその対処法
  7. 【GAS】Gmailの特定条件で検索したスレッドの全メールを取得してスプレッドシートに書き出す
  8. 【GAS】GmailのメッセージIDを利用して新規メールのみをスプレッドシートに追加する

コメント