見出し画像

はじめてのGAS(9)Gmailで新着メールのみ取得して、重複は除外する

Google Apps Script(GAS)で、Gmailからメールを取得すること自体は簡単ですが、「重複するメールを除外」する実装を加えると、やや難しくなります。

「重複するメールを除外」する実装が難しい原因は?

難しくなる原因は、GASの仕様で特定の1通のメールを取得することはできず、必ず「スレッド」ごとの取得を強いられるからです。そのため、「スレッド」の挙動をよく理解することが大切です。

ラベルは「スレッド」に付けられる

メールの重複を防ぐために、処理が完了したメールに「処理済み」ラベルの目印を付けて、区別する方法が思いつきます。しかし、残念ながらGASの仕様で1通のメールにラベルを付けることはできず、「スレッド」にラベルを付ける方法しかありません。

そのため、スレッド内のメールが必ず1通のみであれば、この方法でも重複を防げますが、スレッド内に複数のメールが存在するような場合、意図しない動作になる可能性があります。

想定外なスレッドの挙動

「スレッド」になるメールは、送信・返信を繰り返した一連のメールの他に、同じ送信者から、同じ件名のメールが短時間で届くと「スレッド」になる場合があります。(ならない場合もあります。)

例えば、宅配業者の「発送完了通知」のメールから「荷物追跡番号」を抽出して、スプレッドシートに転記する実装です。
スレッド内には1通のメールのみを前提に実装すると、短時間で連続して届いたメールは同じスレッドになり、2通目のメールの処理が漏れてしまいます。

スレッド内には送信したメールも含まれる

スレッド内のメールには、受信したメールに対して自分自身が返信したメールも含まれます。単純なスレッドの繰り返し処理では、送信したメールを考慮しないので注意が必要です。

新着メールのみ取得する方法

同じメールを重複して処理しないように、既存のメールと新着メールを区別する方法を紹介します。

ここから先は

2,972字 / 1画像

¥ 550

期間限定 PayPay支払いすると抽選でお得に!

この記事が気に入ったらサポートをしてみませんか?