ics not updating organizer calendar - outlook

I am writing an application that will send out .ics files to be interpreted mainly by outlook. When my applications sends an update, it will successfully update everyone's calendar except for the organizer's calendar. I'm using the same UID and I'm incrementing SEQUENCE each time. Is there anything else that I'm missing in my ICS file or does it not update my calendar because I am the organizer?
Below is an example of the ics code that we're using:
BEGIN:VCALENDAR
PRODID:-//Microsoft Corporation//Outlook 16.0 MIMEDIR//EN
VERSION:2.0
METHOD:REQUEST
X-MS-OLK-FORCEINSPECTOROPEN:TRUE
BEGIN:VTIMEZONE
TZID:Eastern Standard Time
BEGIN:STANDARD
DTSTART:16011104T020000
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:16010311T020000
RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
ATTENDEE;CN='test';RSVP=TRUE:mailto:test#testing.com
ATTENDEE;CN='attendee';RSVP=TRUE:mailto:attendee#attendees.com
CLASS:PUBLIC
CREATED:20180628T182531Z
DTSTART;TZID=Eastern Standard Time:20180630T141500
DTEND;TZID=Eastern Standard Time:20180630T160000
DTSTAMP:20180628T182531Z
LAST-MODIFIED:20180628T182531Z
LOCATION:some place
ORGANIZER;CN=Conference Room Board:mailto:test#testing.com
PRIORITY:5
SEQUENCE:1
SUMMARY;LANGUAGE=en-us:test
TRANSP:OPAQUE
UID:SomeUniqueUID
CREATED:20180628T182531Z
DESCRIPTION:Test
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
X-MICROSOFT-CDO-IMPORTANCE:1
X-MICROSOFT-DISALLOW-COUNTER:FALSE
X-MS-OLK-AUTOFILLLOCATION:TRUE
X-MS-OLK-CONFTYPE:0
END:VEVENT
END:VCALENDAR
Thanks for any help!

This is expected. As the organiser, your client assumes that only itself is in control of invitation. As such it ignores invitations sent by other parties.
You may want to make the organiser also an ATTENDEE but there is no guarantee that this will work.
See Change event description for organizer using VCalendar and When creating an iCal event on behalf of an organizer and email it to him, no "Add to calendar" or "RSVP" wrappers appear

So, you guys are correct and this is expected behavior. I tried adding the organiser as an attendee and ended up running into problems when I tried to create an event cancellation. The organiser would receive the email but be unable to remove from calendar because they were recognized as the organizer.
I ended up abandoning using ICS files and instead started using a library that communicates through Exchange Web Services. EWS allowed me to simulate creating a meeting on someone's calendar through an API and then adding attendees just like I created the meeting in Outlook. Specifically, I was using python so I started using Exchangelib.
I wanted to put an answer to this question for anyone else that may stumble upon this.

Related

ICal not updating existing event

I have created two ical files, one is ical with method:request, and another one is ical with method cancel. When I import them into my outlook calendar, both of them are creating new event.(If I specify the meeting with the status:CANCELLED it is not updating the existing one, but it's creating new one with cancelled status). Both of the icals have the same UID. Do You know how to change that? Or how to update existing meeting via ical file in outlook. However on google calendar everything works as expected, so I am curious whether outlook has some strange behaviour specified for ical files.
BEGIN:VCALENDAR
METHOD:REQUEST/CANCEL(in cancel ical)
PRODID:prod
VERSION:2.0
CALSCALE:GREGORIAN
BEGIN:VTIMEZONE
TZID:Europe/Warsaw
X-LIC-LOCATION:Europe/Warsaw
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
TZNAME:CEST
DTSTART:19700329T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
TZNAME:CET
DTSTART:19701025T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
DTSTART;TZID=Europe/Warsaw:20191231T160000
DTEND;TZID=Europe/Warsaw:20191231T170000
LOCATION:Loc
SUMMARY:summ
DESCRIPTION:description
SEQUENCE:0/1 (in cancel ical)
CLASS:PUBLIC
UID:SAME_UID
DTSTAMP:20191227T090501Z
END:VEVENT
END:VCALENDAR
According to the Spec https://www.rfc-editor.org/rfc/rfc2446#section-3.2.5, a CANCEL to a REQUEST, must include all the attendees:
ATTENDEE 0+ MUST include all "Attendees" being removed
the event. MUST include all "Attendees" if
the entire event is cancelled.
If you don't have attendees, a PUBLISH may be more appropriate. Then any items you remove in this published feed, are removed from the calendar.

Outlook fails to recognize custom UID in .ics file, creates new event (and new id)

What I am trying to do:
I have a need to send my clients .ics files that will populate their Outlook calendars as soon as they download and double click (and choose to populate their Outlook calendar).
When I am testing locally, the iCalendar code below works fine if I set Outlook to work offline - a UID is generated once for each event, I can use the same file again and again and a new event will not be generated - as the UID is recognized by Outlook as already existing. (so I can rely on the UID to update, and cancel as well)
The issue is that when I work with an online Outlook, a random UID (112 characters long) is generated every time I use the file to populate the calendar - even for the same events - so a duplicate event is generated every time!
Example for an .ics file:
BEGIN:VCALENDAR
VERSION:2.0
METHOD:PUBLISH
PRODID:-//PYVOBJECT//NONSGML Version 1//EN
BEGIN:VEVENT
UID:12345
DTSTART:20190715T020222Z
DTEND:20190715T030222Z
DESCRIPTION:Some fake summary - first event
DTSTAMP:20190715T010222Z
SEQUENCE:0
SUMMARY:this is the first event summary
END:VEVENT
BEGIN:VEVENT
UID:67890
DTSTART:20190715T040222Z
DTEND:20190715T050222Z
DESCRIPTION:Some fake summary - second event
DTSTAMP:20190715T010222Z
SEQUENCE:0
SUMMARY:this is the second event summary
END:VEVENT
END:VCALENDAR
If I generate an .ics file for the first event that was generated when Outlook is online (dragging and dropping out of the calendar) I see that Outlook has added a bunch of new fields:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Microsoft Corporation//Outlook for Mac MIMEDIR//EN
METHOD:PUBLISH
BEGIN:VTIMEZONE
TZID:Pacific Time (US & Canada)
X-ENTOURAGE-CFTIMEZONE:US/Pacific
X-ENTOURAGE-TZID:1
BEGIN:STANDARD
RRULE:FREQ=YEARLY;INTERVAL=1;BYSECOND=0;BYMINUTE=0;BYHOUR=2;BYDAY=1SU;BYMONTH=11
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
DTSTART:20071104T020000
END:STANDARD
BEGIN:DAYLIGHT
RRULE:FREQ=YEARLY;INTERVAL=1;BYSECOND=0;BYMINUTE=0;BYHOUR=2;BYDAY=2SU;BYMONTH=3
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
DTSTART:20070311T020000
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
UID:<a NEW 112 character id - NOT the one I added myself>
X-ENTOURAGE_UUID:81760164-FB2C-4421-B7AC-2E1791265F0A
X-MICROSOFT-EXCHANGE-ID:<base64, 140 character id>
X-MICROSOFT-EXCHANGE-CHANGEKEY:<base64, 32 character id>
DTSTAMP:20190715T023949Z
DTSTART;TZID="Pacific Time (US & Canada)":20190714T190200
DTEND;TZID="Pacific Time (US & Canada)":20190714T200200
LAST-MODIFIED:20190715T023949Z
SUMMARY:this is the first event summary
DESCRIPTION:Some fake summary - first event
ORGANIZER:MAILTO:<the real account owner email - my email>
SEQUENCE:0
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
X-MICROSOFT-CDO-ALLDAYEVENT:FALSE
X-MICROSOFT-DISALLOW-COUNTER:TRUE
X-MICROSOFT-DONOTFORWARDMEETING:FALSE
X-MICROSOFT-CDO-INSTTYPE:0
END:VEVENT
END:VCALENDAR
What I tried:
Modified: METHOD:REQUEST
Added X-WR-RELCALID:some_unique_id from this post
Sequence does not seem to help - it is only there to sort out if 2 UIDs are the same within the same file
I added ORGANIZER;CN=Fable mail:MAILTO:fable.mail#example.com to each event - it has the same issue as the UID, and is disregarded (my email is added as the organizer)
I added ATTENDEE:MAILTO:somemail#email.com as suggested in this post, but it does not seem to make any difference
Is it because I am not using the recommended standard for the UID? It seems like a suggestion to prevent collisions, nothing more.
Thank you!
The problem still persists on latest Outlook 2019 from Office 365.
Even Microsoft support suggests to add this as feature request to the outlook suggestion box. (see here: https://answers.microsoft.com/en-us/msoffice/forum/all/ics-file-does-not-update-event/38548f62-d9cd-4b85-8d3e-65217d4e8f50)
Others suggest to create an application which communicates with outlook and synchronizes the calendar entries by this way. But in my opinion this is a too heavy solution for such a small problem.
When you upload the .ics file to outlook live via the desktop browser, I have used edge mobile set as desktop for this, and select add calendar in the expanded left sidebar followed by upload from file in the following selection menu the UID replacement does not take place.
P.S. Entering the data via outlook mail replaced the UIDs even if they did comply to the official recommendations in the specification.

Opening ICS file with multiple events creates new calendar in Outlook

I would like to be able to create an ICS file with multiple events that user will be able to import in their default Exchange Calendar. I need to support Outlook desktop client, Office 365 web interface and Apple iPhone Mail/Calendar.
Note that issue only occurs with ICS files that contain multiple events. Single event ICS works as expected.
Following multi-event ICS file:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//bobbin v0.1//NONSGML iCal Writer//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VEVENT
DTSTART:20180327T080000Z
DTEND:20180327T110000Z
DTSTAMP:20091130T213238Z
UID:1285935469767a7c7c1a9b3f0df8003a#yourserver.com
CREATED:20091130T213238Z
DESCRIPTION:Example event 1
LAST-MODIFIED:20091130T213238Z
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:Example event 1
TRANSP:OPAQUE
END:VEVENT
BEGIN:VEVENT
DTSTART:20180328T120000Z
DTEND:20180328T130000Z
DTSTAMP:20091130T213238Z
UID:1285935469767a7c7c1a9b3f0df8003b#yourserver.com
CREATED:20091130T213238Z
DESCRIPTION:Example event 2
LAST-MODIFIED:20091130T213238Z
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:Example event 2
TRANSP:OPAQUE
END:VEVENT
END:VCALENDAR
works fine in Office 365 web interface and Apple iPhone Mail/Calendar. However, when it is imported in Outlook 2016 it creates a new "Untitled" Calendar and puts events in it instead of default user calendar.
This seems to be a known issue referenced previously on SO:
ICal import creates new calendar When Open the ics file
Have ICS file with multiple events save to my Calendar, not Other Calendars
Answers range from "it cannot be done" to the opposite.
One of the posts in the first link mentions removing X-WR-CALNAME from ICS fixes the problem. I never had this in ICS to begin with.
Another post on the same page mentions that adding X-WR-RELCALID:XXXXXX fixes it. I tried putting it in and it makes no difference at all. I am not sure if value for X-WR-RELCALID should be set to something specific - I just set it to some GUID.
If someone successfully resolved it - can you post an ICS sample and what version of Outlook did it work with?

ical validates but Exchange server rejects

I'm running out of ideas on what to change to make Exchange accept this ical. Unfortunately, we don't get any messages indicating what is wrong. Last modification was to remove RDATE tags. I thought that resolved the problem, but now this sample is being rejected
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Our/Product Identifier
CALSCALE:GREGORIAN
METHOD:REPLY
BEGIN:VTIMEZONE
TZID:America/Chicago
BEGIN:STANDARD
DTSTART:20151101T010000
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:20150308T030000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
CREATED:20150715T195751Z
DTSTAMP:20150715T200023Z
LAST-MODIFIED:20150715T200023Z
UID:04000CE00800000838BFD0010000008200E0007400000005B000B2561887101A8200000
010045B0263C63E600CED48900C71000645920EFD
SUMMARY:Test new event
LOCATION:office
DTSTART:20150715T200000Z
DTEND:20150715T210000Z
ORGANIZER;CN=Foo;RSVP=TRUE;PARTSTAT=ACCEPTED;ROLE=CHAIR:mailto:Foo#ba
r.com
STATUS:CONFIRMED
TRANSP:OPAQUE
SEQUENCE:0
END:VEVENT
END:VCALENDAR
It passes all the online ical validators I've tried. This ical is generated in response to a meeting invitation. The meeting invitation is handled without a problem, except that this ical attachment is rejected by the exchange server.
If this is a REPLY to an invitation, then you should have an ATTENDEE property corresponding to the attendee on behalf of whom this REPLY is generated, and an ORGANIZER. See https://www.rfc-editor.org/rfc/rfc5546#section-3.2.3 for the full list of mandatory fields in a REPLY.
It looks like you are mixing the ORGANIZER and ATTENDEE here:
ORGANIZER;CN=Foo;RSVP=TRUE;PARTSTAT=ACCEPTED;ROLE=CHAIR:mailto:Foo#bar.com
Assuming that Foo#bar.com is the attendee who is replying, you should instead have
ATTENDEE;CN=Foo;RSVP=TRUE;PARTSTAT=ACCEPTED;ROLE=CHAIR:mailto:Foo#bar.com
and you should have an ORGANIZER with the same value as in the invitation.
You may want to show us the original invitation to which you are trying to reply to as there are other properties which are linked to the original invitation.

ICS file in Outlook gives "The operation failed." only if I try to Accept/Tentative/Decline before saving

We are creating an iCalendar .ics file in our system so our users can add an appointment to Outlook. A new requirement is that we have the Accept/Tentative/Decline options show up in Outlook along with RSVPs. I am able to achieve this by adding ATTENDEE and ORGANIZER lines to the .ics as follows:
ATTENDEE;RSVP=TRUE:
ORGANIZER;CN="Test Organizer":mailto:test#test.com
However, I'm running into a particular situation where Outlook returns "The operation failed." When I first open the .ics in Outlook, BEFORE it is actually saved into my calendar, if I click Accept/Tentative/Decline at that point, I get "The operation failed." If I do it AFTER it is saved into my calendar, then it works fine (RSVPs send if I delete it, and Accept/Tentative/Decline work exactly as expected). Here is video of that: http://screencast.com/t/BBUzYRwCJ
What am I doing wrong? Have I omitted something important from the .ics file? Here is the full file, which works great except for this one situation:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//ICSTestCS/
CALSCALE:GREGORIAN
BEGIN:VTIMEZONE
TZID:Europe/London
BEGIN:STANDARD
DTSTART:20071104T020000
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
TZOFFSETFROM:0300
TZOFFSETTO:0200
TZNAME:GMT
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:20070311T020000
RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
TZOFFSETFROM:0200
TZOFFSETTO:0300
TZNAME:GMT
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
ATTENDEE;RSVP=TRUE:
ORGANIZER;CN="Test Organizer":mailto:test#test.com
DTSTART;TZID=Europe/London:20140522T090000
DTEND;TZID=Europe/London:20140522T103000
SUMMARY:Test Course
DESCRIPTION;ENCODING=QUOTED-PRINTABLE:Test Course Description
LOCATION:Test Office
UID:1
SEQUENCE:0
DTSTAMP:20140522T090000
END:VEVENT
END:VCALENDAR
I seem to have resolved my issue by including:
METHOD:REQUEST
at the top of the file under VERSION:2.0
You should have a mailto: uri as the ATTENDEE value, e.g.
ATTENDEE;RSVP=TRUE:someattendee#test.com

Resources