はじめてのGAS(9)Gmailで新着メールのみ取得して、重複は除外する
Google Apps Script(GAS)で、Gmailからメールを取得すること自体は簡単ですが、「重複するメールを除外」する実装を加えると、やや難しくなります。
「重複するメールを除外」する実装が難しい原因は?
難しくなる原因は、GASの仕様で特定の1通のメールを取得することはできず、必ず「スレッド」ごとの取得を強いられるからです。そのため、「スレッド」の挙動をよく理解することが大切です。
ラベルは「スレッド」に付けられる
メールの重複を防ぐために、処理が完了したメールに「処理済み」ラベルの目印を付けて、区別する方法が思いつきます。しかし、残念ながらGASの仕様で1通のメールにラベルを付けることはできず、「スレッド」にラベルを付ける方法しかありません。
そのため、スレッド内のメールが必ず1通のみであれば、この方法でも重複を防げますが、スレッド内に複数のメールが存在するような場合、意図しない動作になる可能性があります。
想定外なスレッドの挙動
「スレッド」になるメールは、送信・返信を繰り返した一連のメールの他に、同じ送信者から、同じ件名のメールが短時間で届くと「スレッド」になる場合があります。(ならない場合もあります。)
例えば、宅配業者の「発送完了通知」のメールから「荷物追跡番号」を抽出して、スプレッドシートに転記する実装です。
スレッド内には1通のメールのみを前提に実装すると、短時間で連続して届いたメールは同じスレッドになり、2通目のメールの処理が漏れてしまいます。
スレッド内には送信したメールも含まれる
スレッド内のメールには、受信したメールに対して自分自身が返信したメールも含まれます。単純なスレッドの繰り返し処理では、送信したメールを考慮しないので注意が必要です。
新着メールのみ取得する方法
同じメールを重複して処理しないように、既存のメールと新着メールを区別する方法を紹介します。
ここから先は
¥ 550
この記事が気に入ったらサポートをしてみませんか?