【GAS】締切日に応じてリマインダーを送る方法(サンプル付き)

Gmail

GAS応用の一覧

ご訪問ありがとうございます。

Googleシートマスターのひろしです。

前回

【GAS】Googleドライブ・フォルダ内のすべてのCSVファイルを読み込む
  • Googleドライブのフォルダ内のファイル名を取得する方法がわかります。
  • CSVファイルを読み込む方法がわかります。
  • 今回は、とっても価値の高い方法をお伝えします。


    これを知ることであなたは、

    • 締切日に応じて3種類のリマインダーを送ることができます。
    • GASって何?状態であっても設定できます。

    なので、サクッとマスターして

    と答えてあげてください。

    動画はこちら

    シートはこちら

    *クリックすることでシートが開きます。(コピーしてお使いください)

    スクリプト

    /**
     * 締切日に応じてメールを送信する
     */
    function SendRemindMail() {
    
    
      const SH_LIST = "会員リスト"        //★リストのシート名
      const SH_MTEMP = "メールテンプレ"     //★メール文章のテンプレシート名
    
    
      const LEVEL1 = 0  //10日前
      const LEVEL2 = 1  //5日前
      const LEVEL3 = 2  //当日
    
    
      const FOOTTER = 5 //送信元メールアドレス&フッターの位置
    
    
      const C_THRESHOLD = 0 //閾値
      const C_SUBJECT = 1  //題名
      const C_BODY = 2  //メール本文
    
    
      //今日
      let today = new Date()
      today = Utilities.formatDate(today, 'Asia/Tokyo', 'M月d日');
    
    
      //テンプレの読み込み
      const sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SH_MTEMP)
      const vals = sh.getRange("A2:C7").getValues()     //☆読み込む位置
    
    
      const shlist = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SH_LIST)
      const lrow = shlist.getLastRow()
    
    
      //リスト分のループ(1行ずつ処理する)
      for (let i = 2; i <= lrow; i++) {
        const linebuf = shlist.getRange(i, 1, 1, 7).getValues()
    
    
        //完了  名前  メールアドレス コース名  申込日 締め切り  残り日数
        //  0    1       2           3       4      5      6
        if (linebuf[0][0] == false) {
    
    
          let level = -1        //-1は見つからない場合用
          let str_subject = ""
          let str_body = ""
          let zanday = linebuf[0][6]  //残り日数
    
    
          //残り日数
          switch (zanday) {
            case vals[LEVEL1][C_THRESHOLD]: //10日前
              level = LEVEL1
              break
            case vals[LEVEL2][C_THRESHOLD]:  //5日前
              level = LEVEL2
              break
            case vals[LEVEL3][C_THRESHOLD]: //当日
              level = LEVEL3
              break
          }
    
    
          // switch (true) {
          //   case zanday > vals[LEVEL1][C_THRESHOLD]: //10日より前
          //     level = LEVEL1
          //     break
          //   case zanday > vals[LEVEL2][C_THRESHOLD]: //5日より前
          //     level = LEVEL2
          //     break
          //   case zanday == vals[LEVEL3][C_THRESHOLD]: //当日
          //     level = LEVEL3
          //     break
          // }
    
    
          if (level != -1) {
            //締切日
            let limit = new Date(linebuf[0][5])
            limit = Utilities.formatDate(limit, 'Asia/Tokyo', 'M月d日');
    
    
            //テンプレの格納
            str_subject = vals[level][C_SUBJECT]
            str_body = vals[level][C_BODY]
    
    
            //題名の置換
            str_subject = str_subject.replace("{name}", linebuf[0][1])
            str_subject = str_subject.replace("{date}", zanday)
    
    
            //本文の置換
            str_body = str_body.replace("{name}", linebuf[0][1])
            str_body = str_body.replace("{date}", zanday)
            str_body = str_body.replace("{limit}", limit)
            str_body = str_body.replace("{today}", today)
    
    
            //確認用ログ出力
            console.log(linebuf[0][2]) //メールアドレス
            console.log(str_subject)
            console.log(str_body)
            console.log(vals[FOOTTER][C_BODY])
            console.log(vals[FOOTTER][1] + vals[FOOTTER][0])
    
    
            // メールを送信
            // let send = GmailApp.sendEmail(
            //   linebuf[0][2],                        //メールアドレス
            //   str_subject,
            //   str_body + vals[FOOTTER][C_BODY],
            //   {
            //     from: vals[FOOTTER][0],
            //     name: vals[FOOTTER][1]
            //   }
            // )
    
    
          }
        }
      }
    }

     

    ポイント

    締切日に応じて3種類のメール文章を作成できます。

    実行前に「会員リスト」の締切日を変更して3種類のメッセージが作成されることを確認します。

     

    残り日数を複数指定する場合

    例)
    case を複数並べます。(breakするまで通ります)

     //残り日数
          switch (zanday) {
            // case vals[LEVEL1][C_THRESHOLD]: //10日前
            case 10: //10日前
            case 9: //10日前
            case 8: //10日前
              level = LEVEL1
              break
         }

     

    やや邪道ですが、switch(true)にすることで期間を指定することもできます。

      switch (true) {
             case zanday > 5 ://5日前まで
              level = LEVEL1
              break
            case zanday > 2: //2日前まで
              level = LEVEL2
              break
    }

     

     

    その後、メール配信してみるといいでしょう。

    さらにトリガーをセットすることで、「1日1回、リマインダーを送信」
    といった使い方ができます。

     

    最後までご覧いただきありがとうございます。

    つぎはこちら

    【GAS】半角文字列を全角文字列に変換する方法(ExcelのJIS関数) (Gスプレッドシート)
    コピペで半角文字列を全角文字列に変換できる関数が作れます。

    GAS応用の一覧

    コメント

    1. 島田 より:

      いつも記事を拝見させていただいています。とても勉強になります。

      こちらの記事を応用してリマインダーを送るシートを作成したのですがエラーが出てしまいます。ご教授いただけませんでしょうか。

      • hiroshi より:

        えーっとまず、上記スクリプトでやってエラーが出るのでしょうか?
        全く同じ(会員リスト と メールテンプレ というシート名)にしてやってみてください。

    タイトルとURLをコピーしました