Gmailのメールを条件で自動アーカイブ

GASGmail自動化
Gmailのメールを条件で自動アーカイブのサムネイル

Gmailのメールを条件で自動アーカイブする方法を、GASおじがわかりやすく解説するぜ。中小企業の経営者やフリーランスの皆さん、メール管理で時間を取られていないか?おじさんが紹介するGoogle Apps Script(GAS)を使えば、条件に合うメールを自動でアーカイブして、スッキリ管理できる。もちろん、既存のメールデータを消さずに安全にバックアップを取りながら処理するので安心してくれ。

なぜGASでGmailの自動アーカイブ?

メールは仕事の重要な情報源だけど、不要な通知や広告メールが溜まると見落としやすくなる。手動でアーカイブするのは時間のムダだし、業務効率が下がる。GASならGoogleアカウントの利用枠内で追加の専用SaaS料金なしで自動化できる(ただし、Apps Scriptのquotaや実行上限はあるので注意)。おじさんも課金には厳しいから、コストゼロで効率化できるのは嬉しいところだ。

初期設定と必要な権限

このスクリプトを動かすには、Gmailの読み取りと操作権限が必要だ。初回実行時に認証を求められるので、指示に従って許可してほしい。さらに、定期的に自動実行させたい場合はインストール型トリガーを設定すると便利だ。

  • Google スプレッドシートを新規作成(バックアップ用)
  • スクリプトエディタにコードを貼り付け
  • Gmailの読み取りと管理権限を付与
  • installable triggerで定期実行(例:1日1回)

メールアーカイブの条件設定と処理の流れ

今回は「件名に特定のキーワードが含まれる」「受信から7日以上経過している」メールを対象にする。処理手順はこうだ。

  1. Gmailから条件に合うメールスレッドを検索
  2. スレッド内のメールを一つずつ取得
  3. メールの情報を新規作成した日時付きスプレッドシートに書き出し(バックアップ)
  4. メールをアーカイブ(受信トレイから外す)する

既存のメールデータはスプレッドシートで保管し、削除APIは使わないので安全だ。

コード例:条件に合うメールをバックアップしてアーカイブ

function archiveGmailByCondition() {
  const KEYWORD = "キャンペーン"; // 件名に含むキーワード
  const DAYS_OLD = 7; // 何日以上前のメールを対象にするか
  const today = new Date();
  const cutoffDate = new Date(today.getTime() - DAYS_OLD * 24 * 60 * 60 * 1000);

  // バックアップ用スプレッドシートを新規作成(日時付き)
  const backupSheetName = Utilities.formatDate(today, Session.getScriptTimeZone(), 'yyyyMMdd_HHmmss') + "_GmailBackup";
  const ss = SpreadsheetApp.create(backupSheetName);
  const sheet = ss.getActiveSheet();

  // ヘッダー行
  sheet.appendRow(["スレッドID", "メールID", "件名", "送信者", "受信日時", "本文抜粋"]);

  // Gmail検索クエリ作成
  const query = `subject:${KEYWORD} before:${Utilities.formatDate(cutoffDate, Session.getScriptTimeZone(), 'yyyy/MM/dd')}`;

  // スレッド取得(最大100件まで)
  const threads = GmailApp.search(query, 0, 100);
  if (threads.length === 0) {
    Logger.log("条件に合うメールはありませんでした。");
    return;
  }

  threads.forEach(thread => {
    const messages = thread.getMessages();
    messages.forEach(message => {
      const msgDate = message.getDate();
      if (msgDate < cutoffDate) {
        // 本文の最初の200文字だけ抜粋
        const bodySnippet = message.getPlainBody().substring(0, 200).replace(/\r?\n/g, " ");
        // バックアップシートに書き込み
        sheet.appendRow([
          thread.getId(),
          message.getId(),
          message.getSubject(),
          message.getFrom(),
          Utilities.formatDate(msgDate, Session.getScriptTimeZone(), 'yyyy/MM/dd HH:mm:ss'),
          bodySnippet
        ]);
      }
    });
    // 対象スレッドをアーカイブ(受信トレイから外す)
    thread.moveToArchive();
  });

  Logger.log(`処理完了。バックアップはスプレッドシート「${backupSheetName}」に保存されました。`);
}

ポイント解説

  • 「moveToArchive()」でメールをアーカイブ(受信トレイから非表示)にしている。
  • 本文は長すぎるとシートが重くなるので200文字に抑えている。
  • 新規スプレッドシートを毎回作成し、既存のデータは絶対に上書きしない。
  • 削除APIは使わず、メールは残したまま運用する。
  • スクリプトはGmailの検索クエリ機能を利用して効率的に対象メールを特定。

導入によるコスト削減のイメージ

仮に1日10分のメール整理時間を自動化できたとしよう。時給2000円の労働単価で計算すると、

10分 ÷ 60分 × 2000円 = 約333円/日
333円 × 20営業日 = 6660円/月

年間で約8万円の時間コスト削減が期待できる計算になる。ただし、これはあくまで理論値であり、実際の効果は業務環境によって異なる。

個人情報の取り扱いと復元手順

メールの本文や送信者情報は個人情報に該当する可能性が高い。バックアップしたスプレッドシートはアクセス制限を厳格にし、第三者に閲覧されないよう管理せよ。復元が必要な場合は、バックアップシートの内容を参考に手動でメール検索・対応する形となる。なお、Gmailのスレッドは削除していないため、Gmailのごみ箱から復元も可能だ。

installable triggerの設定方法

  1. スクリプトエディタのメニュー「編集」→「現在のプロジェクトのトリガー」を選択
  2. 「トリガーを追加」で以下を設定
    • 実行する関数:archiveGmailByCondition
    • イベントの種類:時間主導型
    • 時間ベースのトリガーのタイプ:日付ベースのタイマー(毎日など)
  3. 保存して完了

まとめ

Gmailの自動アーカイブはGASで手軽に実現可能。既存データを消さずにバックアップを取りながら処理するから安全安心だ。Googleアカウントの利用枠内で追加の専用SaaS料金なしで利用できる点も経営者・フリーランスにはうれしいポイント。ただし、Apps Scriptのquotaや実行上限があるので大量メールの場合は分割して処理しよう。

さらに効率化したい人は、GASおじラボで500ツール使い放題のメンバーシップもチェックしてみてくれ。便利なツールがいっぱいだから、きっと業務がラクになるぜ。

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