GASでGmailの不要メール配信解除を自動化する

GASGmail自動化
GASでGmailの不要メール配信解除を自動化するのサムネイル

GASでGmailの不要メール配信解除を自動化する


こんにちは、GASおじです。中小企業の経営者さんやフリーランスの皆さん、Gmailの不要なメール配信解除って面倒じゃないですか?毎回手作業で解除リンクを探してクリックして…時間もかかるし、正直ストレスですよね。そこで今回は、Google Apps Script(以下GAS)を使って、Gmailの不要メール配信解除を自動化する方法をおじさんの知見を交えてご紹介します。


なぜGASで自動化するのか?

まず、GASはGoogleアカウントの利用枠内で動作し、追加の専用SaaS料金なしで使えます。ただしquotaや実行時間の上限はあるので注意が必要です。GASおじは無駄なコストを嫌いますから、必要な分だけ効率良く使うのが基本。

不要メールの解除は「一度解除すれば今後メールが減る」という点で、コスト削減につながります。仮にメールの整理に毎週1時間かけているとして、時給3000円換算なら年間約15万円の節約も夢じゃありません。


初期設定と必要権限

このスクリプトはGmail APIを利用するため、GASプロジェクトで「Gmail API」を有効化してください。初回実行時に以下の権限が求められます。

  • Gmailのメール読み取り権限
  • Googleドライブのファイル作成権限(バックアップ用)

また、installable trigger(時間主導型トリガー)を設定すれば、自動で定期実行が可能です。


個人情報の取扱いについて

メール本文や送信者情報は個人情報に該当するため、スクリプトはローカルGoogleアカウント内で完結します。外部サーバーや第三者への送信は行いません。バックアップファイルも本人のGoogleドライブ内に保存されますので安心してください。


スクリプトのポイント

  • 既存データを直接編集しない
    解除リストや処理結果は、日時付きの新規シートに書き出します。
  • 入力検証
    解除リンクの抽出失敗はログに記録し、手動確認用に残します。
  • バッチ書き込み
    Spreadsheetへの書き込みはまとめて行い、API呼び出し回数を節約。
  • バックアップ
    処理前のメール情報は別シートに保存し、復元に備えます。

Gmailの不要メール配信解除自動化サンプルコード

function autoUnsubscribe() {
  const labelName = 'UnsubscribePending'; // 対象のラベル名
  const ss = SpreadsheetApp.create('Unsubscribe_Result_' + new Date().toISOString());
  const resultSheet = ss.getActiveSheet();
  resultSheet.appendRow(['日時', 'メールID', '件名', '送信者', '解除リンク', '解除結果', '備考']);

  // Gmailのラベルを取得
  const label = GmailApp.getUserLabelByName(labelName);
  if (!label) {
    Logger.log(`ラベル「${labelName}」が見つかりません。`);
    return;
  }

  // ラベルが付いたスレッドを取得
  const threads = label.getThreads(0, 50); // 最大50スレッドまで処理

  // バックアップ用シート作成
  const backupSheet = ss.insertSheet('Backup_' + new Date().toISOString());
  backupSheet.appendRow(['メールID', '件名', '送信者', '本文抜粋']);

  const results = [];

  threads.forEach(thread => {
    const messages = thread.getMessages();
    messages.forEach(message => {
      const mailId = message.getId();
      const subject = message.getSubject();
      const from = message.getFrom();
      const body = message.getBody();

      // 簡易的に解除リンクを正規表現で抜き出す
      const unsubscribeUrl = extractUnsubscribeUrl(body);

      // バックアップにメール情報を保存
      backupSheet.appendRow([mailId, subject, from, body.slice(0, 200)]);

      let result = '解除リンクなし';
      if (unsubscribeUrl) {
        // ここでは実際のリクエストは行わず、リンクを取得しただけとする
        // 実際はUrlFetchAppを使ってGETリクエストを送ることも可能だが
        // 送信制限や誤動作リスクに注意
        result = '解除リンク取得済み';
      }

      results.push([
        new Date(),
        mailId,
        subject,
        from,
        unsubscribeUrl || '',
        result,
        ''
      ]);
    });
  });

  // バッチ書き込み
  if (results.length > 0) {
    resultSheet.getRange(2, 1, results.length, results[0].length).setValues(results);
  } else {
    Logger.log('対象メールがありませんでした。');
  }
}

// 解除リンクを正規表現で抽出する簡易関数
function extractUnsubscribeUrl(htmlBody) {
  // 例として「unsubscribe」や「解除」などのキーワードを含むURLを抜き出す
  const urlPattern = /https?:\/\/[^\s"'<>]*unsubscribe[^\s"'<>]*/gi;
  const matches = htmlBody.match(urlPattern);
  if (matches && matches.length > 0) {
    return matches[0];
  }
  return null;
}

使い方と復元手順

  1. Gmailで「UnsubscribePending」ラベルを作成し、不要メール配信解除したいメールに付与します。
  2. GASのスクリプトをコピーし、新規プロジェクトに貼り付けて実行。初回は認証が求められます。
  3. 実行すると、Googleドライブに「Unsubscribe_Result_日時」という新しいスプレッドシートが作成され、解除リンクや結果が書き込まれます。
  4. 万が一の誤操作時は、バックアップシートの情報を元に手動で復元してください。

定期的にinstallable triggerで1週間に1回など自動実行設定もおすすめです。


まとめ

今回紹介したGASスクリプトは、Gmailの不要メール配信解除を完全自動化するものではありませんが、「解除リンクの抽出」と「解除対象メールの管理」を効率化します。
Googleアカウントの利用枠内で動作し、追加のSaaS料金なしで運用可能。導入コストはほぼゼロです。
ただしApps Scriptの実行時間やAPI呼び出し制限には注意してください。

不要メール解除にかかる時間を減らし、業務効率化とコスト削減に役立てていただければ幸いです。


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