为什么 Outlook 要删除以编程方式发送的当前会议邀请?

Why does Outlook want to delete this current meeting invitation, sent programmatically?

我正在通过 PHP 向 Outlook 发送会议邀请邮件。按照代码,我正在使用

BEGIN:VCALENDAR
VERSION:2.0
CALSCALE:GREGORIAN
METHOD:REQUEST
BEGIN:VEVENT
DTSTART:20150501T080000Z
DTEND:20150502T090000Z
DTSTAMP:20150511T075116Z
ORGANIZER;CN=Jass:mailto:jaspreet@anlita.se
UID:12345678123
ATTENDEE;PARTSTAT=NEEDS-ACTION;RSVP= TRUE;CN=Sample:mailto:sample@test.com
DESCRIPTION:Complete event on http://www.sample.com/get_event.php?id=12345678
LOCATION: India
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:TESTING timezones
TRANSP:OPAQUE
END:VEVENT
END:VCALENDAR

问题

当用户收到邮件而不是接受和拒绝时,它显示不是最新的,当我点击它时它显示警报 "This meeting request is out of date and will now be deleted"

具体原因是什么?我想不通。

您的日历中可能已经有一个具有相同 UID 的活动:

UID:12345678123

简短回答:如果这是一个全新的、不相关的事件,总是生成一个全球唯一的 UID

长答案: 当通过电子邮件收到已存在的活动邀请时,客户需要根据以下内容将其现有副本与收到的副本进行比较:

  1. 序列号
  2. DTSTAMP 属性

如果收到的更新早于客户端的事件,则将其丢弃。

所以在生成更新的时候,如果对事件的更新是最小的,就可以使用后面的DTSTAMP。如果更改足够重要(例如 DTSTART 更改),则必须增加 SEQUENCE 编号。

https://www.rfc-editor.org/rfc/rfc5546#section-2.1.4

几件事:

  1. 确保日历文件夹中不存在具有相同 UID 12345678123) 的约会。

  2. 确保 DTSTAMP 不包含将来的日期。