2021/09/27に更新

【GASで自動化】お客様へメール自動送信する(差し込み)

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

メールアドレスのリストに対して、定形文を一斉に送信するGoogle Apps Scriptです。氏名をメール本文に差し込んで送信することができます。

こんな悩みを解決します


  • お客様へ定型文を送る業務を自動化したい
  • 1通ずつ宛名を書き換えるのがとても面倒

用意するもの


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

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


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

使い方


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

このようなダミーの顧客リストを用意してみました。
今回はA列からD列までしか使いません。他の項目は他のアプリで使用予定です。

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

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

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

3.スクリプトの実行

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

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

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

スクリプト


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

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

  var ui = SpreadsheetApp.getUi()

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

  // メニューに追加するボタン
  menu.addItem('メール一括送信(差し込み)', 'send_mail_to_customer');

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


function send_mail_to_customer() {

  // 顧客情報が入っているシートを取得
  const customer_sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('顧客リスト');

  // 取得するセル範囲を決定するため、最終行を確認
  const customer_sheet_lastrow = customer_sheet.getLastRow();

  // 顧客情報が記録されているセルを取得。メール送信が目的なので、必要な範囲を指定
  const customer_lists = customer_sheet.getRange('A2:D' + customer_sheet_lastrow).getValues();

  // 有効な顧客情報のみ対象とする
  let customer_lists_active = Array();
  for (i = 0; i < customer_lists.length; i++) {
    if (customer_lists[i][0] == '有効') {
      customer_lists_active.push(customer_lists[i]);

    }
  }

  // メールの送信対象をポップアップウィンドウで確認するために、顧客情報を1つの変数に入れる
  var confirm_msg = '';
  for (i = 0; i < customer_lists_active.length; i++) {
    confirm_msg += customer_lists_active[i] + '\\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] + '\n';
  }

  // 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_active.length; i++) {

    var mail_body_inserted = mail_body.replace(/%%family_name%%/, customer_lists_active[i][1]);

    var mail_to = customer_lists_active[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