How to update ICS calendar meeting? - calendar

I am trying to generate .ics files which I want to send as attachments to customers. For some reason, if meeting is rescheduled, it is not updated neither in google calendar nor in Calendar app on mac OS.
Here is a meeting.ics with SEQUENCE:1:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//example.com//Appointment v1.0//EN
METHOD:REQUEST
BEGIN:VEVENT
UID:citfslfcd0001hx61sjcqqp4q
SEQUENCE:1
DTSTAMP:20160923T151743
DTSTART:20160923T211500
ATTENDEE:;CN="user1";RSVP=FALSE:mailto:user1#example.com
ATTENDEE:;CN="user2";RSVP=FALSE:mailto:user2#example.com
LOCATION:Sweden
DESCRIPTION:Meeting
SUMMARY:Meeting
CLASS:CONFIDENTIAL
CATEGORIES:BUSINESS
END:VEVENT
END:VCALENDAR
And here updated meeting with SEQUENCE:2 and DTSTART one day later:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//example.com//Appointment v1.0//EN
METHOD:REQUEST
BEGIN:VEVENT
UID:citfslfcd0001hx61sjcqqp4q
SEQUENCE:2
DTSTAMP:20160923T161267
DTSTART:20160924T211500
ATTENDEE:;CN="user1";RSVP=FALSE:mailto:user1#example.com
ATTENDEE:;CN="user2";RSVP=FALSE:mailto:user2#example.com
LOCATION:Sweden
DESCRIPTION:Meeting
SUMMARY:Meeting
CLASS:CONFIDENTIAL
CATEGORIES:BUSINESS
END:VEVENT
END:VCALENDAR
When I open first file in google calendar (from email attachment) or Calendar app on Mac meeting is added to calendar as expected.
When I open second file in google calendar then duplicate meeting with new meeting date is created.
When I open second file in Calendar app then... nothing happens - first meeting just "bounces" in date cell, but nothing happens...
What might be wrong with those ics files?
I also can't cancel meeting despite gmail recognizes it (the .ics attachment) and shows message "This meeting has been canceled".
Here is a screenshot of what happens when I try to update event:
And here what gmail show when I try to cancel the meeting (It shows "Meeting has been canceled" in Polish) (but event is not removed / updated in google calendar):

Your ATTENDEE properties look wrong. The colon character that is after the property name should not be there due to the fact that the property has parameters.
For example this:
ATTENDEE:;CN="user1";RSVP=FALSE:mailto:user1#example.com
should be this:
ATTENDEE;CN="user1";RSVP=FALSE:mailto:user1#example.com

In fact, your ATTENDEE property needs more arguments to make sure Google Calendar considers it an update:
ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-
ACTION;RSVP=TRUE;CN=Recipient Name;X-NUM-UESTS=0:mailto:recipient#gmail.com
I have provided a more complete explanation here: https://stackoverflow.com/a/49585109/5669260

Related

How to create an event in a user's Google Calendar that can not be modified?

I want to create an event in a user's Google Calendar that can't be modified by that user.
In the following example, the API belongs to a#gmail.com, and is used to put an event in the calendar of b#occsn.com. To create an event that might be locked, I use the import interface from Google's API
start:
datetime: <date + time>
end:
datetime: <date + time>
summary: My Awesome Event
i_cal_uid: <random UUID>
organizer:
email: noreply#example.com # Non-existent address
display_name: MyAwesomeCompany
attendees:
-
email: <target calendar ID, e.g. user.com_q23rlj3we#group.calendar.google.com>
response_status: accepted
This creates an event on the user's calendar. If the user sees it in his calendar app (I use Fantastical), it can't be moved, but if user goes to Google Calendar's web site directly, the event can be moved, and it warns – only once – about "only moving it in Target Calendar" or something.
My question: Is it possible to create an event in the user's calendar that the user can not modify or move at all?

BotBuilder - FormFlow - how to change confirmation option language

I'm working with Microsoft Bot Framework facing with FormFlow.
I'm using confirmation dialog like this sample:
return new FormBuilder<SandwichOrder>()
.Message("Welcome to the sandwich order bot!")
.Field(nameof(SandwichOrder.Sandwich))
...
.Confirm("Do you want to order your {Length} {Sandwich} on {Bread} {&Bread} with {[{Cheese} {Toppings} {Sauces}]} to be sent to {DeliveryAddress} {?at {DeliveryTime:t}}?")
.AddRemainingFields()
.Message("Thanks for ordering a sandwich!")
.OnCompletionAsync(processOrder)
.Build();
Confirm dialog works but I'm running the bot then questions in italian language while Confirm seems to accept just "yes/no" options.
How to turn this into italian ("si/no")?
Is it possible to set language globally?
Thanks
The language is set in the dev.botframework.com website. You can edit your bot and set the Language parameter :
Setting parameter for language
You can also ask the Bot Connector to translate automatically messages for you. This is done by the user. He only has to say : "I would like to speak spanish" and it will translate automatically message into spanish.
You might want to take a look to the AnnotatedSandwich sample. With the latest release of the Builder package the sample was updated and now it shows how you can build a Localized Form. Here is the code where the form is being built.

What is the best approach to duplicate the Google Calendar?

What I'm trying to do here is create a Java program that will continuously sync all events from my Calendar1 to my Calendar2 EXCEPT for events under a certain condition (say I have marked as "maybe attend")
So far I've got some sample code up and running that allows me to connect to the Google Calendar via their SDK.
https://developers.google.com/google-apps/calendar/v3/reference/
I've gotten as far as being able to read events from Calendar1. Great.
Now I'm trying to put them into Calendar2. The first approach I tried is using Events.Import
https://developers.google.com/google-apps/calendar/v3/reference/events/import
But I got the following error:
com.google.api.client.googleapis.json.GoogleJsonResponseException: 400 Bad Request
{
"code" : 400,
"errors" : [ {
"domain" : "calendar",
"message" : "The owner of the calendar must either be the organizer or an attendee of an event that is imported.",
"reason" : "participantIsNeitherOrganizerNorAttendee"
} ]
It appears that the I can only import into the "primary" calendar I suspect.
So from here, what approach should I take? Should I be doing Inserts? The only problem there is the next time I sync, I won't know which events from Calendar2 to edit. I can get the incremental changes from Calendar1 from the sync API. I just don't know how I would update Calendar2.

Camel route to filter out the auto response emails

I am using camel rout to consume the emails from my inbox folder.
But I want to filter out the auto responded emails like out of offices etc.
I see there is a option for to process only unread messages by using option unseen=true.
The URI that I am using to consume the emails looks like:
pop3://username#host?password=password;delete=true&unseen=true&consumer.delay=60000
I think what you're looking for is the searchTerm property to add to your endpoint URI.
If you want to filter out e-mails with the term Out Of Office in them, your endpoint URI might look like this:
pop3://username#host.com?password=password;delete=true&searchTerm.subjectOrBody=Out+Of+Office&searchTerm.unseen=true
The searchTerm property lets you search on the basis of several other criteria as mentioned below:
searchTerm.unseen - Whether to limit by unseen mails only
searchTerm.subjectOrBody - To limit by subject or body to contain the word.
searchTerm.subject - The subject must contain the word.
searchTerm.body - The body must contain the word.
searchTerm.from - The mail must be from a given email pattern.
searchTerm.to - The mail must be to a given email pattern.
searchTerm.fromSentDate/toSentDate - Filters on sent date
Further documentation can be found here - http://camel.apache.org/mail.html

wpf "emailto" - with attachments

I am developing a WPF app in MVVM presentation pattern. I have a grid and I am trying to have an "emailto" hyperlink and when the user clicks that i am trying to export all the data to an excel and open the default email client with a draft new message window(email client could be Lotus/Outlook) and attach the excel as an attachment to the mail. I am able to define a "Mailto" hyperlink and when i click that i am able to open the draft message email window. But i am not sure how to send the excel as an attachment. Any help is greatly appreciated.
By sending an Excel file you don't mean generating of this file somehow. Right? So you just need to attach a file.
I always use Andrew Baker's MAPI wrapper class which seems to be very reliable and has never failed for last 6 years. It's just 18Kb of C# code and it does exactly what you need.
var message = new MapiMailMessage(subject, body);
message.Recipients.Add(mailAddress);
message.Files.Add(filePath);
message.ShowDialog();
You could use Simple MAPI API to solve your problem:
var mapi = new Mapi();
mapi.Logon(IntPtr.Zero);
foreach (var filePath in files)
mapi.Attach(filePath);
mapi.Send("subject", "body text", true /* show send message dialog to user */);
mapi.Logoff();

Resources