Google Apps Script を使ったかんたんリマインダーの作成

ユーザーのリテラシーが高くない環境でG Suiteを使いこなすことを考えている。Gmailにはアドオンで予約送信機能を付けることができるが、アドオンの利用も難しいレベルを想定している。

Google スプレッドシートはExcelとほぼ同じように使えるので、あまりPCの扱いが得意でない方でも直感的に利用できる。そこで、スプレッドシートにGoogle Apps Script (GAS) で手を加えることで、だれでも簡単に指定したタイミングでメールを送ることができる仕組みを作成した。

まず、インターフェイスであるスプレッドシートのファイルを作成した。以下の図に示すように、ABC列を送信条件、DEF列を送信するメールの中身とした。入力のやり方が直感的にわからない方のために、3行目に入力例を用意した。
宛先にはカンマで区切ることで複数アドレスを入れられることや、メール本文のセルでセル内改行をするとメール本文でも改行されることなどを明記した。

Google スプレッドシートの画面作例

メール送信タイミングの条件は、データの入力規則で予め入力できる値を制限しておくとよい。作成者が意図しない入力を防げるし、表計算ソフトになれていないとキーワードで値を入力させるよりマウスで選択肢から入力する方が安心する場合がある。
また、余計な空白があると、使用者が意図しない入力をしたり、混乱したりする懸念があるので、G列から右は削除した。

ツール>スクリプトエディタから以下のコードを貼り付ければ、一応動作するものがつくれるはず。時間主導型トリガーで「1時間ごと」に実行するような条件に設定しておけば、条件と合う時刻にGASが作動し、メールを送ってくれる。

function reminder() {
  //スプレッドシートのデータを取得
  var sheet = SpreadsheetApp.getActive().getSheetByName('reminder');
  //dataにはシートreminderのデータが2次元配列で格納される
  var data = sheet.getDataRange().getValues();
  //データ入っている最終列を取得
  var lastrow = sheet.getLastRow();
  
  //トリガー起動時の日付、曜日、時刻を取得
  //現在の年月日時刻を求める
  var date = new Date();
  //日付のみ分取
  var date_now = date.getDate();
  //曜日のみ分取 値は0~6 (日曜日~土曜日)
  var day_now = date.getDay();
  //時のみ分取
  var time_now = date.getHours();
  
  //曜日を数値から文字に変換
  var dayNames = ['日','月','火','水','木','金','土'];
  var day_now_name = dayNames[day_now];
  
  //スプレッドシートの上から最後の行まで繰り返し
  //配列のインデックスは0から始まることに注意。スプレッドシートの3行目を入力例にしてので、4行目 i = 3 からスタート。
  for (var i = 3; i<lastrow; i++){
  
  //送信条件を格納
  //日付
  var date_to_send = data[i][0];
  //曜日
  var day_to_send = data[i][1];
  //時間帯
  var time_to_send = data[i][2];
  
  //送信条件判定
  //日付判定 日付条件指定なしの場合は毎日実行するようにした
  if (date_now == date_to_send){
    var flag_date = true;
  }else if (date_now =='指定なし') {
    var flag_date = true;
  }else{
    var flag_date = false;
  }

  //曜日判定
  if (day_now == day_to_send){
    var flag_day = true;
  }else{
    var flag_day = false;
  }
  
  //時間帯判定
  if (time_now == time_to_send){
    var flag_time = true;
  }else{
    var flag_time = false;
  }
  
  //メール送信条件判定 すべてのflagがtrueならメールを送信する
  if (flag_date && flag_day && flag_time){
  //送信内容取得
  var sendto = data[i][3];
  var title = data[i][4];
  var message = data[i][5];
  
  //メール送信
  MailApp.sendEmail(
    sendto,  //メール宛先
    title,   //メール件名
    message, //メール本文
    {
      name: 'かんたんリマインダー'   //差出人の名前
    }
  );
  }
  
  //繰り返し単位終わり
  }
}

関連項目 GoogleフォームとGASでつくる同報メール送信システム

コメントを残す

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください