Gmailで多数のメンバーに一斉メールを送る方法
背景・概要
多数の特定のメンバーに一斉メールを送るには、Gmailで各人のメールを作成する必要があります。
しかし、この作業はとても手間がかかります。
さらに、IDとパスワードがすべてユニークであるため、Bccで送ることもできません。
そこで、以下の方法で一斉送信することを考えました。
- スプレッドシートを準備する
名前、メールアドレス、ID、パスワードを記載する - docsにテンプレート化されたメール文面を用意する
メール本文に名前やIDなどのキーワードを入れておく - 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などのツールではなく、メールで情報を周知したい場合もあるかと思います。
テンプレートを作成しておくことで、メールの内容を簡単に変更することもできるので便利かと思います。
Discussion