ADVERTISEMENT

【Googleスプレッドシート】メール一斉送信のスクリプト!差込メールの実装

【Googleスプレッドシート】メール一斉送信のスクリプト!差込メールの実装
🛡️ 超解決

Googleスプレッドシートで顧客リストを管理している皆さま、個別にメールを送るのは大変ですよね。この記事では、Apps Scriptを使ってスプレッドシートのデータから差し込みメールを一斉送信する方法を解説します。スクリプトをコピー&ペーストするだけで実装できるため、プログラミングが初めての方でも安心です。送信先や件名、本文を自由にカスタマイズするポイントも紹介します。この記事を読み終えると、数百件のメールを数分で準備し送信できるようになります。

【要点】スプレッドシートから差し込みメールを一斉送信する方法

  • Apps Scriptでスクリプトを作成: スプレッドシートのデータを読み取り、各列の値をメール本文に埋め込みます。
  • テンプレート用シートを用意: 件名と本文のテンプレートを別シートに作成し、{変数名}で差し込み位置を指定します。
  • GmailApp.sendEmailで送信: 送信先の重複チェックやエラー処理を組み込み、確実にメールを送信します。

ADVERTISEMENT

メール一斉送信を実現する仕組み

スプレッドシートにはメール送信の標準機能はありません。しかし、Apps Scriptを使うことで、Gmailの送信機能を呼び出し、各セルの値を動的に埋め込んだメールを送信できます。スクリプトはスプレッドシートのデータを読み取り、テンプレート内の{名前}や{金額}といったプレースホルダを実際の値に置き換えます。これにより、コピー&ペーストの手間とミスを削減します。前提として、Googleアカウントとスプレッドシートが必要です。

差し込みメール実装の手順

1. スプレッドシートを準備する

  1. 送信用データシートを作成: 1行目に見出し行として「メールアドレス」「件名」「名前」「金額」などの列を用意します。2行目以降に各顧客のデータを入力します。たとえばA列にメールアドレス、B列に件名、C列に名前、D列に金額とします。
  2. テンプレートシートを作成: 別のシート(例:テンプレート)を作成し、セルA1に件名テンプレート、セルA2に本文テンプレートを記述します。件名テンプレート例:「{名前}様、お支払いのお知らせ」、本文テンプレート例:「{名前}様。金額{金額}円の請求書を送付します。」のように{変数名}を使います。変数名はデータシートの見出し行と完全に一致させてください。

2. スクリプトエディタを開く

  1. メニューから選択: スプレッドシート上部の「拡張機能」メニューをクリックし、「Apps Script」を選択します。新しいタブでスクリプトエディタが開きます。
  2. プロジェクト名を設定: 左上の「無題のプロジェクト」をクリックして、わかりやすい名前(例:メール一斉送信)に変更します。

3. コードを記述する

  1. スクリプトファイルにコードを追加: エディタのコード.gsファイルに以下のコードをコピー&ペーストします。シート名や列番号は自身のデータに合わせて修正してください。
function sendEmails() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var dataSheet = ss.getSheetByName('送信用データ');  // データシート名
  var templateSheet = ss.getSheetByName('テンプレート');  // テンプレートシート名
  
  // テンプレートを取得
  var subjectTemplate = templateSheet.getRange('A1').getValue();
  var bodyTemplate = templateSheet.getRange('A2').getValue();
  
  // データレンジを取得(2行目以降)
  var lastRow = dataSheet.getLastRow();
  var dataRange = dataSheet.getRange(2, 1, lastRow - 1, dataSheet.getLastColumn());
  var data = dataRange.getValues();
  
  // 見出し行を取得(変数名のリスト)
  var headers = dataSheet.getRange(1, 1, 1, dataSheet.getLastColumn()).getValues()[0];
  
  // 各行をループ
  for (var i = 0; i < data.length; i++) {
    var row = data[i];
    var email = row[0];  // メールアドレス列(0始まり)
    if (email === '') continue;  // 空行スキップ
    
    var subject = subjectTemplate;
    var body = bodyTemplate;
    
    // 各変数を置換
    for (var j = 0; j < headers.length; j++) {
      var placeholder = '{' + headers[j] + '}';
      var value = row[j];
      subject = subject.replace(new RegExp(placeholder, 'g'), value);
      body = body.replace(new RegExp(placeholder, 'g'), value);
    }
    
    // メール送信
    GmailApp.sendEmail(email, subject, body);
  }
  
  SpreadsheetApp.getUi().alert('メール送信が完了しました。');
}
  1. シート名と列インデックスを調整: 上記コード内の「送信用データ」「テンプレート」は実際のシート名に変更します。また、メールアドレスがA列の場合は0ですが、もしB列ならrow[1]に変更します。

4. スクリプトを実行する

  1. 承認作業: 実行ボタン(▶)をクリックすると、初回は権限承認ダイアログが表示されます。内容を確認し「許可」をクリックします。このスクリプトはメール送信とスプレッドシートの読み取り権限が必要です。
  2. 送信結果の確認: 実行後、送信したメールの件数やエラーはログ(表示>ログ)で確認できます。すべて正常に送信されると、アラートが表示されます。

5. テスト送信と本番実行

  1. 少量のテスト: 最初はデータシートを2〜3行にしてテストします。スクリプトを実行し、送信されたメールを確認します。テンプレートの置換が正しく行われているか、宛先が間違っていないかをチェックします。
  2. 本番用に調整: 問題がなければデータを全行に戻して本番実行します。大量送信の前に、後述の制限を確認しておきます。

注意点とよくあるトラブル

Gmailの送信制限に引っかかる

Gmailアカウントには1日あたりの送信上限があります。無料アカウントでは500通、Google Workspaceアカウントでは2,000通(状況により変動)です。大量送信時は、スクリプト内で一定時間待機させるか、複数日に分けて送信します。以下のようにUtilities.sleep(ms)をループ内に挿入して制限を回避できます。

// ループの最後に1秒待機
Utilities.sleep(1000);

エラーが発生して途中で止まる

無効なメールアドレスやテンプレートの記述ミスがあると、スクリプトが中断します。try…catch構文でエラーをスキップし、エラーがあった行をログに記録するように改良します。以下は修正例です。

try {
  GmailApp.sendEmail(email, subject, body);
} catch (e) {
  Logger.log('エラー: ' + email + ' - ' + e.message);
}

テンプレートの変数が置換されない

{変数名}と見出し行が完全に一致していない(例:半角スペースや大文字小文字の違い)と置換されません。見出し行は全て半角英数字で統一し、テンプレート内でも同じ表記を使用します。また、複数の変数がある場合、正規表現のgフラグで全て置換されることを確認します。

ADVERTISEMENT

通常の送信と差し込み送信の比較

項目 通常の手動送信 スクリプトによる差し込み送信
作業時間 1件あたり約1分かかる 数百件でも数秒から数分
ミスのリスク コピペミスが発生しやすい データが正しければ完全一致
カスタマイズ性 件名・本文を毎回手動編集 テンプレート変更で一括反映
送信制限 制限は低い(手動なので) GmailAPIの制限あり

まとめ

この記事では、GoogleスプレッドシートとApps Scriptを使って差し込みメールを一斉送信する方法を説明しました。用意したテンプレートにデータを流し込むスクリプトを使えば、手作業の手間を大幅に削減できます。実際にコードを試す際は、まず少ない行でテストし、送信制限やエラー処理を確認してください。さらに、条件分岐を加えて特定の顧客だけに送信したり、添付ファイルを追加する拡張も可能です。ぜひ、あなたのデータに合わせてカスタマイズしてみてください。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。