Cannot cancel ical event (dreaded "not supported calendar message.ics") - outlook

I'm writing a system in Python that is using the icalendar library to generate ical invites. Those work fantastically, but if I try to send out a cancellation Outlook just displays the dreaded "not supported calendar message.ics". I originally had this issue with the invite, but solved it by fixing my date formatting.
Here is the initial invite:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//myapp//myapp.example.com//
METHOD:REQUEST
BEGIN:VEVENT
SUMMARY:Weekly Review Meeting
DTSTART;VALUE=DATE-TIME:20200331T190000Z
DTEND;VALUE=DATE-TIME:20200331T200000Z
DTSTAMP;VALUE=DATE-TIME:20200325T193007Z
UID:1#myapp
SEQUENCE:0
ATTENDEE:me#example.com
CATEGORY:EVENT
CLASS:PUBLIC
DESCRIPTION:bla bla
LOCATION:Webex
ORGANIZER:donotreply#example.com
PRIORITY:5
STATUS:CONFIRMED
BEGIN:VALARM
ACTION:DISPLAY
DESCRIPTION:REMINDER
TRIGGER;RELATED=START:-PT15M
END:VALARM
END:VEVENT
END:VCALENDAR
And then the cancellation:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//myapp//myapp.example.com//
METHOD:CANCEL
BEGIN:VEVENT
SUMMARY:Weekly Review Meeting
DTSTART;VALUE=DATE-TIME:20200331T190000Z
DTEND;VALUE=DATE-TIME:20200331T200000Z
DTSTAMP;VALUE=DATE-TIME:20200325T193011Z
UID:1#myapp
SEQUENCE:1
ATTENDEE:me#example.com
CATEGORY:EVENT
CLASS:PUBLIC
DESCRIPTION:
LOCATION:Webex
ORGANIZER:donotreply#example.com
PRIORITY:5
STATUS:CANCELLED
BEGIN:VALARM
ACTION:DISPLAY
DESCRIPTION:REMINDER
TRIGGER;RELATED=START:-PT15M
END:VALARM
END:VEVENT
END:VCALENDAR
The same code generates both and sets the METHOD and STATUS differently (DESCRIPTION also differs). I send a SEQUENCE of 0 for the invite and 1 for the cancellation. The UIDs are always consistent between the matching pair. What am I missing?

I ended up solving this myself. I will share my learnings for posterity.
The MIME type in the email needs to be set with method=CANCEL as well. This was ultimately my issue. method in the MIME type needs to match METHOD in the ical file and both are required for Outlook to process it correctly.
SEQUENCE should not be incremented for cancellation, just for update.
I also updated all addresses (ORGANIZER and ATTENDEE) to include mailto:, but this does not appear to be strictly necessary.

Related

how to delete a series of events from recurring set using ics file?

Im trying to delete a series of dates like google or zoom does ("delete this and following occurrences") but cant seem to delete them all
here is the code I'm using to do so
RECURRENCE-ID;RANGE=THISANDFUTURE;TZID=America/New_York:20230221T100000Z
I saw few people recommending to use UNTIL in the range parameter for recurrence-id but cannot find any syntax or working example.
Thanks in advance
Full code for creating recurring event:
BEGIN:VCALENDAR
VERSION:2.0
PRODID://Events//iCal 2.1//EN
METHOD:REQUEST
X-WR-CALNAME:Event Calendar
X-WR-TIMEZONE:America/New_York
CALSCALE:GREGORIAN
BEGIN:VTIMEZONE
TZID:America/New_York
TZURL:http://tzurl.org/zoneinfo-outlook/America/New_York
X-LIC-LOCATION:America/New_York
BEGIN:DAYLIGHT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
TZNAME:EDT
DTSTART:19700308T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
TZNAME:EST
DTSTART:19701101T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
TRANSP:OPAQUE
CREATED:20221221T094254Z
UID:TESTSC20221221094254
DTEND;TZID=America/New_York:20221226T110000
SUMMARY:deadline approaching Event
LOCATION;ENCODING=QUOTED-PRINTABLE:Virtual Meeting
DTSTART;TZID=America/New_York:20221226T100000
DTSTAMP:20221221T094254Z
ORGANIZER;CN=Events:mailto:events#abc.org
ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=abc#abc.org;X-NUM-GUESTS=0:mailto:abc#abc.org
STATUS:CONFIRMED
DESCRIPTION:A. Want to join the meeting from your computer, tablet or smartphone?\n go to https://zoom.us/
SEQUENCE:0
RRULE:FREQ=DAILY;INTERVAL=1;UNTIL=20230228T110000Z
BEGIN:VALARM
DESCRIPTION:REMINDER
TRIGGER;RELATED=START:-PT10M
ACTION:DISPLAY
END:VALARM
END:VEVENT
END:VCALENDAR
Full code I use for deleting:
VERSION:2.0
PRODID://Events//iCal 2.1//EN
METHOD:CANCEL
X-WR-CALNAME:Event Calendar
X-WR-TIMEZONE:America/New_York
CALSCALE:GREGORIAN
BEGIN:VEVENT
TRANSP:OPAQUE
CREATED:20221221T145554Z
UID:TESTSC20221221094254
DTSTART;TZID=America/New_York:20221226T100000
DTEND;TZID=America/New_York:20221226T110000
SUMMARY:Event: deadline approaching Cancelled
LOCATION;ENCODING=QUOTED-PRINTABLE:Virtual Meeting
DTSTAMP:20221221T145554Z
ORGANIZER;CN=Events:mailto:events#abc.org
RECURRENCE-ID;RANGE=THISANDFUTURE;TZID=America/New_York:20230221T100000Z
SEQUENCE:0
ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=abc#abc.org;X-NUM-GUESTS=0:mailto:abc#abc.org
STATUS:CANCELLED
DESCRIPTION:This meeting has been deleted. Please contact HQ for scheduling a new meeting or more information about this.
END:VEVENT
END:VCALENDAR```

How to remove user from Attendee list in .ics?

I am using .ics file to send calendar invite to google users from my app, when a user is removed from the attendees in my app,
I am resending the .ics with updated attendees list to attendees who are still in the meeting.
send the removed attendees new .ics with cancel event.
however, the removed attendees are still showing in the event for other users.
how do I remove attendees from event using ICS?
first .ics:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:MyDemoApp
METHOD:REQUEST
BEGIN:VEVENT
UID:useremovetest1jdfshsdpfh
SEQUENCE:0
CREATED:20191014T085551Z
DTSTAMP:20191014T085551Z
LAST-MODIFIED:20191014T085551Z
DTSTART:20191014T112347Z
DTEND:20191014T113547Z
SUMMARY:user remove test - 2
LOCATION:#my-dev-env
DESCRIPTION:some dummy desc
ATTENDEE;CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=
true:mailto:user1#gmail.com
ATTENDEE;CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=
true:mailto:user2#gmail.com
ATTENDEE;CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=
true:mailto:user3#gmail.com
ORGANIZER;CN=Invitation - user remove test - 2:user1#gmail.com
END:VEVENT
END:VCALENDAR
.ics when a attendee is removed:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:MyDemoApp
METHOD:REQUEST
BEGIN:VEVENT
UID:useremovetest1jdfshsdpfh
SEQUENCE:0
CREATED:20191014T085422Z
DTSTAMP:20191014T085422Z
LAST-MODIFIED:20191014T085422Z
DTSTART:20191014T112347Z
DTEND:20191014T113547Z
SUMMARY:user remove test - 2
LOCATION:#my-dev-env
DESCRIPTION:some dummy desc - update
ATTENDEE;ROLE=REQ-PARTICIPANT;RSVP=true;CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-AC
TION:mailto:user1#gmail.com
ATTENDEE;CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=
true:mailto:TION:mailto:user2#gmail.com
ORGANIZER;CN=Invitation - user remove test - 2:user1#gmail.com
END:VEVENT
END:VCALENDAR
user2#gmail.com still stays in the attendee list. however, title, desc etc are updating successfully.
It looks like your DTSTAMP and LAST-MODIFIED values are "backward" in the sense that the updated invite has an earlier timestamp than the original one.
First invite:
DTSTAMP:20191014T085551Z
Updated invite:
DTSTAMP:20191014T085422Z
As a consequence this second ics is likely to be ignored by clients as per https://www.rfc-editor.org/rfc/rfc5546#section-2.1.5

Lotus Notes (and MS Outlook) .ICS event CANCELLATION

I am trying to implement external appointment management (using VCAL2) - namely CREATE, UPDATE and CANCEL appointment - and I need it to work with Lotus Notes (and possibly in MS Outlook).
My VCAL2 files are in my opinion correct (RFC 5545), and CREATE and UPDATE actually works well. Problem is only with CANCEL and only in MS Outlook and Lotus Notes - they seem to ignore the cancellation request.
CREATE.ics
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//myprod//ical-poc//SK
METHOD:PUBLISH
X-WR-RELCALID:5EF979C9-3764-4B55-93B8-3BB00DFA176C#uniq.id
X-PUBLISHED-TTL:P1W
BEGIN:VEVENT
UID:5EF979C9-3764-4B55-93B8-3BB00DFA176C#uniq.id
DTSTART;TZID=Europe/Bratislava:20150701T090000
SEQUENCE:0
TRANSP:OPAQUE
STATUS:CONFIRMED
DTEND;TZID=Europe/Bratislava:20150701T093000
SUMMARY:CREATED
ATTENDEE:mailto:valid#email.xxx
DESCRIPTION:Event description.
ORGANIZER:mailto:cal-poc#domain.com
DTSTAMP:20150630T182305Z
END:VEVENT
END:VCALENDAR
UPDATE.ics
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//myprod//ical-poc//SK
METHOD:REQUEST
X-WR-RELCALID:5EF979C9-3764-4B55-93B8-3BB00DFA176C#uniq.id
X-PUBLISHED-TTL:P1W
BEGIN:VEVENT
UID:5EF979C9-3764-4B55-93B8-3BB00DFA176C#uniq.id
DTSTART;TZID=Europe/Bratislava:20150701T110000
SEQUENCE:1
TRANSP:OPAQUE
STATUS:CONFIRMED
DTEND;TZID=Europe/Bratislava:20150701T113000
SUMMARY:UPDATED+2
ATTENDEE:mailto:valid#email.xxx
DESCRIPTION:Event description.
ORGANIZER:mailto:cal-poc#domain.com
DTSTAMP:20150630T182428Z
END:VEVENT
END:VCALENDAR
CANCEL.ics
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//myprod//ical-poc//SK
METHOD:CANCEL
X-WR-RELCALID:5EF979C9-3764-4B55-93B8-3BB00DFA176C#uniq.id
X-PUBLISHED-TTL:P1W
BEGIN:VEVENT
UID:5EF979C9-3764-4B55-93B8-3BB00DFA176C#uniq.id
DTSTART;TZID=Europe/Bratislava:20150701T110000
SEQUENCE:1
TRANSP:OPAQUE
STATUS:CANCELLED
DTEND;TZID=Europe/Bratislava:20150701T113000
SUMMARY:CREATED+2
ATTENDEE:mailto:valid#email.xxx
DESCRIPTION:Event description.
ORGANIZER:mailto:cal-poc#domain.com
DTSTAMP:20150630T182457Z
END:VEVENT
END:VCALENDAR
As almost always, answering my question (it seems, posting it on S/O gives me some superpowers to find an answer in the next few hours).
It seems, there are multiple combinations of properties in iCal format, that form the valid file for each client. Following is my analysis of it (please note, it does not support RSVPs, but RSVPs only require few more tweaks to the file like slightly different methods etc. and the point of the question was cancellation):
CREATE & UPDATE APPOINTMENT
All Applications:
METHOD must be PUBLISH
DTSTART and DTEND (or DURATION) present
SEQUENCE must be incremented on each update
ORGANIZER must be present
UID must be present
X-WR-RELCALID for Outlook must be present and equal to UID
PRODID must be present
STATUS should be CONFIRMED
CANCEL
All Applications:
STATUS must be CANCELLED
all other fields as above
Apple Calendar:
METHOD must be PUBLISH (or actually, must not be CANCEL)
DURATION (or DTEND) must be present
Microsoft Outlook:
METHOD must be CANCEL
DURATION (or DTEND) MUST NOT be present
Lotus Notes:
METHOD must be CANCEL
DURATION (or DTEND) must be present

Delete calendar event using iCalendar file import (Outlook 2003 problem)?

Is there a way for me to delete items from calendar by using iCalendar import?
I know that there is a METHOD:CANCEL, however when I tried it, it didn't do anything to the calendar event.
Here is what is in my iCalendar file. When I try to import it to Outlook, it just adds these events.
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//DDay.iCal//NONSGML ddaysoftware.com//EN
METHOD:CANCEL
BEGIN:VEVENT
CREATED:20081210T155315Z
DESCRIPTION:
DTEND:20081213T093000
DTSTAMP:20081210T155315Z
DTSTART:20081213T093000
LOCATION:
ORGANIZER:MAILTO:user#domain.com
SEQUENCE:1
SUMMARY:From FCS 13th
UID:20367b86-2123-4930-87ef-5c2a6626bd9f
BEGIN:VALARM
ACTION:DISPLAY
SUMMARY: Event 13th
TRIGGER:-PT30M
END:VALARM
END:VEVENT
BEGIN:VEVENT
CREATED:20081210T155315Z
DESCRIPTION:
DTEND:20081211T093000
DTSTAMP:20081210T155315Z
DTSTART:20081211T093000
LOCATION:7 West
ORGANIZER:MAILTO:user#domain.com
SEQUENCE:1
SUMMARY:Event 11th
UID:f212ab15-86c3-46c8-8592-af0716a40ea2
BEGIN:VALARM
ACTION:DISPLAY
SUMMARY:Event on 11th
TRIGGER:-PT30M
END:VALARM
END:VEVENT
END:VCALENDAR
I forgot to add STATUS:CANCELLED
Now this should cancel items according to http://en.wikipedia.org/wiki/ICalendar#Events_.28VEVENT.29
This works in Google Calendar but not in Outlook 2003. Outlook still creates duplicate entries.
Here are modified "cancel" events with 'STATUS:CANCELLED'. (British spelling with two L's)
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//DDay.iCal//NONSGML ddaysoftware.com//EN
X-WR-RELCALID:928C8448-048A-4aa2-BE27-A920773AF3DC
METHOD:CANCEL
BEGIN:VEVENT
CREATED:20081210T210344Z
DESCRIPTION:
DTEND:20081213T093000
DTSTAMP:20081210T210344Z
DTSTART:20081213T093000
LOCATION:
ORGANIZER:MAILTO:user#domain.com
SEQUENCE:1
STATUS:CANCELLED
SUMMARY:Event to export 1
UID:20367b86-2123-4930-87ef-5c2a6626bd9f
BEGIN:VALARM
ACTION:DISPLAY
SUMMARY:Event to export 1
TRIGGER:-PT30M
END:VALARM
END:VEVENT
BEGIN:VEVENT
CREATED:20081210T210344Z
DESCRIPTION:
DTEND:20081211T093000
DTSTAMP:20081210T210344Z
DTSTART:20081211T093000
LOCATION:7 West
ORGANIZER:MAILTO:user#domain.com
SEQUENCE:1
STATUS:CANCELLED
SUMMARY:Event to export 2
UID:f212ab15-86c3-46c8-8592-af0716a40ea2
BEGIN:VALARM
ACTION:DISPLAY
SUMMARY:Event to export 2
TRIGGER:-PT30M
END:VALARM
END:VEVENT
END:VCALENDAR
I was struggling with this for a while.
As a few others have mentioned you must include the:
METHOD:CANCEL
and
STATUS:CANCELLED
lines of the VEVENT. The UID must be the same as the original event AND the SEQUENCE: number must be the CURRENT sequence number! (you do not need to add 1 from the last sequence number as cancelling the event does not count as an update).
I was having issues as I assumed that the cancellation counted as an update and was therefore incrementing my sequence number, but you do not have to!
This answer is meant for iCal URL feeds not for importing an iCal file!
I looked into this for quite a while and since the answer given doesn't actually resolve the issue for outlook I thought I would post what I have found to work for Outlook, iCal, and Google Calendar.
You just simply do not send the event, if the event is outright just not in the feed anymore then Outlook, Google Calendar, and iCal (from my testing) all just remove the event as if it never existed. So if the event has been cancelled just pretend it never existed and when the local calendars sync they will show events that are explicitly given to them in the feed.
This can be a painful and unpredictable business, and is likely dependent on Outlook version. I have got event cancellations working with Outlook 2010 (v14). I send my icalendar as a single-part message, type text/calendar, as discussed in this thread. As mentionned in the other answers, I have method=CANCEL in the MIME type, and again in the icalendar.
The critical step for me was to add DTSTART to the event. Without this field, the message is not presented as a cancellation, there is nothing in the preview pane, and the calendar is presented as an attachment with the filename "not supported calendar message.ics". But you can put any date you like in the field! DTEND is not important. SEQUENCE could be the same or greater. DTSTAMP is not important, but if present, must be after the DTSTAMP sent with the initial invitation, otherwise the text "not active" appears instead of the "delete from calendar" button.
This is a minimal working cancellation...
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//www.notilus.com//Dimo Gestion Notilus//FR
CALSCALE:GREGORIAN
METHOD:CANCEL
BEGIN:VEVENT
DTSTART:20140625T123000Z
SEQUENCE:1
STATUS:CANCELLED
UID:Kerry
END:VEVENT
END:VCALENDAR
I might need to set X-WR-RELCALID tag, according to this http://www.oesf.org/forum/index.php?act=Print&client=printer&f=63&t=2650
It states: "Before syncing for the first time, you MUST add a X-WR-RELCALID tag to the mycalendar.ics file, or else iCal will change the UID number of all entries, causing duplicates."
However I can't find any documentation on RELCALID tag in protocol https://www.rfc-editor.org/rfc/rfc2446
When I set X-WR-RELCALID, Outlook still creates duplicate events instead of removing those events.
Is there any documentation on X-WR-RELCALID? I can't find it.
I donĀ“t know if this helps, try setting SEQUENCE: 2
For me it worked by setting the X-WR-RELCALID tag in the header of the ics file. Then Outlook recognized the event as the same.
Outlook creates a duplicate event if you change the UID property.
You have to create another event with the same UID.
You should do these steps to delete the calendar event
UID must be same
Add METHOD:CANCEL
Add STATUS:CANCELLED
SEQUENCE must be greater than the created event

Update an event in Outlook 2007 with an iCalendar file

There is a previous thread with this question, and hints at an answer, but I could not get it to work.
I have an ICS file. It validates. It looks like this:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//WA//FRWEB//EN
BEGIN:VEVENT
UID:FRICAL201
SEQUENCE:0
DTSTAMP:20081108T151809Z
DTSTART:20081109T121200
SUMMARY:11/9/2008 12:12:00 PM TRIP FROM JFK AIRPORT (JFK)
LOCATION:JFK AIRPORT (JFK)
END:VEVENT
END:VCALENDAR
I double-click it and it goes into Outlook 2007 perfectly.
Then, I double-click another ICS file that looks like this:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//WA//FRWEB//EN
BEGIN:VEVENT
METHOD:REQUEST
UID:FRICAL201
SEQUENCE:1
DTSTAMP:20081108T161809Z
DTSTART:20081109T121300
SUMMARY:11/9/2008 12:13:00 PM TRIP FROM JFK AIRPORT (JFK)
LOCATION:JFK AIRPORT (JFK)
END:VEVENT
END:VCALENDAR
As explained in the rfc, the UID is the same and the sequence number is one greater, so I expect outlook to update my previous event entry, but all it does is insert a second one.
How can I formulate the ICS file so that Outlook knows to update the event? The original poster in the thread I referenced above said he got it to respond with METHOD and ORGANIZER but in my experience METHOD has no effect and ORGANIZER causes undesirable behavior where Outlook wants to email the event to someone. I just want it to update the calendar.
I got a hold of Tom Carter, the guy who started the original thread. He had a working example with a request followed by a cancellation. What I had wrong was my METHOD was inside my VEVENT when it should have been outside. So here is a working update!
Original:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//WA//FRWEB//EN
METHOD:REQUEST
BEGIN:VEVENT
UID:FRICAL201
SEQUENCE:0
DTSTAMP:20081108T151809Z
ORGANIZER:donotreply#test.com
DTSTART:20081109T121200
SUMMARY:11/9/2008 12:12:00 PM TRIP FROM JFK AIRPORT (JFK)
LOCATION:JFK AIRPORT (JFK)
END:VEVENT
END:VCALENDAR
Update:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//WA//FRWEB//EN
METHOD:REQUEST
BEGIN:VEVENT
UID:FRICAL201
SEQUENCE:1
DTSTAMP:20081108T161809Z
ORGANIZER:donotreply#test.com
DTSTART:20081109T121300
SUMMARY:11/9/2008 12:13:00 PM TRIP FROM JFK AIRPORT (JFK)
LOCATION:JFK AIRPORT (JFK)
END:VEVENT
END:VCALENDAR
All I did was add the request method (in the correct spot!), and an organizer.

Resources