2021/10/03に更新

【GASで効率化】お客様へメール自動送信する(バースデーメール)

メールスプレッドシート顧客管理営業

誕生日が近いお客様を対象にメールを送信するGoogle Apps Scriptです。期間の指定はポップアップで入力するので柔軟な範囲指定が可能です。

こんな悩みを解決します


  • 誕生日が近づいてきたお客様にメールを送信したい

用意するもの


  • スプレッドシートに保存されている顧客情報
  • メールの定型文

このスクリプトで出来ること


  • 指定した日数以内に誕生日を迎えるお客様にメールを送信できます。
  • メール本文を1通ずつデータを差し込んで、各顧客にカスタマイズした内容で送ることができます。
  • メール送信前に送信先を確認することができます。

使い方


1.顧客リストを用意します

このようなダミーの顧客リストを用意してみました。
「誕生日」列を利用します。

  • フラグ:この行の有効、無効を定義します。有効な顧客にのみ処理を実行します。
  • メールアドレス
  • 電話番号
  • FAX番号
  • 誕生日
  • 郵便番号
  • 都道府県
  • 市区町村
  • 丁目番地
  • 建物名
  • 部屋番号
  • ユーザー登録日:顧客として登録した日
  • 最終利用日:顧客がサービスを利用した最後の日
2.メール本文を用意します

お客様に送るメール本文を用意します。
%%family_name%%には、スプレッドシートから取得した「姓」に置き換えられます。
差出人(メールの表示名)や件名も編集しておきます。
CCとBCCは空欄でも構いません。

3.スクリプトの実行

準備ができたらスクリプトを起動します。
スプレッドシートの上部に「メール送信」のメニューがあります。

誕生日までの日数を指定するボックスが表示されます。
任意の整数を入力してください。

送信対象の顧客情報が表示されます。誕生日も表示されます。
この宛先で問題なければ「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);
  }
}

関連するアプリ


タグ一覧

最新のアプリ

人気のアプリ

ページトップに戻る
myfunc.jp