GASで受信メールを自動でラベル分けする方法

GASで受信メールを自動でラベル分けする方法

Gmailに届くメールを毎日目視で確認し、案件ごとに手作業でラベルを付けている場合、件数が増えるほど付け忘れや対応漏れが起きやすくなります。

この記事では、Google Apps Scriptで受信メールを自動でラベル分けする仕組みを、Gmail標準フィルタとの使い分けからラベル設計のコツまで整理しています。

メールの自動振り分けを無料で相談する

Gmail標準フィルタとGoogle Apps Scriptの使い分け

ラベル分けの自動化と聞くとスクリプトを思い浮かべがちですが、実際にはGmailの標準フィルタ機能だけで済むケースが少なくありません。

「特定の相手から届いたメールに固定のラベルを付けたい」「件名に決まったキーワードが入っていたら振り分けたい」という単純な条件であれば、検索窓の右側にある設定アイコンからフィルタを作成するだけで完結します。

一方でGoogle Apps Scriptが必要になるのは、条件が固定の1パターンで収まらない場合です。

判断したいこと

Gmail標準フィルタ

Google Apps Script

送信元や件名など単純な条件で振り分けたい

対応できる

対応できるが標準フィルタで十分

顧客リストなど外部データと照合して振り分けたい

対応できない

対応できる

ラベル付けと同時に別の処理も行いたい(記録・通知等)

対応できない

対応できる

過去に届いた未処理のメールもまとめて振り分けたい

新着分のみ対応

対応できる

顧客ごとに担当者が変わる、条件を後から一括で見直したいといった事情がある場合は、条件をコードとして管理できるGoogle Apps Scriptのほうが運用しやすくなります。

逆に条件が変わらないメール1〜2種類の振り分けであれば、無理にスクリプトを組まずGmail標準フィルタを使うほうが保守の手間がかかりません。

手順

ラベルの準備からトリガー設定まで、3つのステップで完成します。

Step1. 振り分け先のラベルを作成する

Gmailの左メニュー下部にある「ラベルを追加」から、振り分け先にしたいラベルをあらかじめ作成しておきます。

このあとのコードはラベルが存在しない場合に自動作成する処理も含んでいますが、どんな名前のラベルを用意するかは先に決めておいたほうが後の設計が楽になります。

Step2. コードを貼り付ける(コード全文)

Gmailの画面にはスクリプトエディタを開くメニューがないため、ブラウザで script.google.com を開き、「新しいプロジェクト」を選択します。

表示されているコードを全て消し、次のコードを貼り付けます。

function autoLabelInboxMails() {
  const rules = [
    { query: 'from:customer-a@example.com', labelName: '顧客A' }, // ★ここを変える: 条件とラベル名
    { query: 'subject:(見積もり)', labelName: '見積もり' }, // ★ここを変える: 条件とラベル名
  ];
  const processedLabelName = 'ラベル済';

  let processedLabel = GmailApp.getUserLabelByName(processedLabelName);
  if (!processedLabel) {
    processedLabel = GmailApp.createLabel(processedLabelName);
  }

  rules.forEach((rule) => {
    let targetLabel = GmailApp.getUserLabelByName(rule.labelName);
    if (!targetLabel) {
      targetLabel = GmailApp.createLabel(rule.labelName);
    }

    const searchQuery = `${rule.query} -label:${processedLabelName}`;
    const threads = GmailApp.search(searchQuery);

    threads.forEach((thread) => {
      thread.addLabel(targetLabel);
      thread.addLabel(processedLabel);
    });
  });
}

rules の配列に条件とラベル名の組を並べておくと、1回の実行で複数の振り分けルールをまとめて処理できます。

-label:ラベル済 を検索条件に含めているため、一度ラベルを付けたメールは次回の実行で再び検索対象になりません。

条件を増やしたい場合は rules に行を追加するだけで済み、Gmailの設定画面を開き直す必要がありません。

Step3. 時間トリガーを設定する

スクリプトエディタの左側にある時計マークの「トリガー」を開き、右下の「トリガーを追加」から設定します。

実行する関数は autoLabelInboxMails を選び、イベントのソースは時間主導型、種類は分ベースのタイマーを選んで実行間隔を指定します。

保存すれば、指定した間隔で新着メールの確認とラベル付けが自動で繰り返されます。

受信メールを自動でラベル分けする設定手順の3ステップ。ラベルを作成する→コードを貼り付ける→時間トリガーを設定

転記まで含めて自動化したい場合は、受信メールをスプレッドシートへ書き出す方法も参考になります。

ラベル設計のコツ

ラベルの数が増えてくると、どの条件がどのラベルに対応しているのか把握しづらくなります。

似た条件のラベルを乱立させるのではなく、「取引先/顧客A」のように親子関係を持たせた名前にしておくと、Gmail上での表示も階層化されて見通しがよくなります。

条件とラベル名の対応は rules の配列にすべて集まっているため、担当者が変わったときや取引先が増減したときも、この配列だけを見れば現状のルールを確認できます。

逆にコードの中に条件を散らして書いてしまうと、変更のたびにコード全体を読み返す必要が出てくるため、ルールは配列にまとめる形を崩さないことをおすすめします。

ラベル済 のような管理用ラベルは、業務で使うラベルとは別枠として扱い、受信トレイの表示からは除外しておくと画面が煩雑になりません。

どの業務からGoogle Apps Scriptによる自動化に着手すべきか迷う場合は、判断基準を別記事で整理しています。


Google Apps Scriptでのメール自動ラベル分けについて相談してみませんか?

「振り分け条件が複雑でGmailの標準フィルタでは対応しきれない」「顧客リストと連動させてラベルを自動で切り替えたい」「社内にGoogle Apps Scriptを設計できる人材がいない」

少しでもお心当たりがあれば、お気軽にご相談ください。

現在、Google Apps Scriptを使った業務自動化のお悩みをお伺いする 無料の個別相談 を実施しています。


よくある質問

Q. ラベル分けの条件はいくつまで設定できますか?

rules の配列に追加する形なので件数に決まった上限はありませんが、GmailApp.search() の呼び出し回数が増えるほど実行時間が伸びます。

条件の数が増えて1回の実行時間が長くなってきた場合は、関数を分けて対象を分割することを検討してください。

Q. 既存のGmail標準フィルタと共存させることはできますか?

共存できます。

標準フィルタで対応できる単純な条件はフィルタに任せ、複雑な条件だけをこのスクリプトで処理する形にすると、管理する条件の数を減らせます。

Q. ラベルを付けた後にスプレッドシートへの記録もできますか?

コード内の thread.addLabel(targetLabel) の直後に、シートへ書き込む処理を追加すれば対応できます。

記録と通知を同時に行いたい場合も、同じ場所に処理を追加していく形になります。

Q. ラベルの階層構造は作れますか?

作れます。

GmailApp.createLabel('取引先/顧客A') のようにスラッシュ区切りの名前でラベルを作成すると、Gmail上で親ラベルの下に子ラベルとして表示されます。

親にあたるラベル(この例では「取引先」)が存在しない場合は、先に親ラベルを作成しておいてください。