LoginSignup
5
1

More than 1 year has passed since last update.

【GAS】Googleカレンダーに特定の予定があったときにメールを送る

Last updated at Posted at 2022-03-26

これはなに

うちの会社では有給を取るときに以下の作業をしなければいけません。

  • カレンダーに予定登録
  • メール送信

ちょっと手間だし忘れたりすることもあるので、手作業はせめて1回にしたいところです。
予定をブロックするために、カレンダーは必ず登録するので、メール送信をGASで自動化。

作り方

スクリプト

AbsenceMail.js
function AbsenceMail() {
  let myCalendar = CalendarApp.getCalendarById('☓☓☓@gmail.com'); // 自分のメールアドレス
  let today = new Date();

  // イベントを取得
  let myEvent = myCalendar.getEventsForDay(today);
  
  // イベントの中に”休み”という件名のものがあれば、メールを送信する
  for(let i = 0 ; i < myEvent.length ; i++ ){
    if(myEvent[i].getTitle() == '休み'){
      let dateString = Utilities.formatDate(today, "JST", "M/d"); // 今日の日付
      let recipient = '☓☓☓@gmail.com'; // 宛先
      let myName = ''; // 自分の名前
      let subject = `【勤怠連絡】${dateString} 有給 ${myName}`;// 件名
      let body = '今日は休みだ\n'
        + 'わっしょいわっしょい';
        GmailApp.sendEmail(recipient, subject, body);
    };
  }
}

あとはこれを毎朝実行するように、トリガーを設定すればOK。
と思いきやまだ続きます。

時間設定を変更する

new Date()の出力結果が、アメリカ時間(-13h)になってしまいます。
これでは朝実行したら昨日の予定を取ってきてしまうので、時間設定を日本時間に変更します。
手順は以下

  • サイドメニューのプロジェクトの設定から「appsscript.json」マニフェスト ファイルをエディタで表示するにチェックを入れる

image.png

  • エディタでappsscript.jsonを開いてtimeZoneの設定をAsia/Tokyoに変更する
appsscript.json
{
  "timeZone": "Asia/Tokyo",
  "dependencies": {
  },
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8"
}

これでようやく日本時間の今日 の予定を取ってきてくれる。

最後に

これでメール忘れの心配はなくなりました。
応用したら会議前にSlackとかで「資料読めよ」的なリマインドにも使えそう。
曜日固定の定例会議なら、Slackワークフローの方がお手軽ですが。

5
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1