GAS: Google Apps ScriptでGoogle カレンダーの予定終了をメール通知する

予定開始の通知はできても,終了を通知する設定はGoogle カレンダーだけでは無理なようなので,GAS (Google Apps Script)を使って設定します.

やること

  • Google Apps Scriptを使用して
  • Googel カレンダーの予定から,特定の文字列を説明に追加してある予定だけ
  • 予定終了をメール通知する

Google Apps Scriptを作成する

Google Apps Scriptは最初から追加されているかもしれません.
もしも無ければ,インストールはこちらの2-1をご覧ください.

Google Apps Scriptの新規プロジェクトを作る

Google ドライブの新規ボタン→その他→Google Apps Script

“無題のプロジェクト”が作成されます.
プロジェクト名は好きな名前をつけてください.

ソースコードの編集

デフォルトで入力されているコードを削除して,以下のコードをコピペしてください.

ここでは,予定終了時刻の5分前と終了時刻ちょうどにメール通知が来るように設定してあります.
また,自分がオーナー作成者である予定のみに作動するようになっています.

注意
トリガーが発動してからメールを受信するまでに,タイムラグが生じます.

/*
  GoogleCalendar reminder
*/

function Reminder()
{
  var calendars = CalendarApp.getAllCalendars();
  var text;
  var n_1 = 1;
  var n_5 = 5;
  var n_6 = 6;
  var n1MinutesBefore;
  var n5MinutesBefore;
  var n6MinutesBefore;
  
  for(i in calendars)
  {
    var calendar = calendars[i];
    var date = new Date();
    var events = calendar.getEventsForDay(date);

    for(j in events)
    {
      var event = events[j];
      var ownEvent = event.isOwnedByMe();
      var title = event.getTitle();
      var description = event.getDescription();

      endTime = event.getEndTime();
      n1MinutesBefore = (endTime.getTime() - n_1*60*1000);
      n4MinutesBefore = (endTime.getTime() - n_5*60*1000);
      n5MinutesBefore = (endTime.getTime() - n_6*60*1000);
      
      if(ownEvent)
      {
        if(description.indexOf("[remind me]") != -1)
        {
          text = title  + "\n" + "[" + calendar.getName() + "]";
          
          if(n1MinutesBefore < date && date < endTime)
          {
            sendmail_1(text);
          }

          if(n6MinutesBefore < date && date < n5MinutesBefore)
          {
            sendmail_5(text);
          }
        }
      }
    }
  }
}

function toTime(str)
{
  return Utilities.formatDate(str, 'JST', 'HH:mm');
}

function sendmail_1(body)
{  
  var body = body;
  MailApp.sendEmail(
    {
      to: "xxxx@xxxx.com",
      subject:"終了時刻",
      body: body,
    });
}

function sendmail_5(body)
{  
  var body = body;
  MailApp.sendEmail(
    {
      to: "xxxx@xxxx.com",
      subject:"終了5分前",
      body: body,
    });
}

メールの宛先

関数function sendmail_1とfunction sendmail_5の,メールの宛先xxxx@xxxx.comを書き換えてください.

to: “xxxx@xxxx.com”,

xxxx@xxxx.comの部分を,通知を受信したいメールアドレスに変更してください.(2箇所)

メールの件名と本文

メールの件名を変更したい場合は,subjectを書き換えます.

subject:”終了時刻”,
subject:”終了5分前”,

この2箇所を,任意の文字列に変更してください.

受け取るメール通知の本文は,以下のようになっています.

予定のタイトル 
[ カレンダー名 

設定しているのは,

text = title + “\n” + “[” + calendar.getName() + “]”;

の部分です.

ここまできたら保存しましょう.

トリガーの設定

自動で実行されるように設定をします.

編集→現在のプロジェクトのトリガー

画面遷移をした後に,“トリガーの追加”からトリガーを設定します.

以下の画像のように設定してください.

リクエストの許可

デバッグをして,無事に実行できるか確認します.
その際に,警告といくつか許可することを求められます.

  • Google カレンダー:カレンダーから予定を取得するために使用します.
  • ユーザー本人に代わってのメールの送信:メール通知を送信するのに使用します.

実行→関数をデバッグ→“Reminder”を選択

すると,許可を確認することを求められます.

Googleアカウントを選択し,

詳細をクリック,

“プロジェクト名”(安全ではないページ)に移動,

下へスクロールして,許可をクリックします.

エラーが出なければ成功です.

以上で設定は終了です.

コメント

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