Gmailのメール振り分けをGASでカスタマイズ

GASGmail自動化
Gmailのメール振り分けをGASでカスタマイズのサムネイル

Gmailのメール振り分けをGASでカスタマイズ

はじめに:メール整理は経営者の時間節約の肝

どうも、GASおじです。中小企業の経営者やフリーランスの皆さん、毎日溜まるGmailのメール、うまく整理できていますか?メールの振り分けは地味だけど時間を取られがち。そこでGoogle Apps Script(以下GAS)を使って、自動でメールをスッキリ振り分ける方法をお伝えします。

GASはGoogleアカウントの利用枠内で追加の専用SaaS料金なしで使えます(ただしApps Scriptのquota・実行上限あり)。コストをかけずに効率化したい方にはピッタリです。

Gmail振り分けにGASを使うメリットと初期設定

Gmailにはフィルタ機能がありますが、複雑な条件や複数のラベル付け、バックアップを考慮するとGASのほうが柔軟です。GASならメール本文や添付ファイルの内容も判断材料にできるし、処理結果は新しい日時付きシートに書き出すので、既存データを消す心配なし。

必要な権限

  • Gmailの読み取りと管理権限
  • Googleスプレッドシートの編集権限(結果保存用)

初期設定

  1. Googleスプレッドシートを用意します(振り分け結果のバックアップ用)。
  2. GASエディタを開き、スクリプトを作成。
  3. installable triggerで定期実行設定(例:1時間ごと)を行います。

個人情報の取扱い

メール内容はスプレッドシートにバックアップされるため、アクセス権限の管理を徹底してください。スプレッドシート共有範囲は必要最小限に。

復元手順

もし誤って振り分け設定を変更しても、バックアップシートの内容から元のメールを再確認可能。メール自体はGmailに残りますので安心です。

コード例:メールの件名キーワードと送信者で振り分け&バックアップ

以下は例として、件名に「見積」か「請求」が含まれるメールを特定ラベルに振り分け、処理結果を日時付き新規シートに書き出すコードです。既存シートのデータは消さず、新規で保存します。入力検証も簡単に入れています。

function filterAndBackupEmails() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const now = new Date();
  const sheetName = Utilities.formatDate(now, Session.getScriptTimeZone(), "yyyyMMdd_HHmmss");
  const sheet = ss.insertSheet(sheetName);

  // ヘッダー設定
  const headers = ["メールID", "送信者", "件名", "受信日時", "ラベル付与結果"];
  sheet.appendRow(headers);

  // 振り分けキーワードとラベル名の対応
  const filterRules = [
    { keyword: "見積", labelName: "見積り案件" },
    { keyword: "請求", labelName: "請求書" }
  ];

  // Gmailの未読メールを取得(必要に応じて取得条件を変更)
  const threads = GmailApp.search('is:inbox is:unread', 0, 50);
  if (!threads.length) {
    Logger.log("対象メールなし");
    return;
  }

  // メール処理用配列
  const rows = [];

  threads.forEach(thread => {
    const messages = thread.getMessages();
    messages.forEach(message => {
      const subject = message.getSubject() || "";
      const from = message.getFrom() || "";
      const id = message.getId();
      const date = message.getDate();

      // 入力検証: 件名と送信者があるか
      if (!subject || !from) return;

      // キーワードに基づくラベル付け判定
      let labelApplied = "なし";
      for (const rule of filterRules) {
        if (subject.indexOf(rule.keyword) !== -1) {
          const label = GmailApp.getUserLabelByName(rule.labelName) || GmailApp.createLabel(rule.labelName);
          thread.addLabel(label);
          labelApplied = rule.labelName;
          break;
        }
      }

      rows.push([id, from, subject, date, labelApplied]);
    });
  });

  // バッチ書き込み(ヘッダー除く)
  if (rows.length > 0) {
    sheet.getRange(2, 1, rows.length, headers.length).setValues(rows);
  }
}

ポイント解説

  • 新規シート作成:既存シートを消さず、日時付き新規シートに結果を保存。
  • 入力検証:件名と送信者が空の場合は処理スキップ。
  • バッチ書き込み:配列にまとめて一括書き込みで効率化。
  • ラベルの作成・取得:存在しなければ自動作成。
  • 処理対象制限:上限50件の未読メールに限定(必要に応じて調整)。

コスト削減の仮定と計算例

例えば、1日50通のメール振り分け作業にかかる手動時間が1通あたり20秒だったとします。

  • 1日の手動時間:50通 × 20秒 = 1000秒(約16.7分)
  • 1ヶ月(20営業日)では:約16.7分 × 20日 = 約333分 ≒ 5.5時間
  • 時給2,500円換算で:5.5時間 × 2,500円 = 13,750円

GASの自動化でこの時間を半分に削減できた場合、月6,875円の時間コスト削減が見込めます(あくまで仮定です)。もちろん、Googleアカウントの利用枠内で追加の専用SaaS料金なし、Apps Scriptのquota・実行上限はありますがランニングコストはほぼゼロ。

installable trigger設定例

GASのエディタで「編集」→「現在のプロジェクトのトリガー」から新規トリガーを作成し、

  • 実行する関数:filterAndBackupEmails
  • イベントのソース:時間主導型
  • 時間ベースのトリガー:1時間ごと(または任意間隔)

と設定してください。これで定期的に振り分け処理が自動実行されます。

まとめとメンバーシップ案内

GASを活用したGmailのメール振り分けは、既存データを消さずに安全にバックアップを取りつつ、業務効率化とコスト削減を狙えます。特に中小企業やフリーランスの方には、追加SaaS料金なしでできる点が魅力です。

もっとGASで業務改善したい方は、ぜひこちらのメンバーシップもチェックしてみてください。

GASおじラボで500ツール使い放題 →