🐣

Gmailで多数のメンバーに一斉メールを送る方法

2023/04/20に公開

背景・概要

多数の特定のメンバーに一斉メールを送るには、Gmailで各人のメールを作成する必要があります。
しかし、この作業はとても手間がかかります。
さらに、IDとパスワードがすべてユニークであるため、Bccで送ることもできません。

そこで、以下の方法で一斉送信することを考えました。

  1. スプレッドシートを準備する
    名前、メールアドレス、ID、パスワードを記載する
  2. docsにテンプレート化されたメール文面を用意する
    メール本文に名前やIDなどのキーワードを入れておく
  3. GASを使用して一斉送信する

これにより、個別にメールを作成する手間が省けます。
また、スプレッドシートとdocsのテンプレートを事前に作成することで、作業の効率化も図れます。
GASを利用するので予約投稿もできます。

準備

スプレッドシート

見出しを下記のように入力しておきます。

A列 | B列 | C列 | D列
名前 | メールアドレス | ID | PW
佐藤 | sato@example.com | 345678 | mnopqr
鈴木 | suzuki@example.com | 901234 | stuvwx

タイトルは適宜変更して、見出しに合わせて内容を入れておきます。
B列にメールアドレスを入れるのは、次の作成したGASではマストです。

docs

docsでテンプレートを作成します。
作成したら、docsのURLから「xxxxxxxx」の部分を控えておいてください。docIdです。

https://docs.google.com/document/d/xxxxxxxx

参考にサンプルの文章です。
{{名前}}、{{ID}}、{{PW}}に、スプレッドシートの内容が入ります。

{{名前}}さん
お疲れ様です。
xxxのログイン情報をお送りいたします。

下記のURLからログインしてください。
——————
URL:https://xxxxx
ID:{{ID}}
PASS:{{PW}}
——————

不明な点がありましたら、xxxまでお問い合わせください。
よろしくお願いします。

GAS

function sendEmails() {

  var sheet = SpreadsheetApp.getActiveSheet(); // アクティブなシートを取得する
  var lastRow = sheet.getLastRow(); // 最終行を取得する
  var lastCol = sheet.getLastColumn(); // 最終列を取得する
  // var data = sheet.getRange(1, 1, lastRow, lastCol).getValues(); // シートの値を取得する
  var data = sheet.getRange(2, 1, lastRow - 1, lastCol).getValues(); // 2行目から最終行までの値を取得する


  // B列の最終行を取得する
  var bColValues = sheet.getRange("B2:B" + lastRow).getValues();
  for (var i = lastRow - 1; i >= 2; i--) {
    if (bColValues[i - 1][0] != "") {
      lastRow = i ;
      break;
    }
  }

  // メールテンプレートの取得
  var docId = 'xxxxxx';
  var template = DocumentApp.openById(docId).getBody().getText();

  // データの行数分繰り返す
  for (var i = 1; i <= lastRow; ++i) {
    var row = data[i-1]; // 1行分のデータを取得する
    var emailAddress = row[1];
    var name = row[0];
    var contentB = row[2];
    var contentC = row[3];

    // テンプレートに変数を組み込む
    var message = template.replace('{{名前}}', name)
                          .replace('{{ID}}', contentB)
                          .replace('{{PW}}', contentC)
    
    var subject = "【お知らせ】xxxxxxxのご案内";
    try {
      MailApp.sendEmail(emailAddress, subject, message); // メールを送信する
      console.log('info', 'メールを送信しました。宛先:' + emailAddress);
    } catch (e) {
      console.log('error', 'メールの送信に失敗しました。宛先:' + emailAddress + ', エラー:' + e.message);
    }
  }
}

GASの変更箇所

var docId = 'xxxxxx'; // docsのテンプレート
var subject = "【お知らせ】xxxxxxxのご案内";

おわりに

今回のGASは、「GASを実行するユーザーのGmailが送信者」 になります。
私は、念の為、30通ほどを数回に分けて利用しました。むやみやたらに多く送ると「迷惑メール」に入る可能性が高くなりそうな気がしました。
大量のメールを一度に送信する場合は、少しずつ送るようにした方が良さそうです。

SlackやTeamsなどのツールではなく、メールで情報を周知したい場合もあるかと思います。
テンプレートを作成しておくことで、メールの内容を簡単に変更することもできるので便利かと思います。

GitHubで編集を提案

Discussion