Outlook 无法识别 .ics 文件中的自定义 UID,创建新事件(和新 ID)

cam*_*ack 5 icalendar outlook uid rfc5545

我想做的事情:
我需要发送客户.ics文件,这些文件将在客户下载并双击(并选择填充他们的 Outlook 日历)后立即填充他们的 Outlook 日历。

当我在本地测试时,如果我将 Outlook 设置为工作,下面的 iCalendar 代码可以正常工作offline- 为每个事件生成一个 UID once,我可以一次又一次地使用同一文件,并且将not生成一个新事件 - 因为 UID 被识别展望已经存在。(这样我就可以依靠UID来更新,也可以取消)

问题是,当我使用onlineOutlook 时,每次使用该文件填充日历时,都会生成一个随机 UID(长 112 个字符) - 即使对于相同的事件 - 因此会生成重复的事件every time!

.ics 文件的示例:

BEGIN:VCALENDAR

VERSION:2.0
METHOD:PUBLISH
PRODID:-//PYVOBJECT//NONSGML Version 1//EN

BEGIN:VEVENT
UID:12345
DTSTART:20190715T020222Z
DTEND:20190715T030222Z
DESCRIPTION:Some fake summary - first event
DTSTAMP:20190715T010222Z
SEQUENCE:0
SUMMARY:this is the first event summary
END:VEVENT

BEGIN:VEVENT
UID:67890
DTSTART:20190715T040222Z
DTEND:20190715T050222Z
DESCRIPTION:Some fake summary - second event
DTSTAMP:20190715T010222Z
SEQUENCE:0
SUMMARY:this is the second event summary
END:VEVENT

END:VCALENDAR
Run Code Online (Sandbox Code Playgroud)

online如果我为 Outlook (从日历中拖放)时生成的第一个事件生成 .ics 文件,我会看到 Outlook 添加了一堆新字段:

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Microsoft Corporation//Outlook for Mac MIMEDIR//EN
METHOD:PUBLISH
BEGIN:VTIMEZONE
TZID:Pacific Time (US & Canada)
X-ENTOURAGE-CFTIMEZONE:US/Pacific
X-ENTOURAGE-TZID:1
BEGIN:STANDARD
RRULE:FREQ=YEARLY;INTERVAL=1;BYSECOND=0;BYMINUTE=0;BYHOUR=2;BYDAY=1SU;BYMONTH=11
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
DTSTART:20071104T020000
END:STANDARD
BEGIN:DAYLIGHT
RRULE:FREQ=YEARLY;INTERVAL=1;BYSECOND=0;BYMINUTE=0;BYHOUR=2;BYDAY=2SU;BYMONTH=3
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
DTSTART:20070311T020000
END:DAYLIGHT
END:VTIMEZONE

BEGIN:VEVENT
UID:<a NEW 112 character id - NOT the one I added myself>
X-ENTOURAGE_UUID:81760164-FB2C-4421-B7AC-2E1791265F0A
X-MICROSOFT-EXCHANGE-ID:<base64, 140 character id>
X-MICROSOFT-EXCHANGE-CHANGEKEY:<base64, 32 character id>
DTSTAMP:20190715T023949Z
DTSTART;TZID="Pacific Time (US & Canada)":20190714T190200
DTEND;TZID="Pacific Time (US & Canada)":20190714T200200
LAST-MODIFIED:20190715T023949Z
SUMMARY:this is the first event summary
DESCRIPTION:Some fake summary - first event
ORGANIZER:MAILTO:<the real account owner email - my email>
SEQUENCE:0
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
X-MICROSOFT-CDO-ALLDAYEVENT:FALSE
X-MICROSOFT-DISALLOW-COUNTER:TRUE
X-MICROSOFT-DONOTFORWARDMEETING:FALSE
X-MICROSOFT-CDO-INSTTYPE:0
END:VEVENT

END:VCALENDAR
Run Code Online (Sandbox Code Playgroud)

我尝试过的:

  1. 修改的:METHOD:REQUEST
  2. 从这篇文章添加X-WR-RELCALID:some_unique_id
  3. 序列似乎没有帮助 - 它只是用来排序同一文件中的 2 个 UID 是否相同
  4. 我添加ORGANIZER;CN=Fable mail:MAILTO:fable.mail@example.com到每个活动 - 它与 UID 存在相同的问题,并且被忽略(我的电子邮件被添加为组织者)
  5. 我按照这篇文章ATTENDEE:MAILTO:somemail@email.com中的建议添加了,但似乎没有任何区别

是不是因为我没有使用推荐的UID标准?这看起来像是一个防止碰撞的建议,仅此而已。

谢谢你!

ret*_*ach 0

当您通过桌面浏览器将 .ics 文件上传到 Outlook Live 时,我已使用 Edge Mobile 设置为桌面,并在展开的左侧边栏中选择添加日历,然后在以下选择菜单中从文件上传, UID 替换不会发生。

PS 通过 Outlook 邮件输入数据会替换 UID,即使它们确实符合规范中的官方建议。