I am attempting to send out .ics calendar event files which can be downloaded by users and saved to their Outlook calendars. The calendar event needs to appear as “Free” in Outlook. Below is a sample of the .ics event currently being sent out:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:http://company.ical.cls
BEGIN:VEVENT
DTSTART:20180425
SUMMARY:PTO for Babcock, Michael (22.5hrs)
DTEND:20180428
FREEBUSY:FREE
END:VEVENT
END:VCALENDAR
When an Outlook for Windows user downloads the above file and opens it in their Outlook calendar, the event appears correctly as Free time.
When an Outlook for Mac user downloads the above file it creates a new email with the .ics file attached.
To try to correct the problem for Mac users, I edited the FREEBUSY keyword several times to appear as:
FBTYPE:FREE:20180425T000000Z/20180428T000000Z
FBTYPE:20180426T000000Z/20180429T000000Z
FREEBUSY;FBTYPE=FREE:20180416T133000Z/20180429T170000Z
Outlook for Mac users could download the file with one of those new FreeBusy keywords and open it in their calendar, but it always appears as Busy. The strange thing is, if they open the file with the modified keyword on a Windows computer first, then the appointment appears as free on both Windows and Mac Outlook.
Has anyone found a FreeBusy keyword that allows Outlook for Mac users to see .ics calendar appointments as Free?
The 'Freebusy' component is VFREEBUSY, not VEVENT. Please see the RFC5545 specification. https://www.rfc-editor.org/rfc/rfc5545#section-3.6.4
VFREEBUSY cannot be nested under VEVENT. Also it does NOT say that FREEBUSY property can be used in VEVENT. The spec at https://www.rfc-editor.org/rfc/rfc5545#section-3.8.2.6 says:
FREEBUSY..... Conformance: The property can be specified in a
"VFREEBUSY" calendar
component.
...
The following is an example of a "VFREEBUSY" calendar component
used to publish busy time information:
BEGIN:VFREEBUSY
UID:19970901T115957Z-76A912#example.com
DTSTAMP:19970901T120000Z
ORGANIZER:jsmith#example.com
DTSTART:19980313T141711Z
DTEND:19980410T141711Z
FREEBUSY:19980314T233000Z/19980315T003000Z
FREEBUSY:19980316T153000Z/19980316T163000Z
FREEBUSY:19980318T030000Z/19980318T040000Z
URL:http://www.example.com/calendar/busytime/jsmith.ifb
END:VFREEBUSY
FREEBUSY is for requesting/responding/publishing availability windows.
To make the event appear in the calendar with the Free/Busy flag set to Free, use TRANSP:TRANSPARENT and X-MICROSOFT-CDO-BUSYSTATUS:FREE
For example:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:http://company.ical.cls
BEGIN:VEVENT
DTSTART:20180425
SUMMARY:PTO for Babcock, Michael (22.5hrs)
DTEND:20180428
TRANSP:TRANSPARENT
X-MICROSOFT-CDO-BUSYSTATUS:FREE
END:VEVENT
END:VCALENDAR
Related
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.
If I download my generated ICS file and import into Outlook as as a file (essentially just creating a snapshot) then the VALARM I have set works correctly.
What I want is a ical feed that will synchronize with the server. So when I create an Internet Calendar (Add/Open Calendar -> From Internet) using my ICS file URL all the events are created correctly and synchronizing works, but the VALARM is ignored and not set
BEGIN:VCALENDAR
VERSION:2.0
PRODID:Appointment Calendar
METHOD:PUBLISH
SOURCE:ICAL-URL
X-WR-CALNAME:Appointments
X-WR-CALDESC:Calendar
BEGIN:VEVENT
UID:84fbfa16-ab3a-4313-b98b-638da09a8a1c
DTSTAMP:20190107T190135Z
SUMMARY:My Event
DTSTART:20190109T183000Z
DTEND:20190109T184500Z
CATEGORIES:Red Category
BEGIN:VALARM
ACTION:DISPLAY
TRIGGER:-PT15M
DESCRIPTION:Alert
END:VALARM
END:VEVENT
END:VCALENDAR
Am I doing something wrong or is VALARM not supported for internet calendars in outlook? When I do this in Thunderbird w/ Lightning plug-in then it works great. So I'm assuming there is some MS specific formatting I'm missing?
I am using Outlook 2016 for my testing. I read that some people have success with logging into Office365 and importing calendars from the dashboard but this did not work for me either. I have tried formatting my URL with both http:// and webcal://
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?
This question relates to a question I asked previously (Importing .ics into Calendar on Mac (El Capitan) breaks connection to Exchange Server). I have written a Python script to generate an .ics file that can be used to transfer calendar events into an Exchange calendar in the Calendar app on MacOSX (El Capitan). The .ics file produced validates using http://severinghaus.org/projects/icv/. The events are imported into a separate calendar rather than into the default Exchange calendar and appear in Calendar as expected. However, after importing the events, Calendar is unable to sync the events to Exchange Server. This is particularly noticeable if I try to add an invitee; immediately, I get an error message saying that:
Calendar can’t save the event “event name” to the Exchange server.
There was an error attempting to send your changes to the exchange server.
After lots of faffing around, it seems that including a LOCATION field in the .ics file stops Calendar communicating with Exchange Server.
So, for example, the following .ics file will import an event into an Exchange calendar (perhaps called 'tempcal') in the Calendar app but the event isn't synced with the Exchange server and I can't then add an invitee:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Python iCalendar timetable//
BEGIN:VEVENT
SUMMARY:COURSE XYZ 2016-17 LECTURE 1
DTSTART;TZID=Europe/London;VALUE=DATE-TIME:20161011T160000
DTEND;TZID=Europe/London;VALUE=DATE-TIME:20161011T170000
DTSTAMP;VALUE=DATE-TIME:20160923T021716Z
UID:20161011160000/Introduction to my course#example.com
LOCATION:TBA
END:VEVENT
END:VCALENDAR
...whereas the following .ics file works fine:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Python iCalendar timetable//
BEGIN:VEVENT
SUMMARY:COURSE XYZ 2016-17 LECTURE 1
DTSTART;TZID=Europe/London;VALUE=DATE-TIME:20161011T160000
DTEND;TZID=Europe/London;VALUE=DATE-TIME:20161011T170000
DTSTAMP;VALUE=DATE-TIME:20160923T021716Z
UID:20161011160000/Introduction to my course#example.com
END:VEVENT
END:VCALENDAR
This seems like utter madness from where I'm standing. Can anyone offer an explanation of what's going on? Perhaps more importantly, is there anything I can do to sort this out at my end (i.e. on the Mac) or do I need to get IT Support to sort is out at the Exchange Server end (and, if so, what should they do?)
Not sure if this will help, but the validator at http://icalendar.org/validator.html complains about an invalid TZID value. The "Europe/London" timezone needs to be defined in a VTIMEZONE section.
The other thing to verify is at the end of every line has a CR LF, which is a requirement for the icalendar standard.
Our java application generates ICalendar files using ical4j, and sends them out to users as part of an HTML e-mail notification. A couple of users (the Organizers of the meeting) report that the the "Accept", "Reject", etc. buttons for the meeting are grayed out, and unclickable. The meeting is not added to the Organizer's calendar.
How can I force the meeting to be added for the Organizer?
I configured the server temporarily to send the .ics file as an attachment (instead of inline), so that I could run it through a web-based ICalendar validator. The validator gave me a warning that the Version property was supposed to be the first property, but didn't find any other problems.
The ICalendar works normally for every user except the organizer.
I was able to reproduce the issue on my own Outlook account. I noticed that if I send the meeting notice through a gmail mail server, it works normally; but, when it comes from our internal Outlook server, it doesn't get added to the calendar.
A message is shown underneath the grayed-out meeting controls: "As the meeting organizer, you do not need to respond to this meeting."
Example ICalendar file generated by our system:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//MyCompany//Product//EN
CALSCALE:GREGORIAN
METHOD:REQUEST
BEGIN:VEVENT
DTSTAMP:20101202T210423Z
UID:77B17E9B-BE02-476E-816B-ED9558EE7D2A
DTSTART:20101230T133000
DTEND:20101230T143000
SUMMARY:Review Meeting for A1 CI Review #123456
LOCATION:BLDG - 123
CREATED:20101202T210423Z
LAST-MODIFIED:20101202T210423Z
TZID:America/New_York
ORGANIZER;CN="ORGANIZER, THE";SENT-BY="mailto:noemail#mycompany.com":mailto:myemail#mycompany.com
ATTENDEE;ROLE=REQ-PARTICIPANT;CN="ATTENDEE, SOME":mailto:noemail#mycompany.com
END:VEVENT
END:VCALENDAR
Edit:
I tried adding the meeting organizer as an "Optional to" participant. No dice; same behavior.
Edited the question again to reflect my progress on the issue.
It looks like this issue might be solvable by applying a HotFix to Outlook.
Description of the Outlook 2007 post-Service Pack 1 hotfix package: January 28, 2008
It seems it could be related to setting ExtractOrganizedMeetings in the registry. Worth a try.
See:
You cannot accept an invitation that
is in a third-party calendar format
in Outlook 2007
As the meeting organizer, you cannot
accept a meeting request in Outlook
2007 if you used a public Calendar
for the meeting that you created
Add an ORGANIZER to the ICS file. Apparently Outlook 2007 assumes the organizer is the current user whereas previous versions did not.