Ical.ics不可由Office 365读取



我正试图通过Ical和PhpMailer发送会议请求。我以StringAttachment的身份加入了Ical。如果我下载了附件,我可以用桌面Outlook阅读,但我试图用Office 365打开它,我收到一条警告:"无法查看.ICS附件,因为不支持该格式。"。在谷歌日历上,我也无法导入它。

$ical = "BEGIN:VCALENDARrn";
$ical .= "VERSION:2.0rn";
$ical .= "METHOD:REQUESTrn";  
$ical .= "BEGIN:VEVENTrn";
$ical .= "BEGIN:VTIMEZONErn";
$ical .= "TZID:Europe/Parisrn";
$ical .= "X-LIC-LOCATION:Europe/Parisrn";
$ical .= "BEGIN:DAYLIGHTrn";
$ical .= "TZOFFSETFROM:+0100rn";
$ical .= "TZOFFSETTO:+0200rn";
$ical .= "TZNAME:CESTrn";
$ical .= "DTSTART:19700329T020000rn";
$ical .= "RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=3rn";
$ical .= "END:DAYLIGHTrn";
$ical .= "BEGIN:STANDARDrn";
$ical .= "TZOFFSETFROM:+0200rn";
$ical .= "TZOFFSETTO:+0100rn";
$ical .= "TZNAME:CETrn";
$ical .= "DTSTART:19701025T030000rn";
$ical .= "RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=10rn";
$ical .= "END:STANDARDrn";
$ical .= "END:VTIMEZONErn"; 
$ical .= "ORGANIZER:MAILTO:hgdfsghdsfghsd@gmail.comrn";
$ical .= "ATTENDEE;PARTSTAT=ACCEPTED:MAILTO:ghhgjkgh@gmail.comrn";
$ical .= "UID:".strtoupper(md5($interId))."-*****.frrn";
$ical .= "METHOD:REQUESTrn";
$ical .= "SEQUENCE:1";
$ical .= "STATUS:".$status."rn";
$ical .= "DTSTART:".$startDate->format('Ymd').'T'.$startDate->format('His')."rn";
$ical .= "DTEND:".$endDate->format('Ymd').'T'.$endDate->format('His')."rn";
$ical .= "LOCATION:".$shopName."rn";
$ical .= "SUMMARY:".$summary."rn";
$ical .= "DESCRIPTION:rn";
$ical .= "BEGIN:VALARMrn";
$ical .= "TRIGGER:-PT15Mrn";
$ical .= "ACTION:DISPLAYrn";
$ical .= "DESCRIPTION:Reminderrn";
$ical .= "END:VALARMrn";
$ical .= "END:VEVENTrn";
$ical .= "END:VCALENDARrn";
$mail->AddStringAttachment($ical, "Invite.ics", "base64", "text/calendar; charset=utf-8; method=REQUEST");

我希望邀请能被gmail和office 365阅读,但我不明白我的ical出了什么问题。你有什么想法吗?

感谢

几个问题:

1) VEVENT组件中的DTSTART和DTEND属性缺少TZID参数。

$ical .= "DTSTART;TZID=Europe/Paris:".$startDate->format('Ymd').'T'.$startDate->format('His')."rn";
$ical .= "DTEND;TZID=Europe/Paris:".$endDate->format('Ymd').'T'.$endDate->format('His')."rn";

2) VTIMEZONE组件不应位于VEVENT组件内部。它应该在VCALENDAR组件下面。

BEGIN:VCALENDAR
VERSION:2.0
METHOD:REQUEST
BEGIN:VTIMEZONE
...
END:VTIMEZONE
BEGIN:VEVENT
...
END:VEVENT
END:VCALENDAR

第二个错误可能是由VEVENT组件内的METHOD属性引起的。METHOD只能出现在VCALENADAR组件内部。

最新更新