GASで差し込みメールを一斉送信 顧客200件への案内を5分の操作で送る無料レシピ
価格改定や営業日のお知らせを、顧客 200 件に宛名入りで送る。この作業は Google アカウントだけで自動化できます。本レシピは Gmail の下書きをそのままテンプレートにして、スプレッドシートの顧客リストへ 1 通ずつ個別送信する仕掛けを、コピーして動くコード付きで構築します。月額は ¥0 です。
- 月額 ¥0。Google アカウントがあれば、メール配信サービスの契約なしで宛名入りの一斉送信ができる
- 本文は Gmail の下書きで書く。コードを触らずに文面を差し替えられるため、2 回目以降は 5 分の操作で送れる
- 1 通ずつ個別送信するので、BCC の入れ忘れによる宛先の流出事故が構造的に起きない
- 最大の制約は Apps Script から送る場合の「1 日 100 件」(無料アカウント)。200 件は 1 日で送り切れません
- 本記事のコードは残り送信枠を自分で確認して途中で安全に停止し、翌日に続きから再開します
編集長の見解: 顧客への一斉案内で最も多い事故は、誤送信でも誤字でもなく 「送信上限に引っかかって、途中まで送られた状態で止まる」 ことです。誰に届いて誰に届いていないかが分からなくなり、確認のために結局 1 件ずつ Gmail を遡ることになります。有料のメール配信サービスを契約すればこの問題は消えますが、月に 1 〜 2 回しか送らない事業者にとっては固定費が見合いません。本レシピは、送信のたびに残り枠を確認して安全に止まり、送信済みをスプレッドシートに記録する設計にしてあります。無料でありながら「どこまで送ったか」が常に分かる状態を保つ、という点が要です。
このレシピで解決する課題
顧客への案内メールを手作業で送っている事業者に共通する、判断を伴わない定型作業を整理します。
- 宛名の打ち直し: 「株式会社○○ ご担当者様」 の部分だけを 1 通ずつ書き換えて送っている
- BCC の事故: 一斉送信で BCC に入れ忘れ、顧客のメールアドレスが他社に見えてしまう
- 送信済みの管理: どこまで送ったかをリストに手でチェックしており、重複送信や送り漏れが起きる
- 上限での停止: 大量送信の途中で Google 側の上限に達し、原因が分からないまま止まる
- 文面修正の手間: 文面を直すたびにコードや設定画面を開く必要があり、担当者が触れない
これらはすべて 判断が一切要らない作業 か、仕組みで防げる事故 です。次のセクションで、完成する仕組みの全体像を示します。
完成形 (フロー図)
実行のたびに残り送信枠を確認し、送れる分だけ送って記録する。上限に達したら安全に停止する
要点は 3 番目の「残り枠を確認」 です。送る前に今日あと何件送れるかを取得し、その範囲内でしか送らないため、上限超過で不明瞭な停止が起きません。次のセクションで、その上限の中身を確認します。
最重要: Google の送信上限は 2 種類ある
本レシピで唯一つまずくのが送信上限です。ここを誤解したまま 200 件のリストを流すと、確実に途中で止まります。
理解すべき点は 1 つだけです。Gmail の画面から手で送るときの上限と、Apps Script から送るときの上限は別物 で、後者のほうがはるかに厳しく設定されています。
まず Apps Script 側の上限です。公式のクォータ (利用上限) 一覧に、アカウント種別ごとの値が明記されています[出典]。
| 制限項目 | 無料アカウント (gmail.com) | Google Workspace |
|---|---|---|
| 1 日の送信先 (宛先数) | 100 件 / 日 | 1,500 件 / 日 |
| 1 通あたりの宛先数 | 50 件 | 50 件 |
| 1 通あたりの添付ファイル数 | 250 個 | 250 個 |
| 添付ファイルの合計サイズ | 25 MB / 通 | 25 MB / 通 |
| 本文サイズ | 200 KB / 通 | 400 KB / 通 |
| 1 回の実行時間 | 6 分 | 6 分 |
| トリガーの合計実行時間 | 90 分 / 日 | 6 時間 / 日 |
一方、Gmail を画面から使うときの上限はこれより緩く、個人用アカウントは 1 日 500 通・1 通あたり 500 宛先までとされています[出典]。Google Workspace の有料アカウントは 1 日 2,000 通 (差し込み送信機能を使う場合は 1,500 通)、外部宛先は 1 日 3,000 件までです[出典]。
| 送信経路 | 無料アカウント | Google Workspace (有料) |
|---|---|---|
| Gmail の画面から手で送る | 500 通 / 日 | 2,000 通 / 日 |
| Apps Script から送る (本レシピ) | 100 宛先 / 日 | 1,500 宛先 / 日 |
| Gmail の画面から送るときの 1 通あたりの宛先数 | 500 件 | 2,000 件 (外部は 500 件) |
| Apps Script から送るときの 1 通あたりの宛先数 | 50 件 | 50 件 |
1 通あたりの宛先数も経路で異なります。Apps Script から送る場合は 1 通 50 宛先までなので、そもそも 1 通に大量の宛先をまとめる使い方はできません。本レシピは 1 通に 1 宛先だけを入れて個別送信するため、この制限には触れません。
無料アカウントで最も詰まる制限: Apps Script 経由は 1 日 100 件
「Gmail は 1 日 500 通まで送れるのだから、200 件なら余裕だ」 と考えると必ず失敗します。Apps Script から送信する場合の上限は、無料アカウントでは 1 日あたり 100 宛先 です。200 件のリストを一度に流すと、101 件目でエラーになって処理が止まります。しかも標準のコードには「どこまで送ったか」 の記録が無いため、再実行すると先頭からやり直して同じ相手に二重送信します。この 2 つを同時に防ぐのが、本記事のコードの主目的です。なお、これらの上限は公式ドキュメントに「予告なく変更・削減されることがある」 と明記されているため、大量送信の前には公式ページの確認をおすすめします。
上限が分かったので、次は 200 件を安全に送り切る設計を決めます。
200 件を送り切る 3 つの設計
無料アカウントで 200 件を送る方法は 3 つあります。編集部の評価を添えて比較します。
| 方法 | 追加費用 | 所要日数 (200 件) | 編集部のおすすめ度 |
|---|---|---|---|
| A. 日をまたいで分割 | ¥0 | 2 〜 3 日 | ★★★★★ (案内・お知らせ向け) |
| B. Google Workspace に切り替え | ¥800 / ユーザー / 月 〜 | 当日中 | ★★★★ (毎月送るなら) |
| C. メール配信サービスを契約 | 月 ¥1,000 前後 〜 | 当日中 | ★★★ (配信停止管理まで必要なら) |
方法 A は、1 日 95 件ずつ (上限 100 件のうち 5 件は予備として残す) 送り、残りを翌日に回す進め方です。本記事のコードは送信日時をスプレッドシートに記録するため、翌日に同じ関数を実行するだけで続きから再開します。
ここで 1 点だけ注意があります。この枠は日本時間の 0 時にリセットされるのではなく、最初の送信から 24 時間が経過して回復する仕組み です[出典]。前日に送った分は 1 通ずつ順に回復していくため、1 日目の午前 9 時に実行を始めたなら、2 日目は午前 10 時ごろというように 1 時間ほど余裕を持たせるのが確実です。本記事のコードは実行のたびに残り枠を確認するため、回復前に実行しても事故にはならず「本日の残り送信枠が○件のため中止しました」 と記録して止まります。
| 実行日 | 送信件数 | 累計 | 残り |
|---|---|---|---|
| 1 日目 | 95 件 | 95 件 | 105 件 |
| 2 日目 | 95 件 | 190 件 | 10 件 |
| 3 日目 | 10 件 | 200 件 | 0 件 |
Google Workspace の Business Starter は月額 ¥800 / ユーザーからで[出典]、Apps Script 経由でも 1 日 1,500 宛先まで送れます。新規契約には割引価格が用意されている時期もあるため、実際の請求額は公式料金ページでご確認ください。独自ドメインのメールアドレスを既に使っている事業者なら、追加費用なしで方法 B が選べます。
なぜ上限ぎりぎりまで使わないのか
コード内で予備を 5 件残しているのは、この送信枠がスクリプト単位ではなくアカウント単位で管理されているため です。公式ドキュメントには枠が「ユーザーごと」に適用されると明記されており[出典]、同じ Google アカウントで動かしている別のスクリプト (フォーム回答の通知、日報の自動送信など) も同じ 100 件を消費します。さらに送信失敗の再試行分も枠を減らします。
枠を使い切った状態で送信を試みると、スクリプトは例外を投げて実行そのものが止まります。同ドキュメントは「上限を超えると例外が発生して実行が停止する」 と述べています。途中で不明瞭に止まるより、95 件で自分から安全に降りる設計のほうが扱いやすい、という判断です。急ぎでない案内なら 1 日 50 件ずつに絞ってさらに余裕を持たせても構いません。なお Gmail の画面から手で送るときの上限は、これとは別に 1 日 500 通と定められています (無料アカウント)。自動送信で使う 100 件はこの 500 通に対して十分小さいため、担当者が Gmail から返信を書けなくなる心配はありません。
方法 C を選ぶ場合の具体的な組み方も、編集部で別レシピとして用意しています。配信停止の受け付けやリストの重複排除まで面倒を見たい場合は、次の 2 本が近い構成です。
- Make.com で Airtable→メルマガ自動配信 中小企業のEmailマーケ自動化 — 配信停止の管理まで含めた自動配信の組み方
- ZapierでAirtable顧客→Mailchimp自動同期 メルマガ配信を週2時間削減する自動化 — 顧客リストと配信サービスを同期させる手順
Make.com を無料プランで試す → ※ PR・アフィリエイトリンクを含みます
設計が決まったので、実際の構築手順に入ります。
設定手順 (45 分)
新しいスプレッドシートを作り、シート名を「送信リスト」 に変更します。1 行目は見出し行で、この見出し名が差込タグの名前になります。
- A 列「メールアドレス」: 送信先。ここが空の行は自動で飛ばされます
- B 列「会社名」: 差込に使う項目 (例: 株式会社サンプル)
- C 列「担当者名」: 差込に使う項目 (例: 山田)
- D 列「送信日時」: 自動で記入されます。手で触らないでください
- E 列「エラー」: 送信に失敗した理由が自動で入ります
見出し名は日本語で構いませんが、記号やスペースは入れないでください。差込タグの照合に使うためです。
Gmail で新規メールを作成し、宛先は空のまま下書きとして保存 します。件名と本文の差し込みたい箇所に、見出し名を二重の波括弧で囲んだ差込タグを書きます。
- 件名の例: 【ご案内】{{会社名}} 御中 — 営業日変更のお知らせ
- 本文の書き出し例: {{会社名}} {{担当者名}} 様
- 件名はコード側で照合するため、他の下書きと重複しない文言にしてください
この方式にすると、次回以降は下書きを書き換えるだけで文面を差し替えられます。担当者がコードを開く必要はありません。
作成したスプレッドシートを開き、メニューの「拡張機能」 から「Apps Script」 を選びます。エディタが別タブで開き、空のプロジェクトが作られます。
スプレッドシートから作ることで、リストとの紐づけが分かりやすくなります。プロジェクト名は「差し込みメール送信」 など分かりやすいものに変更してください。
本記事の次セクションにあるコード全文をエディタに貼り付けます。書き換えるのは冒頭の設定部分だけです。
- SHEET_ID: スプレッドシートの URL の d と edit に挟まれた英数字の並び
- DRAFT_SUBJECT: Step 2 で保存した下書きの件名を、差込タグごとそのまま貼る
- SENDER_NAME: 受信者に表示される差出人名 (自社名 + 部署名を推奨)
貼り付けたらフロッピーディスクのアイコンで保存します。
本番リストを入れる前に、必ず自分と同僚のアドレスだけを 2 行入れて sendMailMerge を実行します。
- 初回実行時に Gmail とスプレッドシートへのアクセス許可を求める画面が出ます
- 「詳細」 から自分のプロジェクトを選び、許可してください
- 受信メールで差込タグが会社名に置き換わっているかを目視で確認します
- D 列に送信日時が入り、E 列が空であれば成功です
差込タグがそのまま残っていたら、見出し名とタグの文字列が一致していません。全角と半角の違いが原因のことが多いです。
テストが通ったら、テスト行を削除して本番の 200 件を貼り付けます。あとは sendMailMerge を実行するだけです。
- 1 回の実行で送れるのは、無料アカウントなら 95 件までです
- 実行ログに「送信 95 件 / 残り枠 5 件」 のように結果が出ます
- 翌日、前日の実行時刻より 1 時間ほど後に同じ関数を実行すると、96 件目から自動で再開します (枠は暦日の 0 時ではなく、最初の送信から 24 時間かけて回復します)
- 1 回の実行は 6 分で打ち切られます。95 件はおおむね収まりますが、途中で止まっても送信済みの行は D 列に記録されているため、もう一度実行すれば続きから再開します
- 送信済みの行は D 列で判定して飛ばすため、二重送信は起きません
時刻トリガーで毎日自動実行することもできますが、案内メールは内容を確認してから送るべきなので、編集部は手動実行を推奨します。
以上で構築は完了です。次に、実際に貼り付けるコードの全文を掲載します。
コード全文 (そのまま動きます)
以下は編集部が動作を確認した実物です。冒頭の設定部分だけを自分の環境に合わせて書き換えてください。
// ===== 設定: ここだけ書き換える =====
const SHEET_ID = 'ここにスプレッドシートの ID を貼る';
const LIST_SHEET = '送信リスト';
const DRAFT_SUBJECT = '【ご案内】{{会社名}} 御中 — 営業日変更のお知らせ';
const SENDER_NAME = '株式会社サンプル 営業部';
const DAILY_MARGIN = 5; // 他のスクリプト・再試行のために残しておく件数
const BATCH_LIMIT = 95; // 1 回の実行で送る上限
// ====================================
const COL_MAIL = 1; // A 列: メールアドレス
const COL_SENT = 4; // D 列: 送信日時
const COL_ERR = 5; // E 列: エラー
/**
* Gmail の下書きをテンプレートに、リストへ差し込みメールを 1 通ずつ送る。
* 残り送信枠を確認し、上限に達する前に安全に停止する。
*/
function sendMailMerge() {
const sheet = SpreadsheetApp.openById(SHEET_ID).getSheetByName(LIST_SHEET);
const values = sheet.getDataRange().getValues();
const header = values[0];
const rows = values.slice(1);
// 今日あと何件送れるかを Google に問い合わせる
const quota = MailApp.getRemainingDailyQuota();
if (quota <= DAILY_MARGIN) {
Logger.log('本日の残り送信枠が %s 件のため中止しました。明日また実行してください', quota);
return;
}
const sendable = Math.min(quota - DAILY_MARGIN, BATCH_LIMIT);
const tpl = getDraftBySubject_(DRAFT_SUBJECT);
let sent = 0;
for (let i = 0; i < rows.length; i++) {
if (sent >= sendable) break;
const row = rows[i];
const to = String(row[COL_MAIL - 1]).trim();
const r = i + 2; // シート上の実際の行番号
if (!to) continue; // 空行は飛ばす
if (row[COL_SENT - 1]) continue; // 送信済みは飛ばす
if (!/^[^@\s]+@[^@\s]+\.[^@\s]+$/.test(to)) {
sheet.getRange(r, COL_ERR).setValue('宛先の形式が不正です');
continue;
}
try {
GmailApp.sendEmail(
to,
fill_(tpl.subject, header, row),
fill_(tpl.plain, header, row),
{ htmlBody: fill_(tpl.html, header, row), name: SENDER_NAME }
);
sheet.getRange(r, COL_SENT).setValue(new Date());
sheet.getRange(r, COL_ERR).setValue('');
sent++;
} catch (e) {
sheet.getRange(r, COL_ERR).setValue(String(e.message).slice(0, 200));
}
Utilities.sleep(500); // 連続送信の間隔を空ける
}
Logger.log('送信 %s 件 / 残り枠 %s 件', sent, MailApp.getRemainingDailyQuota());
}
差込処理と下書き取得の部分も、同じファイルに続けて貼り付けてください。
/** 件名が一致する Gmail の下書きを 1 件取り出す */
function getDraftBySubject_(subject) {
const drafts = GmailApp.getDrafts();
for (let i = 0; i < drafts.length; i++) {
const m = drafts[i].getMessage();
if (m.getSubject() === subject) {
return { subject: m.getSubject(), plain: m.getPlainBody(), html: m.getBody() };
}
}
throw new Error('件名が一致する下書きが見つかりません: ' + subject);
}
/** 見出し名の差込タグを、その行の値に置き換える */
function fill_(text, header, row) {
let out = text;
for (let i = 0; i < header.length; i++) {
const name = String(header[i]).trim();
if (!name) continue;
const tag = new RegExp('\\{\\{\\s*' + name + '\\s*\\}\\}', 'g');
out = out.replace(tag, row[i] == null ? '' : String(row[i]));
}
return out;
}
/** 初回に 1 回だけ実行: 見出し行を作る */
function setupSheet() {
const sheet = SpreadsheetApp.openById(SHEET_ID).getSheetByName(LIST_SHEET);
sheet.getRange(1, 1, 1, 5)
.setValues([['メールアドレス', '会社名', '担当者名', '送信日時', 'エラー']])
.setFontWeight('bold');
sheet.setFrozenRows(1);
}
/** 残り送信枠だけを確認したいときに実行する */
function checkQuota() {
Logger.log('本日あと %s 件送れます', MailApp.getRemainingDailyQuota());
}
残り枠の確認に使っている仕組み
コード内の MailApp.getRemainingDailyQuota は、その日にあと何件の宛先へ送れるかを返す公式の機能 です[出典]。この値を送信前に確認することで、上限を超えてエラーで止まる前に自分から停止できます。送信そのものには GmailApp を使っています。GmailApp で送ると自分の Gmail の送信済みフォルダに記録が残るため、後から「誰に何を送ったか」 を Gmail 側でも追えるという利点があります。なお公式のクォータ表が定めるメール送信枠は「1 日の送信先」 という 1 項目だけで、送信機能ごとに別枠は用意されていません。そのため GmailApp で送った分も、MailApp で確認する残り枠にそのまま反映されます。
コードが揃ったので、次にどれだけの手間が減るかを試算します。
Mira のシミュレーション (期待効果の試算)
以下は 編集部による試算 です。実際の効果は顧客数・文面の複雑さにより変動します。
前提: 宛名の書き換えと送信、送信済みリストへのチェックに 1 件あたり平均 40 秒かかっているものとします。自動化後は、下書きの作成と実行、結果確認の時間のみが残ると想定します。
- 宛名の書き換えと送信: 約 2.2 時間 (200件×40秒)
- 送信済みのチェック: 約 20 分
- 宛先流出のリスク: BCC の入れ忘れで発生しうる
- 送り漏れの確認: 目視でリストを突合
- 月額費用: ¥0 (人件費のみ)
- 合計: 1 回あたり 約 2.5 時間
- 下書きの作成: 約 10 分
- 実行と結果確認: 約 5 分 (日をまたぐ場合は 2 回)
- 宛先流出のリスク: 1 通ずつ個別送信のため発生しない
- 送り漏れの確認: D 列の空欄を見るだけ
- 月額費用: ¥0 (Google Apps Script は無料)
- 合計: 1 回あたり 約 15 分
編集部の試算: 1 回あたり約 2.2 時間の削減。初期構築 45 分は 1 回目で回収できる計算
ただし この数字は 200 件を送る事業者の場合 です。件数が少なければ削減幅も小さくなります。自社の規模に近い行をご確認ください。
| 顧客件数 | 手作業の所要時間 | 自動化後 | 1 回あたりの削減 | 無料アカウントでの所要日数 |
|---|---|---|---|---|
| 30 件 (個人事業主) | 約 25 分 | 約 13 分 | 約 12 分 | 1 日 |
| 100 件 (数名規模) | 約 1.3 時間 | 約 14 分 | 約 1.1 時間 | 2 日 |
| 200 件 (20〜50 名規模) | 約 2.5 時間 | 約 15 分 | 約 2.2 時間 | 3 日 |
| 500 件 (50 名超) | 約 6.2 時間 | 約 20 分 | 約 5.9 時間 | 6 日 (Workspace なら 1 日) |
500 件を超えるあたりから、無料アカウントでの日数分割が現実的でなくなります。その規模なら Google Workspace への切り替え、または配信停止の管理まで含めたメール配信サービスの検討をおすすめします。次に、導入時に実際に起きる失敗を挙げます。
編集部の警告 ⚠️ 送る前に必ず確認すること
失敗パターン 1: 広告・宣伝を含む内容を、同意なく送ってしまう
営業や宣伝を目的とするメールの一斉送信は、特定電子メール法の規制対象です。総務省の解説では、平成 20 年 12 月の改正で 取引関係以外においては、あらかじめ送信に同意した相手にのみ広告・宣伝・勧誘を目的とするメールを送れる方式 (オプトイン方式) が導入されたと説明されています[出典]。
同法第四条は、送信時に受信者の画面へ 送信者の氏名または名称 と、受信拒否の通知を受けるためのメールアドレスまたは URL を正しく表示することを求めています。また同意を得た記録の保存も義務づけられています。
裏を返せば、既存の取引先への事務連絡 (営業日変更、価格改定の通知など) と、新商品の宣伝メールとでは扱いが異なります。宣伝要素が入る場合は、下書きの末尾に自社の名称・住所・配信停止の連絡先を必ず記載してください。本レシピは Gmail の下書きをそのままテンプレートにするため、この定型文を下書きの末尾に一度書いておけば全通に入ります。判断に迷う内容であれば、送信前に専門家に確認することをおすすめします。
失敗パターン 2: テストせずに本番リストを流し、全員に差込タグのまま届く
最も多い失敗が、見出し名と差込タグの文字列不一致です。「会社名」 と書いた見出しに対してタグ側が「御社名」 になっていたり、全角スペースが混ざっていたりすると、置き換えが起こらず タグの文字列がそのまま顧客に届きます。しかも一度送ったメールは取り消せません。必ず Step 5 のとおり、自分と同僚のアドレス 2 件だけを入れた状態で先にテスト送信し、受信箱で目視確認してから本番リストに差し替えてください。テスト行を消し忘れると自社宛てにも本番メールが届くので、削除もセットで行います。
失敗パターン 3: 短時間に大量送信して、迷惑メール扱いされる
同一内容のメールを間隔なく連続送信すると、受信側のサービスで迷惑メールと判定されやすくなります。本記事のコードでは 1 通ごとに 0.5 秒の待機を入れていますが、それでも 件名や本文が全員まったく同じだと判定リスクは残ります。会社名や担当者名を差し込むこと自体が、この対策としても働きます。加えて、独自ドメインのメールアドレスを使っている場合は、送信元の正当性を証明する設定 (SPF・DKIM) が済んでいるかを事前に確認してください[出典]。設定が無いまま大量送信すると、届かないまま気付かない事態になります。
失敗の多くは送信前の確認で防げます。コードを書く時間よりも、テスト送信と文面確認に時間をかけてください。
補助金の活用 (編集部の提案)
本レシピ単体では補助金の対象になりにくい
Google Apps Script は無料であり、支払いが発生しないため 補助対象経費 (補助金がもらえる費目) が存在しません。一方で、顧客管理システムやメール配信サービスの導入と組み合わせる形であれば、営業活動の改善計画の一部として説明材料になります。IT 導入補助金 2026 の詳細 で対象ツールの条件をご確認ください。また、本レシピで削減した時間は 小規模事業者持続化補助金 の申請時に「自力で業務改善に取り組んでいる実績」 として記載できます。
補助金を待たずに今日から始められるのが、無料で完結する本レシピの利点です。
関連レシピ
- Google Apps ScriptでGmail添付を自動保存 月¥0で経理作業を週3時間削減
- GASでGmail自動仕分け・ラベル付け メール整理を1日20分削減するレシピ
- Google Apps ScriptでGoogleフォーム回答をSlack即時通知 無料で初動を10分に
- Mailchimp登録→スプレッドシート同期 Zapier 見込み客管理の自動化レシピ
よくある質問
Q. プログラミングの経験がなくても設定できますか?
編集部の答え: 本記事のコードは書き換える箇所を冒頭の 3 行に限定してあります。文面は Gmail の下書きで書くため、2 回目以降はコードを開く必要すらありません。ただし想定外の動きをした際に自力で直すには多少の読解力が必要です。不安な場合は、まず社内向けの連絡で試してください。
Q. 200 件を 1 日で送り切る方法はありませんか?
編集部の答え: 無料アカウントでは Apps Script 経由の上限が 1 日 100 宛先のため、1 日では送り切れません。当日中に完了させたい場合は、Google Workspace (月額 ¥800 / ユーザーから) に切り替えると 1 日 1,500 宛先まで送れます。独自ドメインのメールアドレスを既に運用しているなら、この方法が最も手早く済みます。
Q. 添付ファイルを付けて送ることはできますか?
編集部の答え: できます。Apps Script の上限では 1 通あたり 250 個・合計 25 MB までとされています。ただし全員に同じ資料を送る場合は、添付ではなく Google ドライブの共有リンクを本文に入れるほうが確実です。添付が多いと受信側で迷惑メール判定されやすくなり、送信 1 件あたりの処理時間も伸びます。
Q. 顧客ごとに違うファイルを添付できますか?
編集部の答え: スプレッドシートにファイル ID の列を足し、送信時にドライブから取得して添付する形に拡張できます。請求書の一斉送付のように、宛先ごとに別ファイルを送る用途であれば、Gmail 添付の自動保存レシピ で扱っているドライブ操作のコードが参考になります。
Q. 送信済みのリストを次回また使いたいのですが?
編集部の答え: D 列の送信日時が入っている行は次回も飛ばされるため、次の案内を送るときは D 列と E 列をまとめて空にしてください。過去の送信履歴を残したい場合は、シートを複製して日付入りの名前で保存してから消すのが安全です。
出典・参考情報
- Google Apps Script のクォータと制限 — https://developers.google.com/apps-script/guides/services/quotas
- Google Apps Script MailApp リファレンス — https://developers.google.com/apps-script/reference/mail/mail-app
- Google Apps Script GmailApp リファレンス — https://developers.google.com/apps-script/reference/gmail/gmail-app
- Gmail ヘルプ メールの送受信数に関する制限 — https://support.google.com/mail/answer/22839?hl=ja
- Google Workspace の Gmail 送信制限 — https://knowledge.workspace.google.com/admin/gmail/gmail-sending-limits-in-google-workspace
- Google Workspace 料金プラン — https://workspace.google.com/intl/ja/pricing.html
- 総務省 特定電子メールの送信の適正化等に関する法律 — https://www.soumu.go.jp/main_sosiki/cybersecurity/kokumin/basic/legal/08/
- 総務省 迷惑メール対策 (SPF / DKIM 等の技術的対策) — https://www.soumu.go.jp/main_sosiki/joho_tsusin/d_syohi/m_mail.html
- 中小企業庁 IT 導入補助金 — https://www.it-hojo.jp/
本記事の数値のうち、「編集部の試算」 と明示された箇所は編集部によるシミュレーションです。実際の効果は事業特性により変動します。送信上限は Google 側の裁量で予告なく変更されうるため、大量送信の前に公式情報源をご確認ください。特定電子メール法の適用可否について判断に迷う場合は、専門家にご相談ください。
編集長 Mira / AI経営ラボ 本記事は 2026-07-30 時点の情報です。Google Apps Script および Gmail の送信上限は予告なく変更される場合があります。