ical4j: add organizer who is able to cancel an event? - calendar

I am using ical4j to send out emails with a calendar attachment. I am able to add an organizer based on this SO post: How should I use iCal4j to add a meeting organizer to an iCal event
event.getProperties().add(new Organizer("mailto:bob#example.com"));
The problem is that no attendees added to the calendar is able to cancel an event. If I create (manually, no ical4j) an calendar appointment in Outlook Online, I am able to cancel an event as shown below:
However, the email with an ical4j attachment I received as the organizer (see the above code example) only gives me three options: Yes, No, Maybe as shown below:
How can I make someone among an meeting's attendees be able to cancel the meeting?
------- Update 11/15 -------
Based on the suggestion from #fortuna, my program generated the following event. I am still unable to cancel an event.
BEGIN:VCALENDAR
PRODID:-//Events Calendar//iCal4j 3.0.1//EN
CALSCALE:GREGORIAN
METHOD:REQUEST
BEGIN:VEVENT
DTSTAMP:20211115T144506Z
DTSTART;TZID=America/New_York:20211215T110000
DTEND;TZID=America/New_York:20211215T114500
SUMMARY:ABC123 School
TZID:America/New_York
LOCATION:Virtual
UID:153ab747-bbd2-4964-9112-9fa0d29ed306
STATUS:CONFIRMED
ORGANIZER;ROLE=CHAIR:mailto:dev1#example.com
ATTENDEE;ROLE=REQ-PARTICIPANT:mailto:dev2#example.com
ATTENDEE;ROLE=REQ-PARTICIPANT:mailto:dev1#gmail.com
END:VEVENT
END:VCALENDAR
I manually generated an event in Outlook Online and forwarded it to my yahoo account to get the calendar attachment:
BEGIN:VCALENDAR
METHOD:REQUEST
PRODID:Microsoft Exchange Server 2010
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Eastern Standard Time
BEGIN:STANDARD
DTSTART:16010101T020000
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=11
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:16010101T020000
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=2SU;BYMONTH=3
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
ORGANIZER;CN="dev1":mailto:dev1#example.com
ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=dev2
g:mailto:dev2#yahoo.com
ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN="dev3"
:mailto:dev3#example.com
DESCRIPTION;LANGUAGE=en-US:\n\n\n________________________________________\n
From: dev1 <dev1#example.com>\nSent: Monday\, November 15\, 2021 8:5
2:23 AM (UTC-05:00) Eastern Time (US & Canada)\nTo: dev3\; dev1\,
\nSubject: test\, please ignore it.\nWhen: Monday\, N
ovember 22\, 2021 10:30 AM-11:00 AM.\nWhere:\n\ntest\n\n__________________
______________________________________________________________\nMicrosoft
Teams meeting\nJoin on your computer or mobile app\nClick here to join the
.....
cdd5fc5d11c&threadId=19_meeting_OGYzZjAdddxMjYtYYy00ZDE4LWE0NjctZjY4OTA0ZG
I0ZTQ4#thread.v2&messageId=0&language=en-US>\n____________________________
____________________________________________________\n
UID:040000008200E00074C5B7101A82E00800000000933C540328DAD701000000000000000
0100000001771BBC5CAD45B499CBF167EE077185B
SUMMARY;LANGUAGE=en-US:FW: another test for GRD\, please ignore it.
DTSTART;TZID=Eastern Standard Time:20211122T103000
DTEND;TZID=Eastern Standard Time:20211122T110000
CLASS:PUBLIC
PRIORITY:5
DTSTAMP:20211115T135223Z
TRANSP:OPAQUE
STATUS:CONFIRMED
SEQUENCE:0
LOCATION;LANGUAGE=en-US:
X-MICROSOFT-CDO-APPT-SEQUENCE:0
X-MICROSOFT-CDO-OWNERAPPTID:2119924365
X-MICROSOFT-CDO-BUSYSTATUS:TENTATIVE
X-MICROSOFT-CDO-INTENDEDSTATUS:BUSY
X-MICROSOFT-CDO-ALLDAYEVENT:FALSE
X-MICROSOFT-CDO-IMPORTANCE:1
X-MICROSOFT-CDO-INSTTYPE:0
X-MICROSOFT-ONLINEMEETINGINFORMATION:{"OnlineMeetingChannelId":null\,"Onlin
eMeetingProvider":3}
X-MICROSOFT-ONLINEMEETINGTOLLNUMBER:+1 571-429-6038
X-MICROSOFT-ONLINEMEETINGCONFERENCEID:475654328
X-MICROSOFT-SKYPETEAMSMEETINGURL:https://teams.microsoft.com/l/meetup-join/
19%3ameeting_OGYzZjAxMjYtYzFlYy00ZDE4LWE0NjctZjY4OTA0ZGI0ZTQ4%40thread.v2/
0?context=%7b%22Tid%22%3a989b5e2ddda-14e4-4efe-93b7-8cdd5fc5d11c%22%2c%22O
id%22%3a%2256f6a1be-b722-47fd-b69c-5950f281818f%22%7d
X-MICROSOFT-SCHEDULINGSERVICEUPDATEURL:https://api.scheduler.teams.microsof
t.com/teams/989b5e2a-14e4-4efe-9ddd5fsasdfc5d11c/56f6a1be-b722-47fd-b69c-5
950f281818f/19_meeting_OGYzZjddYtYzFl4Ysa00ZDE4LWE0NjctZjY4OTA0ZGI0ZTQ4#th
read.v2/0
X-MICROSOFT-SKYPETEAMSPROPERTIES:{"cid":"19:meeting_OGYzZjAxMjYtYzFlYy00ZDE
4LWE0NjctZjY4OTA0ZGI0ZTQ4#thread.v2"\,"rid":0\,"mid":0\,"uid":null\,"priva
te":true\,"type":0}
X-MICROSOFT-ONLINEMEETINGCONFLINK:conf:sip:dev1#example.com\;gruu\;opaque=app:
conf:focus:id:teams:2:0!19:meeting_OGYzZxAxMjYtdasYzFlYy00Z4LWE0NjctZjY4OTA
0ZGI0ZTQ4-thread.v2!56f6a1beb72247fdb69c5818dasdfsadf!989b5e2a14e44efe93b78
cdd5fc5d11c
X-MICROSOFT-DONOTFORWARDMEETING:FALSE
X-MICROSOFT-DISALLOW-COUNTER:FALSE
X-MICROSOFT-LOCATIONS:[]
BEGIN:VALARM
DESCRIPTION:REMINDER
TRIGGER;RELATED=START:-PT15M
ACTION:DISPLAY
END:VALARM
END:VEVENT
END:VCALENDAR

I suspect you may need to add something like a participation role to your organizer property:
https://datatracker.ietf.org/doc/html/rfc5545#section-3.2.16
e.g. ORGANIZER;ROLE=CHAIR:bob#example.com
Another way to find out how Outlook does it is to forward the event "as icalendar" to another email address and inspect the ".ics" attachment.

Related

Setting VTIMEZONE tags breaks my ICS file

I have created an ICS file that I include in my emails through my web app, the times specified are in UTC time, this needs to be applied as in my testing it appears the Calendar client will assume the timezone is the users local time.
Here is what my ICS file looks like:
BEGIN:VCALENDAR
BEGIN:VTIMEZONE
TZID:UTC
BEGIN:VEVENT
UID:a0F8E00000oWo53UAC
DTSTART:20200814T194500
DTEND:20200814T204500
SUMMARY:Your Appointment - Appointment Name Here
LOCATION:123 Fake Street, New York, New York, 1234
DESCRIPTION:
ORGANIZER;CN=:MAILTO:
BEGIN:VALARM
TRIGGER:-PT1H
ACTION:DISPLAY
END:VALARM
END:VEVENT
END:VTIMEZONE
BEGIN:VTIMEZONE
TZID:UTC
BEGIN:VEVENT
UID:a0F8E00000oWo59UAC
DTSTART:20200814T220000
DTEND:20200814T230000
SUMMARY:Your Appointment - Appointment Name Here
LOCATION:123 Fake Street, New York, New York, 1234
DESCRIPTION:
ORGANIZER;CN=:MAILTO:
BEGIN:VALARM
TRIGGER:-PT1H
ACTION:DISPLAY
END:VALARM
END:VEVENT
END:VTIMEZONE
END:VCALENDAR
I have added VTIMEZONE tags around my EVENT node. I have also specified the timezone at the top like TZID:UTC.
This doesn't appear to work. Can someone help me correct this?
The VEVENT component must not be inside of the VTIMEZONE component!
Specify a timestamp's timezone like so:
DTSTART;TZID=UTC:20200814T194500

In ICS calender file my meeting gets created for all the attendee but it is not getting created for organizer?

I am trying to generate an ICS file but the problem I am facing is that whenever ICS files is opened in mail via organizer himself the wont will not get added in calender and throw the following error-
Error Displayed is Couldn't Import Calender Try Again Later(You can see it in top left corner of pop-up).
But the same problem is not faced by attendee and they are able to add this meeting successfully
Issue only arise in case of organizer only.
Here organizer is--->
aman.prakash#truminds.com
And attendee is---->
shubham.singh#truminds.com
My ICS File--->
BEGIN:VTIMEZONE
TZID:UTC
BEGIN:STANDARD
DTSTART:20200702T084006
TZOFFSETFROM:-0000
TZOFFSETTO:-0000
END:STANDARD
X-LIC-LOCATION:UTC
BEGIN:DAYLIGHT
DTSTART:20200702T084006
TZOFFSETFROM:-0000
TZOFFSETTO:-0000
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
ORGANIZER;CN=Aman.Prakash#truminds.com:MAILTO:Aman.Prakash#truminds.com
DESCRIPTION;LANGUAGE=en-US:
X-ALT-DESC;FMTTYPE=text/html:<span style="font-size:18px;display:block;">Join Online Meeting</span><br /><span style="display:block;">https://XXXXXXXXXX/000690843<span>
UID:000690843
SUMMARY;LANGUAGE=en-US:ICS 5
DTSTART;TZID=UTC:20200702T090900
DTEND;TZID=UTC:20200702T092400
DTSTAMP:20200702T084006Z
CLASS:PUBLIC
LOCATION:HDVC meeting
ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=CHAIR;PARTSTAT=ACCEPTED;RSVP=TRUE;CN=Aman.Prakash#truminds.com;X-NUM-GUESTS=0:MAILTO:Aman.Prakash#truminds.com
ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=shubham.singh#truminds.com;X-NUM-GUESTS=0:MAILTO:shubham.singh#truminds.com
TRANSP:OPAQUE
PRIORITY:5
STATUS:CONFIRMED
SEQUENCE:0
BEGIN:VALARM
DESCRIPTION:REMINDER
TRIGGER;RELATED=START:-PT15M
ACTION:DISPLAY
END:VALARM
END:VEVENT
I tried many things like-->
I added organizer as an attendee
I tried role of that attendee as CHAIR and REQ-PARTICIPANT
Nothing seem to help.
Guys please help me to find solution for this.

Cronofy ics file smart invite not working

Hi I am using cronofy smart invites to create ics calendar file for scheduling meetings in my java applications
but when I cancel the meeting the ics file is not supported by outlook
its working fine for google and other clients.
the cancel ics file content is :
Event iCalendar in cancel :-
"BEGIN:
VCALENDAR
VERSION:2.0
PRODID:-//Cronofy//Cronofy0.1//EN
CALSCALE:GREGORIAN
METHOD:CANCEL
BEGIN:VEVENT
DTSTAMP:20200629T133045Z
UID:uid>#invite.cronofy.com
DTSTART:20200709T053000Z
DTEND:20200709T063000Z
DESCRIPTION:Calender test
LAST-MODIFIED:20200629T133000Z
LOCATION:Test Loaction\\, USA
ORGANIZER;CN=cooksmart Notification:mailto:DoNotReply#cooksmart.com
SEQUENCE:4
STATUS:CANCELLED
SUMMARY:Calender test
TRANSP:OPAQUE
ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;X-NUM-GUESTS=0:mailto:<myEmailId>
END:VEVENT
END:VCALENDAR"
Event iCalender in create :-
"BEGIN:
VCALENDAR
VERSION:2.0
PRODID:-//Cronofy//Cronofy 0.1//EN
CALSCALE:GREGORIAN
METHOD:REQUEST
BEGIN:VEVENT
DTSTAMP:20200629T133014Z
UID:<uid>#invite.cronofy.com
DTSTART:20200709T053000Z
DTEND:20200709T063000Z
DESCRIPTION:Calender test
LAST-MODIFIED:20200629T133000Z
LOCATION:Test Loaction, USA
ORGANIZER;CN=cooksmart Notification:mailto:DoNotReply#cooksmart.com
SEQUENCE:3
STATUS:CONFIRMED
SUMMARY:Calender test
TRANSP:OPAQUE
ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;X-NUM -GUESTS=0;RSVP=TRUE:mailto:<myEmailId>
END:VEVENT
END:VCALENDAR"
I have added header as
request.setHeader("Content-Class", "urn:content- classes:calendarmessage");
request.setHeader("Content-ID", "calendar_message");
The ICS content looks valid, so it could be the format of the email it's attached to.
The iMIP best practices describe the best structure for iCalendar attachments to ensure they can be parsed by most email clients. Using that structure should help Outlook parse the email and attached ICS.
Edit: It's also worth looking at the Cronofy documentation about sending invites for some code examples, or contacting Cronofy support directly.

Store data in Custom Fields or attachment in ics iCal file

I need to give my manually built iCal file (.ics) some additional infos which I actually don't want to be visible for Calendar app users. Thus I need to be able to set them manually when creating an Event in an iOS application and (later) reading them from the Calendar events.
I was wondering whether it is possible to add custom fields / attributes to a iCal / .ics file itself (not by using a calendar application!). They shall not be displayed in a Calendar application but accessible for me as a mobile app developer to store IDs, references, anything when I read them out from a calendar on the device... Until now the only possibility seems to be storing those vales as description / notes, but I'm definitely not happy with that!
Is there any possibilltity? Neither could I achieve it by now nor did I find anything useful on the internet...
As an alternative, I was thinking about using the Attachment function of iCal, which - unfortunately - is visible for invited persons and the organizer himself and may not be editable / updated when edited...
Thanks in advance!
Below: ics example date
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Apple Inc.//Mac OS X 10.12.2//EN
CALSCALE:GREGORIAN
BEGIN:VTIMEZONE
TZID:Europe/Berlin
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
DTSTART:19810329T020000
TZNAME:MESZ
TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0200
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
DTSTART:19961027T030000
TZNAME:MEZ
TZOFFSETTO:+0100
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
CREATED:20170330T114118Z
UID:38F0C7FE-9711-437F-A5FE-E670E97C6766
DTEND;TZID=Europe/Berlin:20170330T160000
TRANSP:OPAQUE
ATTENDEE;CN="John Doe";CUTYPE=INDIVIDUAL;EMAIL="john#doe.de";PAR
TSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:john#doe.de
X-APPLE-TRAVEL-ADVISORY-BEHAVIOR:AUTOMATIC
SUMMARY:iCal Test100
CUSTOM:*** WHAT I WOULD NEED ***
DTSTART;TZID=Europe/Berlin:20170330T153000
DTSTAMP:20170330T114208Z
ORGANIZER;CN="Jon Doh":mailto:Jon#Doh.de
SEQUENCE:0
END:VEVENT
END:VCALENDAR
You can define your own properties and parameters. Just make sure they start with "X-". For example:
BEGIN:VEVENT
UID;X-FOO=bar:38F0C7FE-9711-437F-A5FE-E670E97C6766
X-SUPER-SECRET:abc123
...
END:VEVENT

icalendar two and more events together via JavaMail

I tried to put two events together in one ICS. To do this I helped an example put on this forum:
(...)
BEGIN:VCALENDAR
PRODID:-//bobbin v0.1//NONSGML iCal Writer//EN
VERSION:2.0
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VEVENT
DTSTART:20100701T080000Z
DTEND:20100701T110000Z
DTSTAMP:20091130T213238Z
UID:1285935469767a7c7c1a9b3f0df8003a#yoursever.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:20100701T120000Z
DTEND:20100701T130000Z
DTSTAMP:20091130T213238Z
UID:1285935469767a7c7c1a9b3f0df8003b#yoursever.com
CREATED:20091130T213238Z
DESCRIPTION:Example event 2
LAST-MODIFIED:20091130T213238Z
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:Example event 2
TRANSP:OPAQUE
END:VEVENT
END:VCALENDAR
(...)
The result was that the invitation noticed inside the calendar only first event, the second was omitted.
What was wrong?
I observed the same result in Outlook and Gmail.
if you want to import many events :
To gmail , you could implement the api of gmail calendar ,
To outlook , you can alter the icalendar method to "publish" , and it would create new calendar , the new calendar will include many events
if you send just an appointment , that would not be a problem , but if you have many appointments, it would be a problem , because its weird if you include many events in an email or you send per appointment per mail

Resources