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

时间:2019-07-15 02:56:56

标签: outlook icalendar uid rfc5545

我要做什么:
我需要向客户发送.ics个文件,这些文件将在下载并双击(并选择填充其Outlook日历)后立即填充其Outlook日历。

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

问题是,当我使用online Outlook时,每次我使用文件填充日历时都会生成随机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

如果我为Outlook online(拖放到日历中)时生成的第一个事件生成一个.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

我尝试过的事情:
1.修改:METHOD:REQUEST
2.添加了X-WR-RELCALID:some_unique_id from this post
3.顺序似乎无济于事-只有在同一文件中2个UID相同的情况下,序列才可以进行排序
4.我向每个事件添加了ORGANIZER;CN=Fable mail:MAILTO:fable.mail@example.com-它与UID具有相同的问题,并且被忽略(我的电子邮件被添加为组织者)
5.我按照this post中的建议添加了ATTENDEE:MAILTO:somemail@email.com,但似乎没有什么区别

是因为我没有为UID使用recommended standard吗?这似乎是防止碰撞的建议,仅此而已。

谢谢!

2 个答案:

答案 0 :(得分:1)

在Office 365的最新Outlook 2019上,问题仍然存在。

即使Microsoft支持也建议将其作为功能请求添加到Outlook建议框中。 (请参见此处:https://answers.microsoft.com/en-us/msoffice/forum/all/ics-file-does-not-update-event/38548f62-d9cd-4b85-8d3e-65217d4e8f50

其他建议创建一个与Outlook通信并通过这种方式同步日历条目的应用程序。但我认为,对于如此小的问题,这是一个过于沉重的解决方案。

答案 1 :(得分:0)

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

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