Gmailの送信予約をGASで実装する方法

Gmailの送信予約をGASで実装する方法

記事
IT・テクノロジー
Gmailの送信予約をGASで実装する方法

GASおじです。今回は中小企業の経営者やフリーランスの皆さん向けに、Google Apps Script(以下GAS)を使ってGmailの送信予約を実装する方法を解説します。外部の有料SaaSに頼らず、Googleアカウントの利用枠内で追加コストなしにできるのがポイント。もちろん、実行上限やquotaはあるので注意が必要ですが、うまく運用すれば十分実用的ですよ。


■ Gmail送信予約をGASでやるメリットと注意点

Gmailには標準で送信予約機能がありますが、GASで実装すれば以下のような利点があります。

・独自のスケジュールや条件に合わせて柔軟に送信できる
・顧客リストやテンプレートをGoogleスプレッドシートで管理できる
・既存の業務フローに組み込みやすい
ただし、GASの無料枠(Googleアカウントの利用枠内)で動かすため、実行時間や1日の送信数に制限があります。過剰な大量送信には向かないのでご注意を。


■ 初期設定と必要な権限

・Googleスプレッドシートを用意し、送信予約したいメール内容や送信日時を管理します。
・スクリプトエディタでGASプロジェクトを作成。
・Gmailの送信権限を付与するため、初回実行時に認証を求められます。
・送信予約を定期的にチェックするために、installable trigger(時間主導型トリガー)を設定します。
個人情報の取り扱いは慎重に。顧客メールアドレスや本文などの情報はアクセス権を限定し、不要な権限は付与しないようにしましょう。


■ 具体的なコード例:メール送信予約と結果のバックアップ

以下は、スプレッドシートの「予約」シートに予約データを入れ、「実行」シートに送信済みの結果を日時付きで追記する例です。既存データは上書きせず、新しいシートや行に書き込む形を守っています。

function sendScheduledEmails() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const reserveSheet = ss.getSheetByName('予約');
if (!reserveSheet) {
Logger.log('「予約」シートが見つかりません');
return;
}
const resultSheetName = '実行_' + Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'yyyyMMdd_HHmmss');
const resultSheet = ss.insertSheet(resultSheetName);

// 予約シートのデータ取得(A列:メールアドレス, B列:件名, C列:本文, D列:送信日時(yyyy/MM/dd HH:mm))
const data = reserveSheet.getRange(2, 1, reserveSheet.getLastRow() - 1, 4).getValues();

// 現在時刻を取得
const now = new Date();

// バッチ書き込み用配列
let results = [];
results.push(['メールアドレス', '件名', '送信日時', '送信結果', 'エラーメッセージ']);

data.forEach(row => {
const [email, subject, body, sendDateStr] = row;

// 入力検証
if (!email || !subject || !body || !sendDateStr) {
results.push([email, subject, sendDateStr, 'スキップ', '入力不備']);
return;
}

const sendDate = new Date(sendDateStr);
if (isNaN(sendDate.getTime())) {
results.push([email, subject, sendDateStr, 'スキップ', '送信日時形式不正']);
return;
}

if (sendDate <= now) {
try {
GmailApp.sendEmail(email, subject, body);
results.push([email, subject, sendDateStr, '成功', '']);
} catch (e) {
results.push([email, subject, sendDateStr, '失敗', e.message]);
}
} else {
results.push([email, subject, sendDateStr, '保留', '送信日時未到来']);
}
});

// バッチ書き込み
resultSheet.getRange(1, 1, results.length, results[0].length).setValues(results);
}


■ installable triggerの設定と復元手順

このsendScheduledEmails関数を30分〜1時間ごとに定期実行させるのがオススメです。スクリプトエディタのトリガーメニューから「時間主導型トリガー」を追加してください。

万が一トリガーが削除・停止した場合は、再度同じ手順でトリガーを作成すれば復元できます。トリガーの状態はGASの「トリガー」画面で確認可能です。


■ 導入によるコスト削減の仮定例

仮に外部の送信予約SaaSを月額5,000円で利用していた場合、GASで代替できれば年間60,000円のコスト削減となります。

計算式例:

年間コスト削減 = 月額SaaS料金 × 12ヶ月
= 5,000円 × 12
= 60,000円

ただし、GASはGoogleアカウントの利用枠内での無料利用ですが、quotaや実行時間上限があるため、大量送信には向きません。あくまで適正な範囲で使うのが大事です。


□ まとめ

・GASでGmail送信予約を自作すれば追加専用SaaS料金なし(Googleアカウントの利用枠内で)
・既存データは全消去せず、新規シートや行に結果を書き込む形で安全運用
・入力検証やエラーハンドリングを入れて堅牢に
・installable triggerで定期実行を設定し、復元も簡単
・利用枠の制限を理解して無理のない範囲で活用しよう

■ GASの相談や導入サポートを見たい方へ

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

■ 関連サービス

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