本記事では、
- スプレッドシートに入力した複数のメールアドレス宛に
- 共通のテンプレートを使って
- ワンクリックで一斉送信する
方法を、実例を用いて紹介します。


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


スプレッドシートの準備
Googleスプレッドシートを立ち上げて、メーリングリストとテンプレートを作成します。
本実装例では、メーリングリストに「名前」「メールアドレス」「件名」「内容」の列を用意しました。
また、テンプレート(共通する内容)は別シートに用意しました。


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配列内の最初の要素なので、nameIndexは0になります。
- メールの作成と送信処理
- 
for文を使って、ヘッダーを除くテーブルの行数分のメールの作成と送信処理を行います。
 テンプレート内の変数(”name”と”message”)は、メーリングリストから取得した内容(名前、内容)に置き換えることで、同じテンプレートを使いつつ部分的にカスタマイズすることができます。GmailApp.sendEmail(email, subject, body);→ Gmailからメールを送信するためのメソッド。- 第一引数(必須):宛先メールアドレスを文字列で指定
- 複数指定する場合はカンマ区切りで記述します。(例: “example1@gmail.com,example2@gmail.com”)
 
- 第二引数(必須):メールの件名を文字列で指定
- 第三引数(必須):メールの本文を文字列で指定
- 第四引数(任意):以下のプロパティを設定できます。
- bcc: BCCの宛先を文字列で指定。
- cc: CCの宛先を文字列で指定。
- htmlBody: HTML形式の本文を指定。
- name: 差出人名を指定(送信者の名前部分を設定)。
 
 他にも設定できるプロパティがあるので、気になる方は調べてみてください。 
- 第一引数(必須):宛先メールアドレスを文字列で指定

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


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

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

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





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



