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

Php 为什么Outlook要删除此以编程方式发送的当前会议邀请?,php,outlook,icalendar,vcalendar,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 ATTEN

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

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


确切原因是什么?我无法理解。

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

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

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

  • 序列号
  • DTSTAMP属性
  • 如果接收到的更新比客户端上的事件旧,则将丢弃该更新

    因此,在生成更新时,如果对事件的更新是最小的,则可以使用稍后的DTSTAMP。如果更改足够显著(例如DTSTART更改),则必须增加序列号

    请参见以下几点:

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

  • 确保DTSTAMP不包含将来的日期


  • 在删除之前,它是否表明它认为会议的时间?可能日期/时间字段的格式不正确?Outlook计算机上的时间设置是否正确?可能值得将该请求中的字段缩减为基本内容,以防任何内容扰乱Outlook。另外,请检查您的换行格式。使用相同的代码,它在其他电子邮件(如yahoo和gmail)上正确接收,但唯一的问题是,DTSTAMP会影响它吗?恐怕我不知道,没有使用vcards。不过,值得一看。是否已经有UID(12345678123)的预约?您是否尝试从日历文件夹中删除所有约会,然后发送此邀请?