有些业务需要给用户发送会议邀请,其实不是很复杂的问题,但是因为要兼容各种客户端,所以很容易导致各种问题,我就被坑了几次。时区问题,时间错乱问题等等。
下面贴上会议邀请的配置:
$meetingContent = 'BEGIN:VCALENDAR
PRODID:-//Microsoft Corporation//Outlook 14.0 MIMEDIR//EN
VERSION:2.0
METHOD:REQUEST
X-MS-OLK-FORCEINSPECTOROPEN:TRUE
CALSCALE:GREGORIAN
BEGIN:VTIMEZONE
BEGIN:STANDARD
TZOFFSETFROM:+0800
TZOFFSETTO:+0800
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT'.'
ORGANIZER;CN="Mail Test":MAILTO:'.$this->mailer->From.'
ATTENDEE;CN='.$email.';RSVP=TRUE:mailto:'.$email.'
CLASS:PUBLIC
STATUS:TENTATIVE
DESCRIPTION:' . $content . '
DTSTART:'.$startTime.'
DTEND:'.$endTime.'
CREATED:'.$startTime.'
DTSTAMP:'.$startTime.'
LOCATION:'.$this->place.'
ORGANIZER:mailto:'.$email.'
PRIORITY:5
SEQUENCE:0
SUMMARY;LANGUAGE=zh-cn:'.$subject.'
TRANSP:OPAQUE
UID:'.$uid.'
X-WR-ALARMUID:'.$uid.'
X-ALT-DESC;FMTTYPE=text/html:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\n<HTML>\n<HEAD>\n<META NAME="Generator" CONTENT="MS Exchange Server version 14.02.5004.000">\n<TITLE></TITLE>\n</HEAD>\n<BODY>' . $content . '</BODY>\n</HTML>
X-MICROSOFT-CDO-BUSYSTATUS:TENTATIVE
X-MICROSOFT-CDO-IMPORTANCE:1
X-MICROSOFT-CDO-INTENDEDSTATUS:BUSY
X-MICROSOFT-DISALLOW-COUNTER:FALSE
X-MS-OLK-AUTOSTARTCHECK:FALSE
X-MS-OLK-CONFTYPE:0
BEGIN:VALARM
TRIGGER:-PT15M
ACTION:DISPLAY
DESCRIPTION:Reminder
END:VALARM
END:VEVENT
END:VCALENDAR';
return $meetingContent;
需要注意一些问题,例如时区,默认是使用UTC时间的,但是中国是东八区,所以要加上offset,否则一些客户端的时间会错误。
BEGIN:VTIMEZONE
BEGIN:STANDARD
TZOFFSETFROM:+0800
TZOFFSETTO:+0800
END:STANDARD
END:VTIMEZONE
另外两个参数一定要加上,CREATED和DTSTAMP,缺少这两个参数会导致部分客户端时间错乱,差异几十天。
UID也是不能缺少,否则更新时间后会新建一个事件。