2021/09/30に更新

【GASで自動化】お客様へメールを自動送信する(休眠顧客の掘り起こし)

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

メールアドレスのリストに対して、定形文を一斉に送信するGoogle Apps Scriptです。最終来店日からN日経過したお客様にだけ送信します。

こんな悩みを解決します


  • 最後の来店、サービスの利用から期間が空いてしまったお客様に対して、掘り起こしメールを一括送信したい

用意するもの


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

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


  • メールを一括送信できます。
  • メール本文を1通ずつデータを差し込んで、各顧客にカスタマイズした内容で送ることができます。
  • サービスの最終利用日からN日以上経過した顧客にだけメールを送信します。
  • メール送信前に送信先を確認することができます。

使い方


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

このようなダミーの顧客リストを用意してみました。
一番右にある「最終利用日」を基準にしてメールを送信します。

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

2.メール本文を用意します

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

3.スクリプトの実行

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

送信対象の顧客情報が表示されます。
この宛先で問題なければ「OK」を、キャンセルする場合は「キャンセル」を押して中止します。

キャンセルした場合はこのようなメッセージが表示されます。

スクリプト


/**
 * このスクリプトの説明、使い方はこちら。
 * https://myfunc.jp/items/00002/index.html
 */

function onOpen() {
  // スプレッドシートを開いたときに実行される関数

  var ui = SpreadsheetApp.getUi()

  // メニューの表示名
  var menu = ui.createMenu('メール送信');

  // メニューに追加するボタン
  menu.addItem('メール一括送信(休眠顧客掘り起こし)', 'send_mail_to_inactive_customer');

  // メニューを画面に追加する
  menu.addToUi();
}


function send_mail_to_inactive_customer() {

  // 顧客情報が入っているシートを取得
  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();

  // 有効かつ、最終利用日から30日以上経過した行を対象とする
  // 対象行を格納する変数を準備
  let customer_lists_target = Array();

  // 基準となる日付をセット
  var date = new Date();
  // 最終利用日から30日以上を対象とする
  date.setDate(date.getDate() - 30); 

  for (i = 0; i < customer_lists.length; i++) {
    if (customer_lists[i][0] == '有効' && date > customer_lists[i][14]) {
      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][14], 'JST', '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