我试图通过ics文件创建一个约会,它工作正常,但当我创建另一个ics文件取消约会并尝试导入时,它抛出错误“无法打开事件,它可能是日历文件已损坏”。
对于约会创建,APPOINTMENT.ics按预期创建条目
APPOINTMENT.ics
BEGIN:VCALENDAR
PRODID:-//Lotus Development Corporation//NONSGML Notes 9.0.1//EN_C
VERSION:2.0
BEGIN:VTIMEZONE
TZID:W. Europe Standard Time
BEGIN:STANDARD
DTSTART:19501029T020000
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
RRULE:FREQ=YEARLY;BYMINUTE=0;BYHOUR=2;BYDAY=-1SU;BYMONTH=10
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19500326T020000
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
RRULE:FREQ=YEARLY;BYMINUTE=0;BYHOUR=2;BYDAY=-1SU;BYMONTH=3
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
UID:123456
ORGANIZER;CN=Avi Kaushik/Show:mailto:[email protected]
DTSTART;TZID="W. Europe Standard Time":20190410T130000
DTEND;TZID="W. Europe Standard Time":20190410T140000
LOCATION:
SUMMARY;LANGUAGE=en-us:process ics file 555555
DESCRIPTION;LANGUAGE=en-us: \n
TZID:W. Europe Standard Time
TRANSP:OPAQUE
END:VEVENT
END:VCALENDAR
但是当试图通过包含与APPOINTMENT.ics相同的UID的CANCELLATION.ics取消上述条目时,它不起作用
CANCELLATION.ics
BEGIN:VCALENDAR
PRODID:-//Lotus Development Corporation//NONSGML Notes 9.0.1//EN_C
VERSION:2.0
METHOD:CANCEL
BEGIN:VTIMEZONE
TZID:W. Europe Standard Time
BEGIN:STANDARD
DTSTART:19501029T020000
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
RRULE:FREQ=YEARLY;BYMINUTE=0;BYHOUR=2;BYDAY=-1SU;BYMONTH=10
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19500326T020000
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
RRULE:FREQ=YEARLY;BYMINUTE=0;BYHOUR=2;BYDAY=-1SU;BYMONTH=3
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
UID:123456
ORGANIZER;CN=Avi Kaushik/Show:mailto:[email protected]
DTSTART;TZID="W. Europe Standard Time":20190410T130000
DTEND;TZID="W. Europe Standard Time":20190410T140000
SEQUENCE:1
STATUS:CANCELLED
LOCATION:
SUMMARY;LANGUAGE=en-us:process ics file 555555
DESCRIPTION;LANGUAGE=en-us: \n
TZID:W. Europe Standard Time
TRANSP:OPAQUE
END:VEVENT
END:VCALENDAR
您的第一个简单流只是一个简单的事件,没有任何与会者。您的第二个流是带有METHOD CANCEL的iTIP消息。 iTIP CANCEL消息旨在用于邀请的上下文(即具有ATTENDEE属性)。见https://tools.ietf.org/html/rfc5546#section-3.2.5。在您的情况下,原始事件没有与会者,也没有取消。
您没有指定这些ics流如何在您的客户端中结束?如果您只是导入它们,我会尝试在第二个流中删除METHOD:CANCEL属性。 STATUS:CANCELED应该足够了。