GASでステップメールを送信する仕組みを作る

前回はGAS(Google Apps Script)でメルマガを発行する方法を紹介しました。

GASでフォームの入力内容をGmailで一斉送信するメルマガスタンドを作る

今回は、さらに一歩進んでフォームから登録したユーザーにステップメールを自動で送信する仕組みをGoogleフォームとスプレットシートとGASで構築します。

仕様は次の通りです。

  • ステップメールへの登録はGoogleフォームを使用する。(入力項目は名前とメールアドレス)
  • 登録されたユーザー情報ははスプレットシートに保存する。
  • 上記のスプレットシートに登録されているユーザーに1日1回指定の時間に自動でステップメールを送信する。
  • 送信するステップメールの内容はスプレットシートに記載する。

注意
メールの送信件数は無料のGoogleアカウントの場合は100通、有償のGoogle Workspaceの場合は1,500通が上限です。ただ、ビジネスの初期で顧客がまだ少ない場合には有効な手段となるでしょう。

Googleフォームの準備

Googleフォームの準備は、下記の記事で紹介しているのでこちらを参照ください。

GASでフォームの入力内容をGmailで一斉送信するメルマガスタンドを作る

Googleフォームから登録したユーザー情報を保管するシートでステップメールの送信の有無も管理しますので、シートの1行目にステップメールの送信を管理するための項目を追加します。

ステップメールの準備

Googleフォームから登録したユーザー情報を保管しているスプレットシートにステップメールのタイトルと本文を記載するシートを追加します。

今回は、B列にメールのタイトル、C列にメールの本文を入れておきます。

スプレットシートのセルには5万字まで入力可能なので、本文の文字数が足りなくなる心配はまずないと思います。

ただ、直接シートのセルに本文を入力するのはやりにくいので、Googleドキュメントなどで下書きをして張り付けるのが良いと思います。

GASの詳細

登録者への返信メールを送信する関数は「sendConfirmationEmail()」です。
ステップメールを送信する関数は「sendStepMail()」です。

送信メールのタイトル、本文、署名、名前、メールアドレスをご自身が使用する内容に変更して下さい。

//署名の設定
const signature = "\n\n"+
  "--------------------------------\n"+
  "だい\n"+
  "Email:XXXXXX@dai-memo.com\n"+
  "HP:https://dai-memo.com\n"+
  "--------------------------------\n"

//送信者情報
const senderName = "名前"
const senderEmail = "XXXXXX@dai-memo.com" //Gmailで設定→アカウントとインポートで設定している独自ドメインのみ使用可能

function sendConfirmationEmail(e) {
  const userName = e.values[1]; // Googleフォームで入力された名前が入っている値を取得
  const userEmail = e.values[2]; // Googleフォームで入力されたメールアドレスが入っている値を取得

  //送信者の情報の設定
  const mailOptions = {
      name: senderName,
      from: senderEmail,
      replyTo: senderEmail,
    }

  const mailSubjet = 'だいのメモのメルマガへの登録ありがとうございます'; // メールの件名
  const body = 'だいのメモのステップメールへの登録ありがとうございます。\n'; // メールの本文
  '\n' + 
  '明日から1週間、業務改善に役立つノウハウをメールでお届けします\n'+
  '\n' + 
  '楽しみにお待ちください。\n'
  const mailBody = userName+'様\n\n'+ body + signature;
  
  // メールの送信処理
  GmailApp.sendEmail(userEmail,mailSubjet,mailBody,mailOptions);  //メールの送信
}

function sendStepMail(){
  //スプレットシートの取得
  const ss = SpreadsheetApp.getActiveSpreadsheet();

  //ステップメールデータの取得
  const stepMailSheet = ss.getSheetByName("ステップメール");  //シートの取得
  const smStartRow = 2; //1回目のステップメールのデータの開始の行番号
  const smNumRow = stepMailSheet.getLastRow() - smStartRow + 1; //ステップメール数
  const smStartColumn = 2; //開始の列番号
  const smNumColumn = 2; //タイトルと本文の2つ
  const stepMailDataRange = stepMailSheet.getRange(smStartRow,smStartColumn,smNumRow,smNumColumn);  //ステップメールのデータ範囲の取得
  const stepMailData = stepMailDataRange.getValues();//ステップメールのデータの取得

  //登録者データの取得
  const addressSheet = ss.getSheetByName("フォームの回答 1"); //シートの取得
  const aStartRow = 2; //行の開始
  const aNumRow = addressSheet.getLastRow() - aStartRow + 1; //行の数
  const aStartColumn = 2;  //登録者情報の先頭のデータが記載の列
  const aNumColumn = addressSheet.getLastColumn() - aStartColumn + 1; //登録者数
  const aMailDataRange = addressSheet.getRange(aStartRow,aStartColumn,aNumRow,aNumColumn);  //ステップメールのデータ範囲の取得
  const aMailData = aMailDataRange.getValues();//ステップメールのデータの取得

  //送信者の情報の設定
  const mailOptions = {
      name: senderName,
      from: senderEmail,
      replyTo: senderEmail,
    }

  //ステップメールの送信
  for(let i = 0; i < aMailData.length; i++){  //ユーザー数分繰返す

    let numTodaySendMail = 0; //同一ユーザーで本日メールを送信した数

    for(let j = 0; j < aMailData[i].length - 2; j++){ //ステップメール数分繰返す

      //jの0には名前が、1にはメールアドレスが記載されている。1回目のステップメール送信の情報はj=2以降
      //送信していないステップのメールを送信する。
      if(aMailData[i][j + 2]=="" && numTodaySendMail==0){  
        //送信データのセット
        let userName = aMailData[i][0];
        let userEmail = aMailData[i][1];
        let mailSubjet = stepMailData[j][0];
        let mailBody = userName + '様\n\n'+ stepMailData[j][1] + signature;

        GmailApp.sendEmail(userEmail,mailSubjet,mailBody,mailOptions);  //メールの送信

        addressSheet.getRange(i + aStartRow, j + 4).setValue("〇"); //列番号はシートに合わせて必要に応じて変更する
        numTodaySendMail++;  //メール送信数のカウント
      }
    }
  }

}

送信メールのメールアドレスはGmailから独自ドメインに変更し、署名を本文の最後に付けました。
このメールアドレスと署名は「sendConfirmationEmail()」と「sendStepMail()」で共通の値を使用するので、関数の外で定義しグローバル変数としています。

もし、独自ドメインを使用しない場合は下記の対応をしてください。

  • グローバル変数の「」「」を消去
  • 各関数内の「送信者の情報の設定」を消去、
  • 「GmailApp.sendEmail(userEmail,mailSubjet,mailBody,mailOptions)」の第4引数の「mailOptions」を消去

このコードは、登録書データが記載されているシート名が「フォーム回答1」、ステップメールのデータが記載されているシート名が「ステップメール」であることを想定したコードですので、シート名が違う場合は該当箇所を変更が必要です。

また、シートのデータが格納されている範囲も「Googleフォームの準備」や「ステップメールの準備」で示したシートの配置を想定していますので、配置が違う場合は該当箇所の変更が必要です。

トリガーの設定

トリガーはApps Scriptの左側の時計のマークから設定できます。

自動返信メール

フォームから送信されたときに「sendConfirmationEmail()」が実行されるにように設定します。

  • 実行する関数を「sendConfirmationEmail」に変更
  • イベントの種類の選択を「フォーム送信時」に変更

ステップメール

送信したい時間帯に「sendStepMail」が実行され、ステップメールが送信されるように設定します。

  • 実行する関数を「sendStepMail」に変更
  • イベントのソースを選択を「時間主導型」に変更
  • 時間ベースのトリガーのタイプを選択を「日付ベースのタイマー」に変更
  • 時刻を選択を送信したい時間帯に変更(例:午後5時~6時)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です