googleカレンダーの予定を指定したメールアドレスに定期的に自動送信 ~Googleスプレッドシート:スクリプトを活用~
googleカレンダーの予定を指定したメールアドレスに定期的に自動送信
私は日頃の予定(スケジュール)を全てGoogleカレンダーに登録して管理しています。
そして、スマホのカレンダーアプリとGoogleカレンダーを同期して、何かあればスマホのカレンダーで自分の予定を確認・更新する使い方をしています。
ただ、念のため、Googleカレンダーに登録している未来(数日先)の予定をリマインドメールとして、自分の携帯のメールアドレス宛てに定期的(自動的)に送信したいなと思いました。
今回やりたいこと:定期的に自動送信するリマインドメールの仕様(動き)
- 指定したメールアドレス宛てに毎日決まった時間(0時)に自動的にメール送信
- その際に送信するメールの内容は、今日と明日の予定
- また、複数のGoogleカレンダーを使っているので、それらを1つにまとめる
今回、それをGoogleスプレッドシートのスクリプト(Google Apps Script)を活用して実装しました。
以下、その際に作ったソースコードですのでご参考下さい。
スポンサーリンク
Googleスプレッドシートのスクリプト(Google Apps Script)のソースコード
以下内容をスクリプトに記述、保存した後、「scheduleMail()」を毎日0時に定期的に動かすようにトリガーの設定をすれば完了。
var honbun = "";
var mailto = "xxx@xxx.zz" //ここに自動配信先のメールアドレスを設定
var dayTbl = new Array("日","月","火","水","木","金","土","日");
var dateToday = new Date();
var day = Utilities.formatDate(dateToday, "GMT+09:00" , "u");
var strToday = Utilities.formatDate(dateToday,"GMT+09:00","yyyy/MM/dd") + "(" + dayTbl[day] + ")";
var dateTomorrow = new Date();
dateTomorrow.setDate( dateToday.getDate() + 1 );
day = Utilities.formatDate(dateTomorrow, "GMT+09:00" , "u");
var strTomorrow = Utilities.formatDate(dateTomorrow,"GMT+09:00","yyyy/MM/dd") + "(" + dayTbl[day] + ")";
var kenmei = strToday + "の予定";
function scheduleMail() {
//予定を取得
honbun += strToday + "\n\n";
getSchedule( dateToday );
//メール送信
MailApp.sendEmail(mailto, kenmei, honbun);
}
//カレンダーの予定を取得する関数(複数のカレンダーを取得可能)
function getSchedule( selectedDate ){
//標準に設定されているカレンダー情報を取得
var cal = CalendarApp.getDefaultCalendar();
getScheduleDetail(cal, selectedDate, '標準');
//指定したカレンダーの情報を取得
var cal = CalendarApp.getCalendarById('xxxxxxx@group.calendar.google.com'); //ここに自分のGoogleカレンダーIDを設定
getScheduleDetail(cal, selectedDate, '○○'); //○○に任意の名称を設定
/*
他にも複数のカレンダー情報を取得したい場合は、以下を繰り返し
var cal = CalendarApp.getCalendarById('xxxxxxx@group.calendar.google.com'); //ここに自分のGoogleカレンダーIDを設定
getScheduleDetail(cal, selectedDate, '○○'); //○○に任意の名称を設定
*/
}
function getScheduleDetail( cal, selectedDate, scheduleName ){
honbun += "■" + scheduleName + "\n";
var events = cal.getEventsForDay(selectedDate);
if(events.length > 0){
for(var i=0; i < events.length; i++){
honbun += "・"
if(!events[i].isAllDayEvent()){ //終日イベント以外の場合は時間帯を表示
var start_time = Utilities.formatDate(events[i].getStartTime(),"GMT+0900","HH時mm分");
var end_time = Utilities.formatDate(events[i].getEndTime(),"GMT+0900","HH時mm分");
honbun += start_time;
if( start_time != end_time ){ //開始と終了の時間が異なる場合のみ終了を表示
honbun += " ~ " + end_time;
}
honbun += " : ";
}
honbun += events[i].getTitle() + "\n";
}
} else {
honbun += "予定はありません\n";
}
honbun += "\n";
}