【備忘録】Googleスプレッドシートからメールを一括送信する方法
ステップ 1: Google スプレッドシートの準備
スプレッドシートに「メールアドレス」「パスワード」などを記載したシートを用意。
※筆者は既存の名簿を利用しました。
ステップ 2: Google Apps Script の作成
スプレッドシートで「拡張機能」メニューを開き、「Apps Script」を選択します。
新しいスクリプトファイルが開かれるので、以下のサンプルコードをコピー&ペーストします。
コードを適宜編集し、自分のニーズに合わせてカスタマイズします。
サンプルコード(全体)
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('案内メール送信')
.addItem('実行', 'sendEmailsToMultipleSheets') // メニュー項目を追加
.addToUi();
}
function sendEmailsToMultipleSheets() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheets = spreadsheet.getSheets();
sheets.forEach(function(sheet) {
var sheetName = sheet.getName();
var data = sheet.getDataRange().getValues();
for (var i = 1; i < data.length; i++) { // 1行目はヘッダーと仮定
var row = data[i];
if (row[0] !== "済") {
var emailAddress = row[4]; // E列: メールアドレス
var name = row[2]; // C列: 名前
var password = row[5]; // F列: パスワード
var emailData = {name: name, email: emailAddress, password: password};
if (emailAddress) {
var subject, message;
var specialSubject, specialMessage;
// シート名に基づいてメールの件名と本文を変更
switch(sheetName) {
case "シート1":
subject = "【シート1】●●専用アカウント開設のお知らせ";
message = createStaffMessage(emailData);
break;
case "シート2":
subject = "【シート2】●●専用アカウント開設のお知らせ";
message = createTeacherMessage(emailData);
specialSubject = "【シート2】●●ついてのスペシャルなお知らせ";
specialMessage = createTeacherSpecialMessage(emailData);
break;
case "シート3":
subject = "【シート3】●●専用アカウント開設のお知らせ";
message = createStudentMessage(emailData);
specialSubject = "【シート3】●●ついてのスペシャルなお知らせ";
specialMessage = createStudentSpecialMessage(emailData);
break;
default:
subject = "その他のシートの件名";
message = "その他のシートに対するメッセージ";
}
// 通常のメール送信
MailApp.sendEmail({
to: emailAddress,
cc: "*******@gmail.com", // ここにCcのアドレスを設定
bcc: "*******@yahoo.co.jp, *******@icloud.com", // ここにBccのアドレスを設定
subject: subject,
body: message
});
// 「シート2」または「シート3」の場合、スペシャルメッセージを送信
if (sheetName === "シート2" || sheetName === "シート3") {
MailApp.sendEmail({
to: emailAddress,
cc: "*******@gmail.com", // ここにCcのアドレスを設定
bcc: "*******@yahoo.co.jp, *******@icloud.com", // ここにBccのアドレスを設定
subject: specialSubject,
body: specialMessage
});
}
sheet.getRange(i+1, 1).setValue("済"); // A列に「済」とマーク
}
}
}
});
}
function createStaffMessage(data) {
return `${data.name}様\n\nこんにちは。\n社内で、使用できるアカウント(メール・オンラインストレージ)を作成しましたので、ご連絡させて頂きます。\n\n-------------------------\n\nアカウント情報\n\nメールアドレス: ${data.email}\nパスワード: ${data.password}\n\n※「WEBメール」「オンラインストレージ」共に共通のアカウントとなります。\n\n-------------------------\n\n※このメールは、配信専用のアドレスで配信されています。\nこのメールに返信されても、返信内容の確認およびご返答ができません。あらかじめご了承ください。\nこのメールの内容についてのお問い合わせは、下記の連絡先までメール、またはお電話でお願いします。`;
}
function createTeacherMessage(data) {
return `${data.name}様\n\nこんにちは。\n社内で、使用できるアカウント(メール・オンラインストレージ)を作成しましたので、ご連絡させて頂きます。\n\n-------------------------\n\nアカウント情報\n\nメールアドレス: ${data.email}\nパスワード: ${data.password}\n\n※「WEBメール」「オンラインストレージ」共に共通のアカウントとなります。\n\n-------------------------\n\n※このメールは、配信専用のアドレスで配信されています。\nこのメールに返信されても、返信内容の確認およびご返答ができません。あらかじめご了承ください。\nこのメールの内容についてのお問い合わせは、下記の連絡先までメール、またはお電話でお願いします。`;
}
function createStudentMessage(data) {
return `${data.name}様\n\nこんにちは。\n社内で、使用できるアカウント(メール・オンラインストレージ)を作成しましたので、ご連絡させて頂きます。\n\n-------------------------\n\nアカウント情報\n\nメールアドレス: ${data.email}\nパスワード: ${data.password}\n\n※「WEBメール」「オンラインストレージ」共に共通のアカウントとなります。\n\n-------------------------\n\n※このメールは、配信専用のアドレスで配信されています。\nこのメールに返信されても、返信内容の確認およびご返答ができません。あらかじめご了承ください。\nこのメールの内容についてのお問い合わせは、下記の連絡先までメール、またはお電話でお願いします。`;
}
function createTeacherSpecialMessage(data) {
return `${data.name}様\n\nこんにちは。\nスペシャルメッセージの案内です。`;
}
function createStudentSpecialMessage(data) {
return `${data.name}様\n\nこんにちは。\nスペシャルメッセージの案内です。`;
}
※筆者の場合は、シートを3つ用意しました。そのうちの2つのシートは別メールを送るスクリプトになっています。
ステップ 3: スクリプトの実行
スプレッドシートの「メニューバー」から〚案内メール送信〛をクリクすると、自動でメールが送信されます。
※初回実行時には、Googleからの認証が求められますので、指示に従って承認してください。
〚案内メール送信〛のサンプルコードの抜粋
全体コードの上部に記載のあるスクリプトです。これによりメニューバーに項目を追加しています。
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('案内メール送信')
.addItem('実行', 'sendEmailsToMultipleSheets') // メニュー項目を追加
.addToUi();
}
この基本的な方法で、Google スプレッドシートからのメール送信をほぼ自動化できます。
筆者の使用用途としては、社内のアカウント作成後に一括で案内のメールを送信するのに使用しています。※1件づつ案内を送信していたのが苦痛になったためw
この記事が気に入ったらサポートをしてみませんか?