04 February 2020

Brief analysis of iCal structure

In my work, I occasionally have to deal with various issues with meeting invitations (encoding troubles, wrong time zone, etc.), so I wanted to understand the structure of iCal (iCalendar).

This is not a complete overview of iCalendar features (RFC2445, RFC2446 and RFC2447). You can get acquainted with the most complete functional overview on the following sites: https://www.w3.org/2000/01/foo & https://www.kanzaki.com/docs/ical/

The analysis involved 8 different iCal emails from Microsoft Exchange 2016 + Microsoft Outlook 2016 environment. Microsoft Exchange adds additional "X-MICROSOFT" and "X-MS-OLK" headers to increase Microsoft Outlook functionality. Fully description you can find there.

In the image below, I tried to clearly visualize links between the iCal file parameters and Outlook interface.

iCalendar Structure




In the table below, I presented an analysis of the main parameters of iCal file.
I hope it will help someone.

Structure Example Description Options
BEGIN:VCALENDAR
METHOD: REQUEST This property defines the iCalendar object method associated with the calendar object REQUEST, REPLY, COUNTER
PRODID: Microsoft Exchange Server 2010 This property specifies the identifier for the product that created the iCalendar object.
VERSION: 2.0 This property specifies the identifier corresponding to the highest version number or the minimum and maximum range of the iCalendar specification that is required in order to interpret the iCalendar object.
BEGIN:VTIMEZONE Provide a grouping of component properties that defines a time zone.
TZID: (UTC+03:00) Moscow\, St. Petersburg\, Volgograd This property specifies the text value that uniquely identifies the "VTIMEZONE" calendar component.
BEGIN:STANDARD Standard Time is also known as Winter Time
DTSTART: 16010101T000000 This property specifies when the calendar component begins.
TZOFFSETFROM: +0400 This property specifies the offset which is in use prior to this time zone observance.
TZOFFSETTO: +0400 This property specifies the offset which is in use in this time zone observance.
END:STANDARD
BEGIN:DAYLIGHT Daylight Saving Time is also known as Advanced Time, Summer Time, or Legal Time in certain countries
DTSTART: 16010101T000000 This property specifies when the calendar component begins.
TZOFFSETFROM: +0400 This property specifies the offset which is in use prior to this time zone observance.
TZOFFSETTO: +0400 This property specifies the offset which is in use in this time zone observance.
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
ORGANIZER; CN=Administrator:MAILTO:Administrator@domain.com The property defines the organizer for a calendar component.
ATTENDEE; ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=address@mail.ru:MAILTO:address@mail.ru The property defines an "Attendee" within a calendar component.
DESCRIPTION; LANGUAGE=en-US:Description\n This property provides a more complete description of the calendar component, than that provided by the "SUMMARY" property.
COMMENT; - This property specifies non-processing information intended to provide a comment to the calendar user.
RRULE: FREQ=YEARLY;UNTIL=20201209T200000Z;INTERVAL=1;BYMONTHDAY=10;BYMONTH=12 This property defines a rule or repeating pattern for recurring events, to-dos, or time zone definitions. UNTIL, COUNT, INTERVAL, BYSECOND, BYMINUTE, BYHOUR, BYDAY, BYMONTHDAY, BYYEARDAY, BYWEEKNO, BYMONTH, BYSETPOS, WKST, FREQ
UID: 040000008200E0007FGH773920800000000327E94D1B18FD401000000000000000010000000A36FEBC0C360334FB4E7ECA0FCD7CB97 This property defines the persistent, globally unique identifier for the calendar component.
SUMMARY; LANGUAGE=en-US:iCal | Test #1 This property defines a short summary or subject for the calendar component.
DTSTART; TZID="(UTC+03:00) Moscow, St. Petersburg, Volgograd":20181210T090000 Start date and time of the event
DTEND; TZID="(UTC+03:00) Moscow, St. Petersburg, Volgograd":20181210T100000 End date and time of the event
CLASS: PUBLIC This property defines the access classification for a calendar component. PRIVATE, PUBLIC
PRIORITY: 5 The property defines the relative priority for a calendar component.
DTSTAMP: 20181209T112459Z The property indicates the date/time that the instance of the iCalendar object was created.
TRANSP: OPAQUE This property defines whether an event is transparent or not to busy time searches. OPAQUE, TRANSPARENT
STATUS: CONFIRMED This property defines the overall status or confirmation for the calendar component. CONFIRMED, TENTATIVE, CANCELLED
SEQUENCE: 0 This property defines the revision sequence number of the calendar component within a sequence of revisions. 
LOCATION; LANGUAGE=en-US:Moscow The property defines the intended venue for the activity defined by a calendar component.
X-MICROSOFT-CDO-APPT-SEQUENCE: 0 Specifies the sequence number of the meeting request
X-MICROSOFT-CDO-OWNERAPPTID: 2116832050 Provides an identifier for the appointment which is unique in the scope of the organizer's primary calendar
X-MICROSOFT-CDO-BUSYSTATUS: TENTATIVE Specifies the BUSY status of an appointment. FREE, TENTATIVE, BUSY, OOF
X-MICROSOFT-CDO-INTENDEDSTATUS: BUSY Specifies the busy status that the meeting organizer intends the attendee's copy of the meeting to have
X-MICROSOFT-CDO-ALLDAYEVENT: FALSE Specifies whether an appointment is intended to be treated as all-day. TRUE, FALSE
X-MICROSOFT-CDO-IMPORTANCE: 1 Specifies the importance of an appointment. 0, 1, 2
X-MICROSOFT-CDO-INSTTYPE: 0 Indicates whether the VEVENT represents a non-recurring appointment, a recurring appointment, or an exception to a recurring appointment.
X-MICROSOFT-DONOTFORWARDMEETING: FALSE Specifies whether this meeting can be forwarded. TRUE, FALSE
X-MICROSOFT-DISALLOW-COUNTER: FALSE Specifies whether or not the organizer is willing to receive counter-proposals. TRUE, FALSE
X-MS-OLK-ORIGINALSTART; - Specifies the original start time of a meeting on a counter proposal.
X-MS-OLK-ORIGINALEND; - Specifies the original end time of a meeting on a counter proposal.
X-MICROSOFT-LOCATIONDISPLAYNAME: Moscow The property equal "LOCATION;" field.
X-MICROSOFT-LOCATIONSOURCE: None
BEGIN:VALARM Provide a grouping of component properties that define an alarm. 
DESCRIPTION: REMINDER When the action is "DISPLAY", the alarm MUST also include a "DESCRIPTION" property, which contains the text to be displayed when the alarm is triggered.
TRIGGER; RELATED=START:-PT15M This property specifies when an alarm will trigger.
ACTION: DISPLAY This property defines the action to be invoked when an alarm is triggered. AUDIO, DISPLAY, EMAIL, PROCEDURE
END:VALARM
END:VEVENT
END:VCALENDAR

No comments:

Post a Comment