誕生日が近いお客様を対象にメールを送信するGoogle Apps Scriptです。期間の指定はポップアップで入力するので柔軟な範囲指定が可能です。
このようなダミーの顧客リストを用意してみました。
「誕生日」列を利用します。
お客様に送るメール本文を用意します。
%%family_name%%には、スプレッドシートから取得した「姓」に置き換えられます。
差出人(メールの表示名)や件名も編集しておきます。
CCとBCCは空欄でも構いません。
準備ができたらスクリプトを起動します。
スプレッドシートの上部に「メール送信」のメニューがあります。
誕生日までの日数を指定するボックスが表示されます。
任意の整数を入力してください。
送信対象の顧客情報が表示されます。誕生日も表示されます。
この宛先で問題なければ「OK」を、キャンセルする場合は「キャンセル」を押して中止します。
キャンセルした場合はこのようなメッセージが表示されます。
/**
* このスクリプトの説明、使い方はこちら。
* https://myfunc.jp/items/00005/index.html
*/
function onOpen() {
// スプレッドシートを開いたときに実行される関数
var ui = SpreadsheetApp.getUi()
// メニューの表示名
var menu = ui.createMenu('メール送信');
// メニューに追加するボタン
menu.addItem('メール一括送信(誕生日までN日以内)', 'send_mail_to_birthday');
// メニューを画面に追加する
menu.addToUi();
}
function send_mail_to_birthday() {
// 顧客情報が入っているシートを取得
const customer_sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('顧客リスト');
// 取得するセル範囲を決定するため、最終行を確認
const customer_sheet_lastrow = customer_sheet.getLastRow();
// 顧客情報が記録されているセル全てを取得。
const customer_lists = customer_sheet.getRange('A2:O' + customer_sheet_lastrow).getValues();
// 誕生日までの日数は入力可能にする
const days_to_birthday = Browser.inputBox('誕生日までの日数を半角数字で入力してください', Browser.Buttons.OK_CANCEL);
if (!days_to_birthday.match(/[0-9]+/)) {
Browser.msgBox('半角数字で入力してください');
return;
}
const date_today = new Date();
let date_Ndays_after = new Date();
date_Ndays_after.setDate(date_today.getDate() + Number(days_to_birthday));
// 有効ステータスかつ誕生日までN日以内の人を対象とする
// 対象行を格納する変数を準備
let customer_lists_target = Array();
for (i = 0; i < customer_lists.length; i++) {
// 比較のために、顧客の誕生日の年を今年にする
let customer_birthday_this_year = new Date(customer_lists[i][6]);
customer_birthday_this_year.setFullYear(date_today.getFullYear());
// 比較のために、顧客の誕生日の年を来年にする
let customer_birthday_next_year = new Date(customer_lists[i][6]);
customer_birthday_next_year.setFullYear(date_today.getFullYear() + 1);
if (customer_lists[i][0] == '有効') {
if ((date_today < customer_birthday_this_year && customer_birthday_this_year < date_Ndays_after) ||
(date_today < customer_birthday_next_year && customer_birthday_next_year < date_Ndays_after)) {
customer_lists_target.push(customer_lists[i]);
}
}
}
// 対象が1件も無ければ処理を中止する
if (customer_lists_target.length == 0) {
Browser.msgBox('メール送信対象として1件もマッチしませんでした。処理を中止します。');
return;
}
// メールの送信対象をポップアップウィンドウで確認するために、顧客情報を1つの変数に入れる
var confirm_msg = '';
for (i = 0; i < customer_lists_target.length; i++) {
confirm_msg += customer_lists_target[i][1]; // 姓
confirm_msg += customer_lists_target[i][2]; // 名
confirm_msg += ' ' + Utilities.formatDate(customer_lists_target[i][6], 'Asia/Tokyo', 'yyyy/MM/dd'); // 誕生日
confirm_msg += '\n'; // 改行コード
}
var confirm = Browser.msgBox('以下のお客様へメールを送信します', confirm_msg, Browser.Buttons.OK_CANCEL);
if (confirm == 'cancel') {
Browser.msgBox('処理を中止しました!');
return;
}
// メール本文を取得する処理
// メールが記録されているシートを取得
const mail_sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('メール本文');
// 取得するセル範囲を決定するため、最終行を確認
const mail_sheet_lastrow = mail_sheet.getLastRow();
// メール本文を取得
const mail_text = mail_sheet.getRange('B5:B' + mail_sheet_lastrow).getValues();
// 1セルずつ入っている文章を改行コードで連結する
var mail_body = '';
for (var i = 0; i < mail_text.length; i++) {
mail_body += mail_text[i] + '
';
}
// mail送信関連パラメータ取得
const mail_parameter = mail_sheet.getRange('B1:B4').getValues();
mail_from = mail_parameter[0][0];
mail_subject = mail_parameter[1][0];
mail_cc = mail_parameter[2][0];
mail_bcc = mail_parameter[3][0];
// メール送信処理
for (var i = 0; i < customer_lists_target.length; i++) {
var mail_body_inserted = mail_body.replace(/%%family_name%%/, customer_lists_target[i][1]);
var mail_to = customer_lists_target[i][3];
var mail_options = {
'cc': mail_cc,
'bcc': mail_bcc,
'name': mail_from
};
MailApp.sendEmail(mail_to, mail_subject, mail_body_inserted, mail_options);
}
}
メールアドレスのリストに対して、定形文を一斉に送信するGoogle Apps Scriptです。氏名をメール本文に差し込んで送信することができます。
メールアドレスのリストに対して、定形文を一斉に送信するGoogle Apps Scriptです。最終来店日からN日経過したお客様にだけ送信します。
特定の都道府県向けのお客様を対象にメールを送信するGoogle Apps Scriptです。
「メールをあと何通送ることができるのか?」を確認できるGoogle Apps Scriptです。メール通知を多用していると上限にすぐひっかかってしまうんですよね。
Gmailに届いた特定のメールに対し、自動的に定型文を返すGoogle Apps Scriptです。お問い合わせの受付完了通知などにどうぞ。