最近研究Laravel發送郵件的模板,發現一些活動網址的報名通知郵件中,會自動生成Google Calendar的活動。翻查一下發現,原來是附件中的ics產生的作用,於是便來研究ics檔是怎麼一回事。
查看維基百科的說明,ics檔是 iCalendar是「日曆數據交換」的標準的副檔名之一,使用ics描述檔可以快速與他人交換日曆或活動的資料,常用於郵件當中,而其格式內容也相當簡易,以下是ics檔的簡單範例:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:Alex Ian
CALSCALE:GREGORIAN
METHOD:REQUEST
BEGIN:VEVENT
UID:201810311234567890
ORGANIZER;CN=活動舉辦者:test@gmail.com
ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=TRUE;CN=參與者01;X-NUM-GUESTS=0:alexian853@gmail.com
DTSTAMP:20181031T110000Z
DTSTART:20181031T110000Z
DTEND:20181031T120000Z
SUMMARY:示範活動
DESCRIPTION:大概是萬聖節的活動描述
LOCATION:110台北市信義區信義路五段7號
CLASS:PRIVATE
SEQUENCE:0
END:VEVENT
END:VCALENDAR
主要屬性
- VCALENDAR:所有內容都要包在
BEGIN:VCALENDAR
和END:VCALENDAR
中。 - VERSION:ics通用格式的版本,現在以2.0為主
- PRODID (Product Identifier):產品識辨符,辨識產出日曆者
- CALSCALE (Calendar Scale):使用的曆法,GREGORIAN為陽
- METHOD:決定該ics要執行的行為(REQUEST為加入,CANCEL為取消)
- VEVENT:設定每一個活動要包在
BEGIN:VEVENT
和END:VEVENT
中 - UID:設定該活動的唯一識別ID,用於針對該活動之後進行修改
- ORGANIZER:活動舉辦者,如有多個參數要使用
;
開首,ORGANIZER中還有其它子屬性:
8.1. CN(common name):舉辦者名稱
8.2. MAILTO:舉辦者
範例:ORGAMIZER;CN=主辦人:MAILTO:hello@mydomain.com
- ATTENDEE:參與者,如有多個參數要使用
;
開首,ORGANIZER中還有其它子屬性:
9.1. CUTYPE(Type of Calendar User):參與者類型
9.2. ROLE:參與者角色
9.3. CN(Common Name):參與者名稱
9.4. PARTSTAT(Participation Status):參與者狀態
9.5. RSVP:是否需要參與者回覆
9.6. X-NUM-GUESTS:參與者陣列 - DTSTAMP:活動創建的日期時間
- DTSTART:活動開始的日期時間
- DTEND:活動結束的日期時間
- SUMMARY:活動的顯示標題
- DESCRIPTION:活動的描述
- LOCATION:活動地點
- CLASS:活動類型
- SEQUENCE:變動的順序,如果活動使用UID進行變動,以SEQUENCE作為變動順序
接下來只要把ics以附件形式寄送,Gmail便會自動把活動加入Google Calendar: