【GAS】スプレッドシートからメールを一斉送信(メールマージ)する方法

本記事では、

  • スプレッドシートに入力した複数のメールアドレス宛に
  • 共通のテンプレートを使って
  • ワンクリックで一斉送信する

方法を、実例を用いて紹介します。

このようなメール一斉送信ツールを作成できます
名前、メールアドレス、メールの件名と内容をまとめたテーブルを用意
別シートにはメールのテンプレートを用意

ボタンをクリックすると、テーブルの内容およびテンプレートに基づいてメールを自動作成し、送信まで行う

Gmailの送信済みボックス

実装の流れ

  1. スプレッドシートの準備(ここへ飛ぶ
  2. Apps Scriptを起動してコードを記述(ここへ飛ぶ
  3. スプレッドシートに一斉送信ボタンを設置(ここへ飛ぶ
  4. ボタンをクリックし、Gmailアカウントと連携(ここへ飛ぶ
STEP

スプレッドシートの準備

Googleスプレッドシートを立ち上げて、メーリングリストとテンプレートを作成します。

本実装例では、メーリングリストに「名前」「メールアドレス」「件名」「内容」の列を用意しました。
また、テンプレート(共通する内容)は別シートに用意しました。

名前、メールアドレス、メールの件名と内容をまとめたテーブルを用意
別シートにはメールのテンプレートを用意

メール一斉送信ボタンの設置は STEP 3 にて説明します。

STEP

Apps Scriptを起動してコードを記述

続いてApps Scriptを起動します。

「コード.gs」を開き、スプレッドシートの内容に基づいてメールを一斉送信するためのコードを記述します。
本実装では以下コードを記述し、「メールを一斉送信」というタイトル(プロジェクト名)を設定しました。

function sendEmails() {
  // スプレッドシート全体を取得
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();

  // メーリングリストを取得
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const data = sheet.getDataRange().getValues(); // 全データ取得
  const headers = data[0]; // ヘッダー行

  // 必要な列のインデックスを取得
  const nameIndex = headers.indexOf('名前');
  const emailIndex = headers.indexOf('メールアドレス');
  const subjectIndex = headers.indexOf('件名');
  const messageIndex = headers.indexOf('内容');

  // テンプレートが保存されている「共通の内容」シートを取得
  const commonSheet = spreadsheet.getSheetByName('共通の内容'); // テンプレートがあるシート名
  const template = commonSheet.getRange('A1').getValue(); // テンプレート取得

  // メール送信処理
  for (let i = 1; i < data.length; i++) { // ヘッダーをスキップ
    const row = data[i];
    const name = row[nameIndex];
    const email = row[emailIndex];
    const subject = row[subjectIndex];
    const message = row[messageIndex];

    if (email) {
      // テンプレート内の変数を置き換え
      const body = template
        .replace("name", name)
        .replace("message", message);
      
      // メール送信
      GmailApp.sendEmail(email, subject, body);
    }
  }
  SpreadsheetApp.getUi().alert('メール送信が完了しました!');
}
スプレッドシートの入力内容を取得

2つのシート(メーリングリストとテンプレート)の入力内容を取得します。

const data = sheet.getDataRange().getValues(); → すべてのセルのデータを2次元配列として取得し、const headers = data[0]; → 配列の0番目(つまりスプレッドシートの1行目 = ヘッダー)取得します。

headersの中身 → [‘名前’, ‘メールアドレス’, ‘件名’, ‘内容’]

const nameIndex = headers.indexOf('名前');headers 配列内で、文字列 '名前' が最初に現れるインデックス(列番号)を取得します。'名前'headers 配列内の最初の要素なので、nameIndex0 になります。

メールの作成と送信処理

for文を使って、ヘッダーを除くテーブルの行数分のメールの作成と送信処理を行います。
テンプレート内の変数(”name”と”message”)は、メーリングリストから取得した内容(名前、内容)に置き換えることで、同じテンプレートを使いつつ部分的にカスタマイズすることができます。

GmailApp.sendEmail(email, subject, body); → Gmailからメールを送信するためのメソッド。

  • 第一引数(必須):宛先メールアドレスを文字列で指定
    • 複数指定する場合はカンマ区切りで記述します。(例: “example1@gmail.com,example2@gmail.com”)
  • 第二引数(必須):メールの件名を文字列で指定
  • 第三引数(必須):メールの本文を文字列で指定
  • 第四引数(任意):以下のプロパティを設定できます。
    • bcc: BCCの宛先を文字列で指定。
    • cc: CCの宛先を文字列で指定。
    • htmlBody: HTML形式の本文を指定。
    • name: 差出人名を指定(送信者の名前部分を設定)。

他にも設定できるプロパティがあるので、気になる方は調べてみてください。

コードを記述できたら保存し、スプレッドシートに戻ります。

STEP

メール作成ボタンの設置

スプレッドシートの「挿入」タブから「図形描画」を選択し、図形とテキストを組み合わせボタンを作成します。
作成したボタンは、スプレッドシートの適当な位置に移動させます。

設置したボタンをクリックし、ボタン右の方に表示される「⋮」をクリックして「スクリプトを割り当て」を選択します。

ウィンドウが表示されるので、STEP 2で作成したメソッド名(本実装ではsendEmails)を記入します。

STEP

ボタンをクリックし、Googleアカウントと連携

STEP 3で設置したボタンをクリックし、Googleアカウントと連携させると同時にメールが一斉送信されるかを確認します。
スクリプトを割り当てたボタンを初めてクリックすると、認証を求めるウィンドウが表示されるので、以下画像の通り認証を進めていきます。

認証作業は最初のみで、認証完了後は表示されません。

特に問題がなければコードが実行され、連携したGoogleアカウントからGmailメールが送信されるはずです!

スプレッドシートの内容に基づいて、メール3件が一斉送信されました!
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次