Gmailで大量メール送信をGASで自動化する

GASGmail自動化
Gmailで大量メール送信をGASで自動化するのサムネイル

こんにちは、GASおじです。今日は中小企業の経営者やフリーランスの皆さん向けに、Gmailを使った大量メール送信をGoogle Apps Script(GAS)で自動化する方法を解説します。広告費や外注コストを抑えたいけど、メール送信に手間がかかっている方にはピッタリの内容ですよ。

GASはGoogleアカウントの利用枠内で動くので、追加の専用SaaS料金は不要。ただし、Apps Scriptにはquotaや実行時間の制限があるので、その範囲内で効率よく動かす工夫が必要です。


なぜGASで大量メール送信を自動化するのか?

まず、メール送信の手作業は時間もかかりますし、ミスも起きやすい。外注や専用の有料ツールを使うとコストも気になりますよね。GASなら既存のGmailアカウントを使い、無料で(Googleアカウントの利用枠内で)自動化できるため、コスト削減につながります。

仮に、手動で1通送るのに1分かかっていたとします。100通送ると100分、つまり約1時間40分の作業時間がかかります。時給1,500円の人がこの作業を行うとすると、

100通 × 1分 = 100分 = 約1.67時間
1.67時間 × 1,500円 = 2,500円

これがGAS自動化によって数分で済むなら、1回のメール送信で2,500円の人件費削減が見込めます。もちろん、Apps Scriptの実行制限はありますが、バッチ処理で分割すれば大量送信も可能です。


初期設定と必要権限について

GASでGmailを操作するには、スクリプトにGmailの送信権限が必要です。初回実行時にGoogleから認証を求められますので、必ず指示に従って許可してください。

また、大量送信は迷惑メール判定されるリスクがあるため、送信先リストは必ず適切に管理し、受信者の同意を得たメールアドレスを使いましょう。


個人情報の取り扱いとバックアップ

メールアドレスなどの個人情報はスプレッドシートに保存しますが、既存データは削除したり上書きしたりせず、新しい日時付きのシートやファイルに書き出す形で管理します。これにより誤操作によるデータ消失を防げます。

また、送信履歴も同様にバックアップを作成し、万が一のトラブル時は復元できるようにしておくことが重要です。


Gmail大量送信用GASコード例

以下はスプレッドシートに登録された宛先に対して、メールをバッチで送信し、送信結果を新しい日時付きシートに記録するサンプルコードです。
(送信前にデータの入力検証も行い、不正なメールアドレスはスキップします)

function sendBulkEmails() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName('送信リスト');
  if (!sheet) {
    Logger.log('送信リストシートが見つかりません');
    return;
  }
  
  // データ取得(1行目はヘッダー想定)
  const data = sheet.getRange(2, 1, sheet.getLastRow() - 1, 2).getValues();
  // dataの各行: [メールアドレス, 名前]
  
  // 入力検証: メールアドレスの簡易チェック
  const isValidEmail = (email) => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email);
  
  // 送信結果用シート作成(日時付き)
  const timestamp = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'yyyyMMdd_HHmmss');
  const resultSheetName = `送信結果_${timestamp}`;
  const resultSheet = ss.insertSheet(resultSheetName);
  resultSheet.appendRow(['メールアドレス', '名前', '送信日時', 'ステータス', 'エラー内容']);
  
  const batchSize = 20; // 一度に送る件数の目安(quota対策)
  
  for (let i = 0; i < data.length; i += batchSize) {
    const batch = data.slice(i, i + batchSize);
    
    batch.forEach(row => {
      const [email, name] = row;
      let status = '成功';
      let errorMsg = '';
      
      if (!isValidEmail(email)) {
        status = 'スキップ';
        errorMsg = '無効なメールアドレス';
      } else {
        try {
          const subject = '【GAS自動送信テスト】';
          const body = `こんにちは、${name}さん。\nこれはGoogle Apps Scriptによる自動送信メールです。`;
          GmailApp.sendEmail(email, subject, body);
        } catch (e) {
          status = '失敗';
          errorMsg = e.message;
        }
      }
      
      resultSheet.appendRow([email, name, new Date(), status, errorMsg]);
    });
    
    // quota回避のために少し待つ(必要に応じて調整)
    Utilities.sleep(1000);
  }
  
  // 送信後に結果シートURLをログ出力
  Logger.log(`送信結果シート作成: ${resultSheet.getSheetName()}`);
}

インストール可能トリガーと復元手順

自動化をより進めるなら、GASのインストール可能トリガーを使って定期的にメール送信処理を実行する方法があります。例えば「時間主導型トリガー」で毎日や毎週決まった時間に実行する設定です。

トリガー設定はGASのエディタ画面の「編集」→「現在のプロジェクトのトリガー」から追加可能です。

また、誤送信や不具合が起きた際は、送信結果シートがバックアップになっているので、そこから状況確認や復元がしやすくなっています。既存の送信リストは削除せず、新しいシートに書き出すのがポイントです。


まとめ:コスト削減と安全運用のポイント

  • GASはGoogleアカウントの利用枠内で追加の専用SaaS料金なしで使える(quotaはある)
  • 大量送信はバッチ処理と入力検証で安定運用が可能
  • 既存データは削除せず、新しい日時付きシートに記録することで安全にバックアップ
  • トリガーを使って自動化を進めれば、さらに省力化が進む
  • 個人情報は適切に管理し、迷惑メールにならないよう配慮必須

以上のポイントを押さえて、あなたのメール業務をスマートに効率化しましょう。


もっと便利なGASツールを使いたいなら、GASおじラボのメンバーシップがオススメです。500以上のツールが使い放題(Googleアカウントの利用枠内で)。月額料金を抑えつつ効率化を一気に進めたい方はぜひご検討ください。

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