Mybestpro Members

拾井央雄プロは京都新聞が厳正なる審査をした登録専門家です

Google Apps Script で明日の予定メールに挑戦!

拾井央雄

拾井央雄

テーマ:徒然コラム

業務管理
前回、Google Apps Scriptを使って、SpreadSheetからGoogleカレンダーに予定が書きこめるようになりました。

次は、Googleカレンダーに書き込んだ予定を、前の日の夕方に自分宛てにメール送信するリマインダーを作ってみましょう。
GASを使えばカレンダーから予定を読み込めますし、Gメールを送信することもできます。

まず、予定を読み込むカレンダーを取得して、変数calendarに格納します。

let calendar = CalendarApp.getCalendarById(id);

"id" は「カレンダーの設定」の「カレンダーID」に表示される"xxx@xxx.xxx"のことですね。

そしてそのカレンダーから予定を取得して、変数eventsに格納します。

let events = calender.getEventsForDay(date);

この"date"に明日の日付をセットしておきます。

let date = new Date();
date.setDate(date.getDate() + 1);

明日の予定が複数あった場合は、events[0]から順番に格納されます。

let event;
for(var i=0; i < events.length; i++){
event = events[i];
}

で、"event"に格納しながら順番に取り出すことができます。

次は、この"events"からメールに書きたい項目を抜き出して、文面を作ります。
何も予定がないときは、 「予定はありません」と書くことにします。

これをするために、"events"の中身があるかどうかを判別して、分岐させましょう。

if(events.length > 0){ //予定が何かある場合
//メールの文面作成
}
else {
//「予定はありません」
}

メールの文面としては、「10時00分 ~ 12時00分 : あの件」のようにします。
時間は読みやすい形式に変換しましょう。

"mailContents"に文面を格納することにして、

let mailContents = "";

開始時間を、

mailContents += Utilities.formatDate(event.getStartTime(),"GMT+0900","HH時mm分") + " ~ ";

終了時間を、

mailContents += Utilities.formatDate(event.getEndTime(),"GMT+0900","HH時mm分") + " : ";

そして件名を、

mailContents += event.getTitle() + "\n";

とします。

終日の予定がある場合、終日の予定を判別する関数を使って、終日予定でない場合にだけ時間をセットするようにします。

if(event.isAllDayEvent() == false){ //終日予定でない場合
//時間のセット
}

そしてこの"mailContents"をメール送信します。

メールの送信は次のようにします。

MailApp.sendEmail(mailto, mailTitle, mailContents);

"mailto"は送信先のメールアドレス、"mailTitle"はメールの件名です。

これを、トリガーを使って、毎日自動で送信します。
スクリプトエディタの左に"<>"みたいなのがありますから、そこにマウスを持っていって「トリガー」をクリックします。
「実行する関数」のところは、もちろんメールを送信する関数をセットします。
「イベントのソースを選択」は「時間主導型」、「時間ベースのトリガーのタイプを選択」は「日付ベースのタイマー」、「時刻を選択」は関数を実行したい時間を入れます。

実行させる時刻に1時間の幅がありますので、 毎日17:00ちょうどに送信するには一工夫必要です。
17:00に実行するトリガーを作成する関数を書いて、この関数をトリガーで前もって起動させるようにします。

function setTrigger(){ //scheduleMailを毎日17:00に呼び出すトリガーを作成する関数
const time = new Date();
time.setHours(17);
time.setMinutes(00);
ScriptApp.newTrigger('scheduleMail').timeBased().at(time).create();
}

つまり、"setTrigger"を毎日17:00よりも前にトリガーで起動するというわけです。
ただし、毎日トリガーが作成されていきますから、"scheduleMail"が実行されたら作成したトリガーを削除するようにした方がいいでしょう。

function delTrigger() { //scheduleMailを呼び出したトリガーを削除する関数
const triggers = ScriptApp.getProjectTriggers();
for(const trigger of triggers){
if(trigger.getHandlerFunction() == "scheduleMail"){
ScriptApp.deleteTrigger(trigger);
}
}
}

休みの日までこんなメールが来るとうんざりしますから、休業日は実行しないように、金曜日には月曜日の予定をメールするように、カレンダーの休業日を判別する工夫も必要でしょう。
 

リンクをコピーしました

Mybestpro Members

拾井央雄
専門家

拾井央雄(弁護士)

京都北山特許法律事務所

エンジニア15年〜弁理士5年と弁護士としては異例の経歴を持ち、技術系分野に精通。知的財産や技術系法務のエキスパートとして数多くの事業者を支援。また自身が住職である立場から宗教法人のサポートも手掛ける。

拾井央雄プロは京都新聞が厳正なる審査をした登録専門家です

関連するコラム

プロのおすすめするコラム

コラムテーマ

コラム一覧に戻る

プロのインタビューを読む

知的財産や技術系法務に強い理系出身の法律のプロ

拾井央雄プロへの仕事の相談・依頼

仕事の相談・依頼