5

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

问题

当用户收到邮件而不是接受和拒绝时,它显示不是当前的,当我单击它时,它显示警报“此会议请求已过期,现在将被删除”

确切的原因是什么?我无法弄清楚。

4

2 回答 2

1

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

UID:12345678123

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

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

  1. 序列号
  2. DTSTAMP 属性

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

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

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

于 2015-04-13T07:29:55.850 回答
1

有几件事:

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

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

于 2015-04-13T14:43:34.250 回答