2021/10/03に更新

【GASで自動化】お客様へメールを自動送信する(特定の都道府県)

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

特定の都道府県向けのお客様を対象にメールを送信するGoogle Apps Scriptです。

こんな悩みを解決します


  • 特定の都道府県に住んでいるだけにメールを送信したい。

用意するもの


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

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


  • 都道府県を指定して、メールを一括送信することができます。
  • メール本文を1通ずつデータを差し込んで、各顧客にカスタマイズした内容で送ることができます。
  • メール送信前に送信先を確認することができます。

使い方


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

このようなダミーの顧客リストを用意してみました。
指定された「都道府県」列を参照します。

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

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

3.スクリプトの実行

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

都道府県を入力するボックスが表示されるので、対象の都道府県を入力してください。受け付けられるのは1つだけです。

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

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

スクリプト


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

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

  var ui = SpreadsheetApp.getUi()

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

  // メニューに追加するボタン
  menu.addItem('メール一括送信(特定の都道府県)', 'send_mail_to_specific_pref');

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


function send_mail_to_specific_pref() {

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

  // 対象の都道府県を確認するダイアログを開く
  let pref_target = Browser.inputBox("都道府県を入力してください", Browser.Buttons.OK_CANCEL);

  // 有効ステータスかつ入力した都道府県に一致するものを送信対象とする
  // 対象行を格納する変数を準備
  let customer_lists_target = Array();

  for (i = 0; i < customer_lists.length; i++) {
    if (customer_lists[i][0] == '有効' && pref_target == customer_lists[i][8]) {
      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 += ' ' + customer_lists_target[i][8]; // 都道府県
    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