Automatically Add iCalendar Events (.ics) to Calendars
Do you want to create a calendar event so that you can display it on an iPhone's calendar app or in Google Calendar? This can be done by using iCalendar events RFC 5545 as part of the following workflow:
- The user signs up for an event online.
- The user receives the iCalendar file as an attachment in the email.
- The .ics file contains information for the event at a specific time and date.
These events can be automatically added to any calendar if the file contains the appropriate information. Here you can find a quick guide to generate a valid iCalendar file for this purpose.
Attachment Headers
In order to get the email client to parse correctly the attached .ics file, you should add the scheduling method and MIME information to the email headers. This is specified by the iCalendar Message-Based Interoperability Protocol (RFC 2447).
For this reason, your header should include Content-Type, Content-Transfer-Encoding and Content-Disposition as specified in the following example:
Content-Type: text/calendar; charset=utf-8; method=REQUEST; name=invite.ics'
Content-Transfer-Encoding: Base64
Content-Disposition: attachment; filename=invite.ics
iCalendar Method
When used in a MIME message entity, the value of "METHOD" must be the same as the Content-Type "method". This can only appear once within the iCalendar object. The value of this field is defined by the iCalendar Transport-Independent Interoperability Protocol(iTIP - RFC 5546). In order to request for a meeting, the value should be "REQUEST".
"REQUEST" is used to make a request for an event. This is an explicit invitation to one or more attendees.
METHOD:REQUEST
iCalendar VEVENT
When creating the iCalendar Event, you should consider the required properties to add events automatically. These properties and parameters should be specified in the "VEVENT" calendar component.
ATTENDEE
This property is the state of a particular "Attendee" relative to an event. It is used for scheduling and is defined by the "PARTSTAT" parameter in the "ATTENDEE" property for each attendee.
ATTENDEE;PARTSTAT=ACCEPTED;CN="Jane
Doe";EMAIL=jdoe@gmail.com:MAILTO:jdoe@gmailcom
PARTSTAT
It specifies the status of the attendee's participation. The value might be one of the following:
- NEEDS-ACTION: Event needs action. The event will be shown in the user's calendar but without an answer.
- ACCEPTED: Event accepted. The event will be shown on the calendar as accepted.
- DECLINED: Event declined. The event will show on the calendar as declined.
- TENTATIVE: Event tentatively accepted. The event will be shown on the calendar with "MAYBE".
- DELEGATED: Event delegated. The event will be shown in the user's calendar but without an answer.
CN and EMAIL
These properties are the displayable name associated with the calendar address and the email address of the attendee. Email addresses could be specified as a mailto.
Here are more considerations regarding the "Attendee" property.
Final Example
To wrap up, here is a complete example of a valid .ics file that will be added automatically to your calendar. For more examples, please review the examples from the RFC 2447.
BEGIN:VCALENDAR
VERSION:2.0
CALSCALE:GREGORIAN
METHOD:REQUEST
BEGIN:VEVENT
UID:<unique-id>@<site>.com
DTSTAMP:20210605T073803Z
DTSTART;TZID=America/Guayaquil:20210614T030000
DTEND;TZID=America/Guayaquil:20210614T040000
SUMMARY:My Event
ORGANIZER;CN="Juan Perez":mailto:jperez@organizer.com
ATTENDEE;PARTSTAT=ACCEPTED;CN="Jane
Doe";EMAIL=jdoe@gmail.com:MAILTO:jdoe@gmailcom
URL;VALUE=URI:https://<site>.com/event/5960492994476830083
END:VEVENT
END:VCALENDAR
Examples of how these events will appear in Gmail:
PARTSTAT=ACCEPTED

PARTSTAT=TENTATIVE
