Googleカレンダーからリマインダーを送ってみた(1)

同じようなことを考えている人もいるもんだなぁ~と感心した・・・
何を考えていたかというと、Googleカレンダーに予定を登録していても、つい忙しいと忘れてしまう。
せっかく登録して、毎朝確認しても忘れてしまっては意味がない。
通知機能もあるが、直前(任意に設定した時刻の前)に知らせてくれるものだが、マナーモードなどで音量などをミュートしていると全く機能しない。

そこで、カレンダーからリマインダーとして自分宛にメールを送信できないか? などとネットでググってみたら同じようなことを考えている人がスクリプトをネット上に上げてくれているのでそれを参考に拝借し、自分なりのスクリプトを作ってみた。

動作の順序は、
① スクリプトが自分のGoogleカレンダーを読みに行って、該当する日付(当日)を探し、スクリプトが記載されているイベントトを取得
② 取得したイベントを自分宛のメールに送信する
③ ここでミソなのが、②の動作を1時間おきに実行して、受信したメールが増えていくのを抑制して直近のメールだけを残す
このようなことを実現したいので、備忘録としてサイトに残しておきます。今後、数回に分けてアップしていきます。

また、参考にさせていただいたサイトは下記の通り2つです。作者の方々に厚く御礼申し上げます。

// 参考にしたサイト
★Googleカレンダーから予定を取得し毎朝メールでお知らせするGASスクリプト
  ⇒ https://blog.synnex.co.jp/google/gas-notification-from-google-calendar-to-email/
★Gmailの不要なメールを自動で削除する方法
  ⇒ https://tenshoku-miti.com/takeshi/auto-delete-unnecessary-gmail/

また、事前にGoogle Apps Script(GAS)を利用できる環境を整える必要があるが、環境構築はGoogleアカウントを持っていれば、2~3分で利用できます。

// 参考にさせて頂いたサイト
// https://blog.synnex.co.jp/google/gas-notification-from-google-calendar-to-email/

function sendEventsMail() {

  const calendarId = 'abcdefg123@gmail.com';
  const calendar = CalendarApp.getCalendarById(calendarId);

  const today = new Date();   /* 今日の日付を取得 */
  const events = calendar.getEventsForDay(today);

  if (events.length === 0) {
    console.log("No events found.");
  }
  else {
    console.log("Events:");

    for (event in events) {

      let title = events[event].getTitle();

      let startHour = events[event].getStartTime().getHours();
      let startMinute = events[event].getStartTime().getMinutes();
      let endHour = events[event].getEndTime().getHours();
      let endMinute = events[event].getEndTime().getMinutes();

      // 追加・変更部ここから
      // eventsにeventStrという要素を追加、内容は「予定タイトル(開始時刻~終了時刻)」の文字列
      events[event].eventStr = title + '(' + startHour + '時' + startMinute + '分~' + endHour + '時' + endMinute + '分)';

      console.log(events[event].eventStr);
    }
    // 当日の曜日格納用変数
    let todayDayStr = '';
    // today.getDay()の結果で分岐して曜日を格納
    switch (today.getDay()) {
      case 0: todayDayStr = '日'; break;
      case 1: todayDayStr = '月'; break;
      case 2: todayDayStr = '火'; break;
      case 3: todayDayStr = '水'; break;
      case 4: todayDayStr = '木'; break;
      case 5: todayDayStr = '金'; break;
      case 6: todayDayStr = '土'; break;
    }
    // 当日の日付を整形
    let todayStr = String(today.getMonth() + 1) + '月' + today.getDate() + '日(' + todayDayStr + ')';

    // メール件名
    const subject = todayStr + 'の予定' + '【自分宛のリマインドだよ・・】';
    // 送付先メールアドレス
    const address = 'xyzwxyzw456@gmail.com'

    // メール本文テンプレート
    const bodyTemplate = `
{todayStr}の予定をお知らせします。

{events}

以上
`;
    // map処理でeventsを「予定タイトル(開始時刻~終了時刻)」の文字列の配列に変換し、
    // join処理で配列から文字列に変換(区切り文字を改行記号で指定)※詳細後述
    let eventsStr = events.map(e => e.eventStr).join('\n');

    // メール本文を置き換え
    let body = bodyTemplate
      .replace('{todayStr}', todayStr)
      .replace('{events}', eventsStr);

    // メール送信
    GmailApp.sendEmail(address, subject, body);

    // 追加・変更部ここまで
  }
}

① Googole Driveでスクリプトを作成する環境を整える 参考にしたサイトは下記です
 Google Apps Script(GAS)の基本的な使い方 https://www.astina.co/media/system/post-1137
② 上記のサイトを参考にしながらスクリプトを作成する環境を独立する
③ 独立したGASのスクリプトに上記のコードをコピペする

今回はここまで。次回に続く・・・

Follow me!

投稿者プロフィール

近江公人
近江公人asamai-cts Owner
あさまいCTSの代表オヤジです(2021年現在=60歳)
横手市中央町で「ラーメン与市」を2012年まで約15年間を経営。
その後、「横手市雇用創出協議会 実践支援員」を経て、一時会社勤めをするが体調を崩し、再度、自営業の世界に戻る。
現在の「あさまいCTS」は2019年1月に起業。業務内容は主に、パソコンの修理、出張スマホ・パソコン教室、ホームページ作成 その他何でも屋みたいなものです・・・