使用Gmail附帶.ics檔,自動加入行事曆

Alex Ian
4 min readOct 20, 2018

--

Gmail抓取ics檔加入活動至Google Calendar中

最近研究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

主要屬性

  1. VCALENDAR:所有內容都要包在BEGIN:VCALENDAREND:VCALENDAR 中。
  2. VERSION:ics通用格式的版本,現在以2.0為主
  3. PRODID (Product Identifier):產品識辨符,辨識產出日曆者
  4. CALSCALE (Calendar Scale):使用的曆法,GREGORIAN為陽
  5. METHOD:決定該ics要執行的行為(REQUEST為加入,CANCEL為取消)
  6. VEVENT:設定每一個活動要包在BEGIN:VEVENTEND:VEVENT
  7. UID:設定該活動的唯一識別ID,用於針對該活動之後進行修改
  8. ORGANIZER:活動舉辦者,如有多個參數要使用 ; 開首,ORGANIZER中還有其它子屬性:
    8.1. CN(common name):舉辦者名稱
    8.2. MAILTO:舉辦者
    範例: ORGAMIZER;CN=主辦人:MAILTO:hello@mydomain.com
  9. 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:參與者陣列
  10. DTSTAMP:活動創建的日期時間
  11. DTSTART:活動開始的日期時間
  12. DTEND:活動結束的日期時間
  13. SUMMARY:活動的顯示標題
  14. DESCRIPTION:活動的描述
  15. LOCATION:活動地點
  16. CLASS:活動類型
  17. SEQUENCE:變動的順序,如果活動使用UID進行變動,以SEQUENCE作為變動順序

接下來只要把ics以附件形式寄送,Gmail便會自動把活動加入Google Calendar:

附件的alex.ics內容相同

參考資料

--

--

Alex Ian

大膽假設,小心求證 Frontend Developer from Macau. Working inTaiwan. https://alex-ian.me/