GASでメールテンプレートの管理と自動送信を実現

GASGmailテンプレート自動化
GASでメールテンプレートの管理と自動送信を実現のサムネイル

こんにちは、GASおじです。今日は中小企業の経営者さんやフリーランスの皆さんに向けて、Google Apps Script(以下GAS)を使ったメールテンプレートの管理と自動送信の仕組みを紹介します。これをうまく活用すれば、日々のメール送信作業がぐっと楽になり、無駄な時間とコストの削減につながりますよ。


なぜメールテンプレートの自動管理が必要なのか?

メールの定型文って、意外と管理が面倒ですよね。特に複数のテンプレートを使い分ける場合、どこに何を書いたか忘れてしまったり、誤送信リスクも増えます。手作業でのコピペはミスの元ですし、外部の有料SaaSに頼ると毎月のコストがかさみます。

そこでGASおじの出番。GASならGoogleアカウントの利用枠内で追加の専用SaaS料金なしに、メールテンプレートをスプレッドシートで一元管理しつつ、必要に応じて自動送信できます。ただし、Apps Scriptのクォータや実行上限はありますので、その点は要注意です。


初期設定と必要な権限

この仕組みを動かすには、まずGASプロジェクトを作成し、以下の権限が必要です。

  • Gmailの送信権限(GmailApp API利用)
  • Google スプレッドシートの読み書き権限

また、個人情報の取り扱いには十分注意してください。テンプレート内に顧客の個人情報が含まれる場合は、スプレッドシートのアクセス権限を限定するのが基本です。


メールテンプレートの管理方法と自動送信の仕組み

本記事では、既存のテンプレートや顧客リストを消さずに、新しい送信履歴は「送信履歴_YYYYMMDD_HHmmss」のような日時付きの新シートに書き出す設計にしています。これにより、元データが上書きされる心配はありません。

また、テンプレートの入力検証も行い、誤った内容で送信しないようにしています。バッチ処理で複数メールをまとめて送信し、送信結果もバックアップできる仕組みです。


サンプルコード:メールテンプレート管理&自動送信

function sendBatchEmails() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const templateSheet = ss.getSheetByName('テンプレート');
  const dataSheet = ss.getSheetByName('送信リスト');

  if (!templateSheet || !dataSheet) {
    throw new Error('「テンプレート」シートまたは「送信リスト」シートが見つかりません。');
  }

  // テンプレート取得(件名と本文)
  const subject = templateSheet.getRange('B1').getValue().trim();
  const bodyTemplate = templateSheet.getRange('B2').getValue().trim();

  if (!subject || !bodyTemplate) {
    throw new Error('テンプレートの件名または本文が空です。必ず入力してください。');
  }

  // 送信リスト取得(メールアドレス+パラメータ)
  const data = dataSheet.getDataRange().getValues();
  if (data.length < 2) {
    throw new Error('送信リストが空です。');
  }

  // 送信履歴シートを新規作成(バックアップ&履歴用)
  const timestamp = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'yyyyMMdd_HHmmss');
  const historySheetName = `送信履歴_${timestamp}`;
  const historySheet = ss.insertSheet(historySheetName);
  historySheet.appendRow(['送信先メール', '送信結果', '送信日時', 'エラーメッセージ']);

  // バッチ送信処理
  const sendResults = [];
  for (let i = 1; i < data.length; i++) {
    const row = data[i];
    const email = row[0].toString().trim();
    const param1 = row[1] ? row[1].toString() : '';

    if (!email || !validateEmail(email)) {
      sendResults.push([email, '失敗', new Date(), '無効なメールアドレス']);
      continue;
    }

    // 本文のテンプレート置換(例:{{name}} を param1 に置換)
    const body = bodyTemplate.replace('{{name}}', param1);

    try {
      GmailApp.sendEmail(email, subject, body);
      sendResults.push([email, '成功', new Date(), '']);
    } catch (e) {
      sendResults.push([email, '失敗', new Date(), e.message]);
    }
  }

  // 送信結果を履歴シートに一括書き込み(batch write)
  historySheet.getRange(2, 1, sendResults.length, sendResults[0].length).setValues(sendResults);
}

// メールアドレスの簡易バリデーション
function validateEmail(email) {
  const re = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
  return re.test(email);
}

installable triggerの設定と復元手順

このスクリプトを定期的に自動実行したい場合は、GASのinstallable triggerを使います。手順は以下の通り。

  1. GASエディタのメニューから「編集」→「現在のプロジェクトのトリガー」を開く
  2. 「トリガーを追加」ボタンを押す
  3. 関数名にsendBatchEmailsを選択
  4. イベントの種類を「時間主導型」→「分ベースのタイマー」など用途に合わせて選択
  5. 保存

トリガー設定後も、スクリプトの権限承認が求められます。権限を正しく与えてください。

もしトリガーが誤って削除された場合は、再度同様の手順で設定し直せば復元可能です。


コスト削減の試算イメージ

仮に1日に100通の定型メールを手動で送る作業を、1通あたり1分とすると、1日約100分(約1.7時間)。時給2000円の人件費換算で約3400円/日です。

GASによる自動化でこの作業時間をほぼゼロにできれば、

3400円(日)×20営業日=68,000円/月

のコスト削減が見込めます(あくまで仮定の計算です)。

もちろん、Googleアカウントの利用枠内で動作するため、追加のSaaS費用は発生しません。Apps Scriptのクォータ(Gmail送信数や実行時間)には注意しつつ、有効活用しましょう。


まとめ

  • メールテンプレートはスプレッドシートで一元管理し、誤送信を防ぐ
  • 送信履歴は日時付き新規シートに書き出し、既存データは安全に保持
  • バッチ送信で効率化、入力検証でミスを防止
  • installable triggerで自動化可能
  • Googleアカウントの利用枠内で利用可能、追加SaaS料金なし(クォータ制限あり)

ぜひGASでメール業務の効率化を実現して、無駄なコストを削減してくださいね。


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