Gmail差し込み一括配信アプリ — MailMergeBatch

実際のビジネスシーンで使える自動化100例をGASで実装するシリーズ「GAS自働化100本ノック」。その14本目

スプレッドシートの配信リストから個別メールを一括送信する便利なシート版アプリ — MailMergeBatch

宛先ごとの本文差し替えはもちろんのこと、テキスト/HTMLモード切替・添付ファイル差し込み・下書きモード・送信前プレビュー、と便利機能が充実しています。

MailMergeBatch ができること

  1. 宛先ごとに本文を差し替えて個別送信 — 配信リストの1行ごとに `{{宛名}}` `{{会社名}}` `{{案件番号}}` などのプレースホルダで件名・本文を置換し、別々のメールとして送信。プレースホルダは自由に追加・編集可能

  2. 宛先ごとの添付ファイル差し込み — 配信リストの「添付URL」列に ファイルのURL を貼るだけ

  3. HTML本文モード — テキストモードと設定キー1つで切り替え可能

  4. 下書きモード — 実送信せずGmailの「下書き」に保存。目視確認してから自分で送信できる

  5. 送信前プレビュー — 未送信1行目だけプレースホルダを当てた結果をダイアログ表示

  6. ステータス列 — 「未送信/送信済/下書き作成/エラー」+ 送信日時で 二重送信を自動防止

  7. ドライラン — 実送信せず件数だけ確認

  8. 時間トリガーで自動実行 — 指定間隔で未送信行を順次処理

  9. 全送信イベントは `MB_送信ログ` に追記 — 監査・後追い用

  10. 全体エラー(設定不足・シート欠落など)は `MB_エラー` に記録

動作要件

  • Googleアカウント

  • Gmail / Drive / Spreadsheet の編集権限

インストール手順

  1. 新規Googleスプレッドシートを作成

  2. メニュー「拡張機能 → Apps Script」を開く

  3. デフォルトの `コード.gs` の内容を、本記事の有料版 `コード.gs` で上書き保存する

  4. 「ファイル → +」でファイルを追加し、本記事の有料版 `セットアップ.gs` の内容で上書き保存する

  5. プロジェクト名を任意に設定して保存

  6. スプレッドシートを再読み込み → メニュー「MailMergeBatch」が表示される

  7. メニュー「初回セットアップ」を実行 → 認証ダイアログで承認(承認手順は第1回と同じ)

初回セットアップ

メニュー「MailMergeBatch → 初回セットアップ」を実行すると、以下の4シートが自動生成されます。
シート名の先頭 `MB_` は MailMergeBatch の略で、同じスプレッドシートで他のアプリと同居しても衝突しないようにするための識別子です。

  • `MB_設定` — 件名・本文テンプレ、送信モード等を入力

  • `MB_配信リスト` — 宛先と差し込み変数(サンプル列構成付き、データ行は空)

  • `MB_送信ログ` — 送信イベント履歴(自動記録)

  • `MB_エラー` — 全体エラー履歴(自動記録)

各シートの詳細は下記の `MB_設定 シート` / `MB_配信リスト シート` / `MB_送信ログ シート` / `MB_エラー シート` の各セクションを参照してください。

基本の使い方

  1. `MB_設定` シートの `件名` `本文` テンプレに、配信リストの列名を `{{列名}}` の形で埋め込む

  2. `MB_配信リスト` シートに宛先を1行ずつ入力(A列「メアド」は必須。差し込み列は自由に追加・削除可)

  3. メニュー「送信前プレビュー(未送信1行目)」で置換結果と添付ファイル数を確認

  4. 初回は `MB_設定` の `送信モード` を `下書き` で メニュー「配信リストに一括送信」を実行 → Gmail下書きフォルダを目視確認

  5. 問題なければ `送信モード` を `送信` に変更して再実行 → 実メール送信

MB_設定 シート

件名・本文テンプレ・送信モード・本文形式・1回の送信上限・自動実行間隔 のアプリ動作のすべての設定を、このシートに A列:キー/B列:値 で入力します。

MB_設定 シートの例

入力項目

  • 件名 (必須) … 件名テンプレ。`{{列名}}` で配信リストの値を差し込む。例: `【ご案内】{{会社名}} {{宛名}}様 — {{案件番号}}`

  • 本文 (必須) … 本文テンプレ。`{{列名}}` で差し込み。
    複数行は セル内 `Alt+Enter` で改行

  • 本文形式 … `テキスト` または `HTML`。HTMLにすると `<b>` `<a>` `<ul>` `<br>` 等が使える(未指定はテキスト)

  • 送信モード … `送信` または `下書き`。初回は「下書き」を推奨(実送信なしで内容確認できる)。未指定は送信

  • 1回の送信上限 … 1回の実行で送る最大件数(1〜100、デフォルト50)。GASの6分制限と無料Gmailの1日100通の両方を超えないための上限

  • 自動実行間隔(分) … 自動実行ON時の実行頻度(自動実行設定の詳細は下記)

件名・本文テンプレの書き方

プレースホルダ `{{列名}}` の仕様

  • `{{宛名}}` `{{会社名}}` のように 配信リストの列名と完全一致 していれば、件名・本文のどこにでも・何個でも置ける

  • 列名は日本語・英数字・記号いずれもOK(例: `{{案件番号}}` `{{会社名(英)}}` `{{billing_email}}`)

  • 前後にスペースが入っていてもOK(`{{ 宛名 }}` も `{{宛名}}` と同じ扱い)

本文を複数行で書く

`MB_設定` の `本文` 行(B3セル)に複数行を入れる時は、セル内で `Alt+Enter` で改行します。
実際のメール本文に空行を入れたい場合は、テンプレでも空行を入れてください(改行コードはそのまま保存・送信されます)。

HTMLモード

`本文形式` を `HTML` にすると、本文セルに以下のような書式を直接書けます。

{{宛名}}様<br><br>

いつもお世話になっております、<b>◯◯株式会社</b>の山田です。<br><br>

{{会社名}}様の<u>メンテナンス予定</u>を以下にお送りいたします。<br>
<ul>
  <li>案件番号: <code>{{案件番号}}</code></li>
  <li>実施予定日: <b>{{実施日}}</b></li>
</ul>

詳細は<a href="https://example.co.jp/info/{{案件番号}}">こちらの資料</a>をご確認ください。

`<b>` `<u>` `<a>` `<ul>` `<br>` などの HTMLタグが有効になる。
プレースホルダの `{{…}}` はテキストモードと同じ書式でそのままOK。

自動実行の設定

  1. `MB_設定` の `自動実行間隔(分)` に数値を入力(例: 60)

  2. メニュー「自動実行 ON」を実行

  3. オフにする時はメニュー「自動実行 OFF」

手動でトリガーを変更したい時

メニューを使わずに自分でトリガーを編集することもできます。

  1. GASエディタの左サイドバー「⏰ トリガー」を開く

  2. 既存トリガーは右側の ✐ マークから編集、`…` メニューから削除

  3. 新規は「+ トリガーを追加」で `runAuto` 関数・時間主導型・希望の間隔を選択して保存

MB_配信リスト シート

1行目を列名、2行目以降を1宛先1行で入力するシートです。
「メアド」列と末尾3列(「ステータス」「送信日時」「エラー」)が必須 で、それ以外の中間列(宛名・会社名・案件番号 など)は自由に増減、編集できます。

MB_配信リスト シートの例
  • A列「メアド」(必須) … 送信先メアド。空欄行は自動スキップ

  • B〜E列の差し込み列(任意) … 列名と本文テンプレの `{{列名}}` を一致させると、その値で本文が置換される。何個でも・どの順でもOK

  • 「ステータス」「送信日時」「エラー」の3列(必須・末尾固定) … GASがこの3列名で各行の処理結果を更新する。並び順は問わないが、必ず存在していること

差し込み列の追加方法

新しい差し込み列を増やすには、 「ステータス」列の左側に1列追加 し、1行目に列名を、2行目以降に値を入れます。
あとは本文テンプレに `{{追加した列名}}` を書くだけで、その列の値が差し込まれます。

ステータス列の使い方

新規行は空欄(または `未送信` と書く)で書き込み、メニュー実行で:

  • 送信済 → `送信済` + 送信日時が自動で入る

  • 下書き作成(下書きモード時) → `下書き作成` + 送信日時

  • エラー(メアド不正・添付ファイル取得失敗 等) → `エラー` + 理由が「エラー」列に入る

`送信済` `下書き作成` `エラー` のいずれかの行は、再実行時に 自動的にスキップ されます(二重送信防止)。

  • 送信モードを `下書き` から `送信` に切り替えた場合は、ステータスを `下書き作成` から `未送信` に書き直す必要があります。

  • エラーを直して再送したい時も、その行のステータスを `未送信` に書き戻して再実行してください。

添付URL列の書き方

配信リストの 「添付URL」列 に、DriveのファイルURL を貼り付けます。

書き方のポイント:

  • ファイルのリンクURLは、「ファイルを右クリック → 共有 → リンクをコピー」で取得できる

  • 複数ファイルを添付 → URL を 改行区切り(セル内 `Alt+Enter`)または カンマ区切り で並べる

MB_送信ログ シート

送信/下書き作成された 全イベントが1行ずつ追記 されます。
再送・再下書きを繰り返した時の履歴を追いたい時は送信ログを使います。

  • 行は自動で蓄積される(手入力不要)

  • ログをリセットしたい時は メニュー「送信ログをクリア」 で全件削除できる

MB_エラー シート

設定欠落・シート欠落・想定外例外などの 行に紐づかない全体エラー を発生順に記録します。
配信リスト側の個別行エラー(メアド不正など)は配信リストの「エラー」列に書かれ、こちらには アプリ全体が止まる種類のエラー だけが記録されます。

`MB_エラー` に新規エントリが出ている時は、まずそこを開いて原因を確認してください。`config_missing` / `recipients_missing` / `recipients_headers_invalid` / `config_incomplete` などのコードで、何が足りないかが分かるようになっています。

送信前プレビューの使い方

メニュー「送信前プレビュー(未送信1行目)」を実行すると、配信リストの 未送信の先頭行 に対してプレースホルダ置換を適用し、 実際の送信先メアド・件名・本文・添付ファイル数 をアラート表示します(実送信・下書き作成・配信リスト更新は行いません)。

  • テンプレの `{{…}}` がちゃんと置換されているか

  • 想定通りの宛先・件名になっているか

  • 添付ファイルが付く(ファイル数が0でない)か

を最終チェックする用途です。
プレースホルダの書き間違い(例: `{{会社名}}` を `{{会社}}` と書いてしまった)も、ここで 未置換のまま残った文字列 として一目で分かります。

ドライランの使い方

メニュー「ドライラン(書き込まず件数のみ確認)」を実行すると、検索→置換→添付取得までを通しで動かし、 実送信・下書き作成・配信リスト更新を一切行わない 状態で「対象(未送信)N 件 / 送信予定 M 件 / エラー K 件 / 添付付き L 件」をアラート表示します。

  • 配信リストに新規行を追加した後、どれだけ送信予定か事前確認したい

  • 添付URLが全行正しく拾えるか試したい

  • 想定より少ない件数になっていないか(ステータス列の状態を確認したい)

といった用途で、Gmail も配信リストも汚さずに検証できます。

FAQ

Q. HTMLメールとテキストメールを混在させたい
1回の実行ではどちらか一方になります。

Q. 「下書き作成」した下書きはどこで確認できる?
Gmailを開き、左サイドバーの「下書き」から確認できます。

Q. 配信リストの宛先メアドが2列に分かれている(メアド + Cc など)
本アプリは1宛先=1行の `To` 送信のみに対応しています。Cc/Bcc を行ごとに変えたい運用は対象外です。

Q. 複数のアプリを同じスプレッドシートで使える?
シート名に `MB_` プレフィックスを付けているので、別のアプリと同居できます。

Q. GAS(Google Apps Script)の制限について教えて
本アプリは Google が定める GAS の実行制限の範囲内で動作します。
業務に影響しそうな主な上限は次の4つです。

  • 1日あたりのメール送信通数: 無料Gmailアカウントは 100通/日、Workspaceは 1,500通/日(消費者用エディションは100通/日)。大量配信ではこの上限に注意してください

  • 1回の実行は最大6分(無料/Workspace 共通)。本アプリが1回あたり最大50通(`1回の送信上限` で1〜100まで変更可)に制限しているのは、この6分上限と上記の1日100通上限の両方を超えないためです。

  • 1日あたりの累積実行時間: 無料Gmailアカウントは 90分/日、Workspaceは 6時間/日。自動実行間隔を1分や5分に設定すると上限に到達しやすくなるため、業務上の必要に応じて15分〜を推奨します

  • トリガー数の上限: 1スクリプト1ユーザーあたり 20個。本アプリは「自動実行 ON」で1個追加・OFF で削除するため通常は問題ありません

これらは Google 側の仕様で、本アプリ側で緩和することはできません。上限到達時は実行が中断され、次回実行時にスキップ済み分から再開します。


コード.gsとセットアップ.gsは以下より

この記事の続きはnoteで公開しています。

noteで続きを読む

GAS,自動化自動化

Posted by botw