前回、回答された日付型項目の値から、受信者がGoogle Calendarに予定追加するリンクを埋め込んだメールを送信したが、今度はicsファイル1を埋め込んだ形でメールを送信する。
icsファイル
icsファイルの形式は、単純なものなら難しくない。
カレンダーにまつわる標準まとめ #timezone - Qiitaが詳しい。PRODID
がよってはメールアドレスだったり、UID
は一意のものを設定しなければならないとかあるけど、そんなキッカリ定まってないというのか、カレンダーアプリによるようだ。
function createIcs(startDateTime, endDateTime) {
const summary = "用件";
const description = "https://us02web.zoom.us/j/12345678901?pwd=10841313bC8e5C81183048f160c79d2C\\nミーティングID: 12345678901\\nパスワード: password";
const ics =`
BEGIN:VCALENDAR
PRODID:-//arimasou16/handcal/NONSGML v1.0//EN
VERSION:2.0
UID:${Utilities.getUuid()}
BEGIN:VEVENT
SUMMARY:${summary}
DTSTART;TZID=Asia/Tokyo:${Utilities.formatDate(startDateTime, "JST", "yyyyMMdd'T'HHmmss")}
DTEND;TZID=Asia/Tokyo:${Utilities.formatDate(endDateTime, "JST", "yyyyMMdd'T'HHmmss")}
LOCATION:東京ドーム
DESCRIPTION:${description}
ORGANIZER;CN=有馬総一:mailto:arimasou16@test.com
ATTENDEE;ROLE=CHAIR;PARTSTAT=DELEGATED;CN=有馬総一:mailto:arimasou16@test.com
END:VEVENT
END:VCALENDAR
`;
return ics;
}
こんな調子で作成したicsファイルを添付すればいい。
イベント取得
これだけじゃつまらないので、もし日付選択で不都合があったりしたりしたときに、icsを追加しない形にしてみた。
自身で予定を既に作成しておき、その予定の開始時間と終了時間が一致しない場合は、追加しないとした。
const cal = CalendarApp.getCalendarById('Gmailアドレス');
const startDateTime = new Date(reserveDate);// 予定の開始日時
startDateTime.setHours(9);
startDateTime.setMinutes(40);
const endDateTime = new Date(reserveDate);// 予定の開始日時
endDateTime.setHours(23);
endDateTime.setMinutes(55);
const ics = createIcs(startDateTime, endDateTime);
const events = cal.getEvents(startDateTime, endDateTime);
const options = {
htmlBody: htmlBody
};
if (events.length > 0) {
options.attachments = [
{
fileName:"invite.ics",
content: ics,
mimeType:'text/calendar'
}
]
}
// メール送信
MailApp.sendEmail(
response.email,
subject,
textbody,
options
);
}
ググると逆に他の予定と被っている場合は、イベント作成しないなどのやり方が紹介されたりする。
本当は、既に追加したイベントを元にicsファイルを添付したり、予定詳細をメールする方法を探っていたが、分からなかった。
Google Calendarの予定登録のリンクだとGoogle Calendarを使っている人以外は予定を登録することが出来ないが、icsファイルの添付なら、他のサービスでも予定の登録が出来る。outlookで試したところ、一応、こちらもで上手くいった。
-
icsファイルの仕様についてはこちら。 RFC 5546 - Internet Calendaring and Scheduling Core Object Specification (iCalendar) 日本語訳。以前はRFC 2445だったが廃止されてRFC 5546となっている。 ↩︎