gre*_*jer 17 .net c# icalendar outlook
我正在尝试使用iCalendar标准在我的Microsoft Outlook日历中创建一个事件.我已经从.NET应用程序向我的Exchange邮箱发送了一封内容类型为"text/calendar"的电子邮件.它作为会议请求到达Outlook.一切看起来都不错,直到我点击收到的会议请求,Outlook将其显示为空日历视图,文本为"在日历中找不到会议".我不明白为什么 - 我想创建一个活动,它试图找到一些现有的?
如果我向会议的参与者发送完全相同的电子邮件,除了组织者,它会在他们的日历中创建一个事件,一切似乎都没问题.我发现它是由"ORGANIZER"属性引起的.如果设置为组织者的电子邮件(我的电子邮件)并且我向自己发送会议请求,则不会创建包含"在日历中找不到会议"信息的事件.
所以问题是它为什么不为组织者创建一个活动?组织者必须创建该事件,以便其他参与者接受或取消会议时通知他们.
这是iCalendar:
BEGIN:VCALENDAR
PRODID:-//Company//Product 3.0//EN
VERSION:2.0
CALSCALE:GREGORIAN
METHOD:REQUEST
BEGIN:VEVENT
DTSTART:20130225T200000Z
DTEND:20130225T203000Z
DTSTAMP:20130225T143039Z
ORGANIZER;CN="John Doe":mailto:john.doe@domain.com
UID:20130225T143039Z@domain.com
ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN="John Smith"
;X-NUM-GUESTS=0:mailto:john.smith@domain.com
CLASS:PUBLIC
CREATED:20130225T143039Z
DESCRIPTION:
LAST-MODIFIED:20130225T143039Z
LOCATION:
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:Booking test
TRANSP:OPAQUE
END:VEVENT
END:VCALENDAR
Run Code Online (Sandbox Code Playgroud)
gre*_*jer 18
假设组织者想要为2位与会者创建一个会议.他在预订系统中填写了一份表格.预订系统向他自己和2位与会者发送包含iCalendar标准的电子邮件.
此方案不起作用.
无法在组织者的日历中创建事件(可取消的会议对象).客户认为包含iCalendar格式的电子邮件只是已在组织者日历中创建的会议与会者的通知.如果此类电子邮件到达组织者的邮箱,则客户端应用程序不会在组织者的日历中创建活动.它假设一个事件是由组织者自己创建的.例如:在这种情况下,Outlook会告诉您"在日历中找不到会议".
如果您询问Microsoft支持,它们只会告诉您它们不支持开放标准:http://support.microsoft.com/kb/2269506
此问题的解决方案是使用平台服务(Exchange Web服务或Google Calendar API)在组织者的日历中创建活动.忘记iCalendar标准.可以将服务配置为自动向与会者发送通知.因此,如果您使用EWS,则传递" SendInvitationsMode.SendToAllAndSaveCopy " 就足够了:
Appointment appointment = new Appointment(service);
appointment.Subject = "Status Meeting";
appointment.Body = "The purpose of this meeting is to discuss status.";
appointment.Start = new DateTime(2014, 3, 1, 9, 0, 0);
appointment.End = appointment.Start.AddHours(2);
appointment.Location = "Conf Room";
appointment.RequiredAttendees.Add("user1@contoso.com");
appointment.RequiredAttendees.Add("user2@contoso.com");
appointment.OptionalAttendees.Add("user3@contoso.com");
appointment.Save(SendInvitationsMode.SendToAllAndSaveCopy);
Run Code Online (Sandbox Code Playgroud)
或者,如果是Google Calendar API,请将" sendNotifications "参数设置为true.
您无需向每位特定与会者发送电子邮件.
小智 17
这是一个老问题,但我认为它是由于使用METHOD引起的:REQUEST这标志着应该更新ical,而不是它是一个新项目.相反,使用METHOD:PUBLISH
我可以确认这适用于DDay.iCal和Outlook Calendars.