我们正在开发一个 asp.net 2.0 Web 应用程序,该应用程序向用户发送电子邮件以保存到他们的 Outlook 2003 日历中。我们注意到,即使 ical 2.0 规范支持,更新或删除项目的代码似乎都不起作用。我们很好奇 Outlook 2003 是否忽略了这一点?Outlook 2007 的行为是否不同?
我们在某些情况下,事件可能会更改或被取消,这会触发电子邮件通知,但更新后的 ical 只会添加一个新事件,它不会删除或移动原始事件....
我们错过了什么吗?
我们现在已经能够让它删除一条消息......但没有像我们想象的那样更新......
设置我们发送的会议...
开始:VCALENDAR 版本:2.0 方法:发布开始:事件类别:公共优先级:5 序列:0 UID:12345 摘要:测试位置:测试 DTSTART:20090709T230000Z DTEND:20090710T000000Z DTSTAMP:20090713T1646END:VCALEND:测试
要删除,我们只需更改取消方法即可发送消息,如下所示:
开始:VCALENDAR 版本:2.0 方法:取消开始:事件类别:公共优先级:5 序列:0 UID:12345 摘要:测试位置:测试 DTSTART:20090709T230000Z DTEND:20090710T000000Z DTSTAMP:20090713T164634ZVCALEND:测试结束:
我们最初的删除问题是我们有一个空白的组织者行。我们删除了它并取消工作....
至于像第一行那样更新原始发布,我们一直无法做到。我们已将序列 # 从零增加到 1,它只是添加了一个新会议。我们使用相同的 UID 编号,在我们的测试中仅为 12345。
我发现这样做的唯一方法是创建一个组织者并从发布更改为请求类型。
在阅读 rfc2445 时,这似乎是它的设计方式。发布将始终创建新记录,顺序无关紧要。当顺序很重要时,使用组织者和请求方法....
在我在这里测试和阅读 stackoverflow 之后,我也找到了这个答案: ICalendar and event updates not working in Outlook
对我来说,我没有早点看到...... :)
这是一个示例:
开始:VCALENDAR 版本:2.0 方法:请求开始:事件类别:公共 DTEND:20090713T203000Z DTSTAMP:20090713T174434Z DTSTART:20090713T200000Z 组织者;CN="No one special";mailto:dontemailme@email.com 优先级:5 ? UID:1234567 结束:事件结束:VCALENDAR
并更新它...
开始:VCALENDAR 版本:2.0 方法:请求开始:事件类别:公共 DTEND:20090713T213000Z DTSTAMP:20090713T174434Z DTSTART:20090713T210000Z 组织者;CN="No one special";mailto:dontemailme@email.com 优先级:5 ? UID:1234567 结束:事件结束:VCALENDAR
并取消它....
开始:VCALENDAR 版本:2.0 方法:取消开始:事件类别:公共 DTEND:20090713T213000Z DTSTAMP:20090713T174434Z DTSTART:20090713T210000Z 组织者;CN="No one special";mailto:dontemailme@email.com 优先级:5 ? UID:1234567 结束:事件结束:VCALENDAR
序列 # 对于取消无关紧要....
我不得不说我对 Outlook 2007 的体验与您对 Outlook 2003 的体验相同。它完全忽略了 PUBLISH 。
我解决这个问题的最好方法是将会议用作附件。这样你就可以打开它,“让它成为你自己的”并利用跟踪并向与会者发送更新。
我不认为微软有兴趣在这里与标准打交道。