GASでGmailスレッドにラベルを付ける

GAS

GASでGmailの自動処理を組む際、同じメールを何度も処理してしまう二重処理を防ぐには、対象のスレッドに特定のラベルを追加してステータス管理するのが確実です。

処理済みの目印としてラベルを追加・変更する

未読メールをプログラムで処理したあと、そのスレッドに「処理済み」などのラベルを付与し、次回以降の実行対象から外したいときに使います。

const label = GmailApp.getUserLabelByName("処理済み") || GmailApp.createLabel("処理済み");
const threads = GmailApp.search("is:unread", 0, 1);
if(threads.length > 0) label.addToThread(threads[0]);

ラベルが存在しないときのエラーを防ぐ

GASでラベルを扱う際、指定した名前のラベルがGmail上に存在しないと、その後の処理でエラーになってしまいます。
コードの1行目のように、getUserLabelByNameで取得を試みつつ、存在しなかった場合は||演算子の右側でcreateLabelを実行して自動作成(初期化)しておくと安全に処理を進められます。

スレッド単位での状態管理

ラベルによる状態管理をスレッドに対して行う(addToThreadを使用する)ことで、一連のやり取り全体を一括して管理できます。これによりプログラムが処理したメールと未処理のメールの区別が明確になり、運用時の確認作業もスムーズになります。

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