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

时间:2015-04-11 11:58:12

标签: php outlook icalendar vcalendar

我正在通过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

问题

当用户收到邮件而不是接受和拒绝时,它显示不是最新的,当我点击它然后它显示警告"此会议请求已过期,现在将被删除"

究竟是什么原因?我无法理解。

2 个答案:

答案 0 :(得分:1)

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

UID:12345678123

简短回答:如果这是一个全新的非核心事件,则始终生成全球唯一的UID

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

  1. SEQUENCE号码
  2. DTSTAMP属性
  3. 如果收到的更新早于客户端的事件,则会被丢弃。

    因此,在生成更新时,如果对事件的更新最小,则可以使用稍后的DTSTAMP。如果变化足够大(例如DTSTART变化),则必须增加SEQUENCE编号。

    请参阅https://tools.ietf.org/html/rfc5546#section-2.1.4

答案 1 :(得分:1)

有几件事:

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

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