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

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

記事
IT・テクノロジー
こんにちは、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を使います。手順は以下の通り。

・GASエディタのメニューから「編集」→「現在のプロジェクトのトリガー」を開く
・「トリガーを追加」ボタンを押す
・関数名にsendBatchEmailsを選択
・イベントの種類を「時間主導型」→「分ベースのタイマー」など用途に合わせて選択
・保存
トリガー設定後も、スクリプトの権限承認が求められます。権限を正しく与えてください。

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


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

仮に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の相談や導入サポートを見たい方へ

この記事と近い作業をGoogleシートやGASで整えたい方は、Gasおじのココナラ出品一覧もご覧ください。

■ 関連サービス

GASおじのココナラ出品一覧
日々の記録、確認、通知、投稿準備などを、GoogleスプレッドシートとGASで無理なく自動化する相談ができます。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す