c# - iCalendar 不为组织者创建事件

标签 c# .net outlook icalendar

我正在尝试使用 iCalendar 标准在我的 Microsoft Outlook 日历中创建一个事件。我已经从 .NET 应用程序向我的 Exchange 邮箱发送了一封内容类型为“文本/日历”的电子邮件。 它作为 session 请求到达 Outlook。一切看起来都很好,直到我单击收到的 session 请求时,Outlook 将其显示为空日历 View ,并显示文本:“无法在日历中找到 session ”。 我不明白为什么 – 我想创建一个事件,它正在尝试寻找一些现有的?

如果我向除组织者之外的 session 参与者发送完全相同的电子邮件,它会在他们的日历中创建一个事件并且一切似乎都正常。 我发现它是由“ORGANIZER”属性引起的。如果设置为组织者的电子邮件(我的电子邮件)并且我向自己发送 session 请求,则不会创建带有“在日历中找不到 session ”信息的事件。

所以问题是为什么它不为组织者创建事件?组织者必须创建该事件,以便在其他参与者接受或取消 session 时通知他们。

这是 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

最佳答案

假设组织者想要为 2 名与会者创建一个 session 。他在预订系统中填写了一张表格。 预订系统向他自己和 2 名与会者发送包含 iCalendar 标准的电子邮件。

这种情况是行不通的。

无法在组织者的日历中创建事件(可取消的 session 对象)。客户认为包含 iCalendar 格式的电子邮件只是通知组织者日历中已经创建的 session 的与会者。如果此类电子邮件到达组织者的邮箱,则客户端应用程序不会在组织者的日历中创建事件。它假定事件是由组织者自己创建的。例如:在这种情况下,Outlook 会告诉您“在日历中找不到 session ”。

如果您询问 Microsoft 支持,他们只会告诉您他们不支持开放标准:http://support.microsoft.com/kb/2269506

此问题的有效解决方案是使用平台服务(Exchange Web ServicesGoogle 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);

或在 Google Calendar API 的情况下将“sendNotifications”参数设置为 true。

您不需要向每个特定的与会者发送电子邮件。

关于c# - iCalendar 不为组织者创建事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15084236/

相关文章:

c# - 使用 Entity Framework T4 POCO

ios - 将日历事件添加到 Microsoft Outlook 日历

c# - 使用lastwritetime从FTP复制文件

c# - 在 xp 上找不到文件

c# - 改进大量测试用例的测试语法

c# - 如何保存带有附件的outlook邮件?

api - Microsoft Graph API 创建事件始终使用 UTC 时区创建 session

c# - 使用 WPF MVVM 模式实现接口(interface)

c# - 我应该使用响应代码、异常(exception)情况还是短信来进行服务响应?

java - Gradle - 如果项目仍然具有 SNAPSHOT 依赖项,则抛出异常