【问题标题】:Replace Existing Outlook Calendar Appointment替换现有 Outlook 日历约会
【发布时间】:2015-02-07 15:14:38
【问题描述】:

我正在做一些与 icalndar 约会生成相关的工作;这将允许代表查看活动的网站并单击提供的链接以将约会添加到他们的日历中。

我有一个工作程序集,它将根据一组已知信息(开始日期、结束日期、标题等)生成 ics 格式的输出(作为物理文件或流)。

我为日历约会生成的输出示例如下:

BEGIN:VCALENDAR
PRODID:-//Microsoft Corporation//Outlook 12.0 MIMEDIR//EN
VERSION:2.0
METHOD:PUBLISH
X-MS-OLK-FORCEINSPECTOROPEN:TRUE
BEGIN:VEVENT
CLASS:PUBLIC
CREATED:20110210T124703Z
DESCRIPTION:Anything Else\n\nHopefully some useful information would be written here\n
DTEND:20110212T100000Z
DTSTAMP:20110210T124600Z
DTSTART:20110212T090000Z
LAST-MODIFIED:20110210T124703Z
LOCATION:Dummy Location
PRIORITY:5
SEQUENCE:0
SUMMARY;LANGUAGE=en-us:Dummy Meeting
TRANSP:OPAQUE
UID:040000008200E00074C5B7101A82E00800000000B0D1061C57C8CB01000000000000000
    010000000281117EDC1194242B64F0247C54DB401
X-ALT-DESC;FMTTYPE=text/html:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\n<HTML>\n<HEAD>\n<META HTTP-EQUIV="Content-Type" CONTENT="text/html\;    charset=Windows-1252">\n<META NAME="Generator" CONTENT="MS Exchange Server
 version 6.5.7654.12">\n<TITLE>Dummy Meeting</TITLE>\n</HEAD>\n<BODY>\n<!-
- Converted from text/plain format -->\n\n<P><FONT SIZE=2>&lt\;h1&gt\;Anyt
hing Else&lt\;/h1&gt\;&lt\;p&gt\;Hopefully some useful information would b
e written here&lt\;/p&gt\;<BR>\n</FONT>\n</P>\n\n</BODY>\n</HTML>
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
X-MICROSOFT-CDO-IMPORTANCE:1
END:VEVENT
END:VCALENDAR

我被问到的是;是否可以更改约会,但下次有人请求提醒时,它会检测到约会已存在于他们的日历中并更新它而不是创建新条目?

所以我正在尝试查找是否可以覆盖现有的日历约会。

我注意到有一个 UID 值,我尝试保持这个值不变,但它似乎没有提供日历约会之间的链接。

日历约会上的“保存并关闭”操作是否会生成新的 UID,因此不再有链接?

我还能尝试什么?

【问题讨论】:

    标签: c# outlook icalendar


    【解决方案1】:

    可以更新约会,但不能按照您的方式进行。以下是重要的:

    • METHOD 应该是 REQUEST - PUBLISH 事件不会更新,它会一次又一次地添加。 REQUEST 会议请求的行为不同,甚至会在用户批准之前更新现有会议。我会注意到,如果事件已经是 Publish 类型,则它们无法更新(至少据我所知)。
    • 您必须使用完全相同的UID
    • DTSTAMP 应该大于现有的日期戳(如果您是动态创建它应该没问题)
    • 包括ORGANIZER - Outlook 可能不允许人们在没有它的情况下接受会议(不是真正相关,但很重要)。

    我的博客中部分对此进行了总结 - Sending Meeting Requests to Outlook via ASP.NET Mail Message,尽管缺少将批准发送给组织者和时区(这非常重要,所以我听说过) .

    另请参阅:RFC 2446 - iTIP,搜索 1.3 ITIP 角色和事务部分

    【讨论】:

    • 阅读 RFC 文档令人困惑,因为它提到了 UIDSEQUENCEDTSTAMP 的组合应该足以更新 PUBLISH 他们甚至给出了一个示例如何更新和PUBLISHMETHOD
    • 请记住,RFC 2446 已被弃用,取而代之的是 RFC 5546 tools.ietf.org/html/rfc5546
    【解决方案2】:

    可以更新PUBLISHed 条目。您无需将METHOD 更改为REQUEST(并在每个ATTENDEE 上设置RSVP=FALSE)。

    要让新副本替换任何现有副本,您需要做的就是增加 SEQUENCE 值。 SEQUENCE 属性主要用于区分与时间相关的内容发生更改的条目版本(例如 DTSTART)。

    但是,RFC 2445 不排除 SEQUENCE 因任何任意原因(例如修正错字)而被撞到。这样做会使条目的任何工作流响应无效,因为它们将用于较低的 SEQUENCE 值,但在 PUBLISH 情况下,实际上没有工作流;都是一种方式。

    如果您没有对条目进行任何与时间相关的更改,那么您只需将DTSTAMP 值更改为更新的值即可。收件人将看到他们已经拥有 UIDSEQUENCE 值,但更旧的 DTSTAMP,因此他们应该简单地更新他们已经拥有的值。

    如果 PUBLISHed 条目在其 SEQUENCEDTSTAMP 已更新时未能更新,则表示不了解标准或未能正确实施。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-12
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多