使用 PHP 为 Outlook 会议事件创建 ICS
Creating ICS for Outlook Meeting Event using PHP
正在尝试从 php 生成 .ics,到目前为止未成功。该文件已创建(它下载到我的 /downloads 文件夹)但是当我单击下载的 ics 事件时,没有任何反应,Outlook 中没有弹出窗口。这是我尝试过的:
$company='company';//$_GET['company'];
$proj_title='projtitle';//$_GET['proj_title'];
$proj_num='project number';//$_GET['proj_num'];
$subject='subject';//$_GET['subject'];
$subject=$proj_num.' '.$company.' - '.$proj_title.': '.$subject;
$http='http%3A%2F%2F';
$fwd_slash='%2F';
$question_mark='%3F';
$equals='%3D';
$ampersand='%26';
$description='Brief description of meeting.';
/* begin ical */
$meeting_date=date('Y-m-d')." 09:00:00";
$meeting_duration=3600;
$meeting_stamp=strtotime($meeting_date." UTC");
$dtstart=gmdate("Ymd\THis\Z",$meeting_stamp);
$dtend=gmdate("Ymd\THis\Z",$meeting_stamp+$meeting_duration);
/* set up the event properties */
$event=array(
'id' => $proj_num,
'subject' => $subject,
'description' => $description,
'datestart' => $dtstart,
'dateend' => $dtend,
'location' => 'Boardroom'
);
/* build the ics file */
$ical='BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//hacksw/handcal//NONSGML v1.0//EN
CALSCALE:GREGORIAN
BEGIN:VEVENT
DTEND;TZID="America/New_York":'.$dtend.'
UID:'.md5($event['subject']).'
DTSTAMP:'.time().'
LOCATION:'.addslashes($event['location']).'
DESCRIPTION:'.addslashes($event['description']).'
URL;VALUE=URI:http://tracker/ics/'.$event['id'].'
SUMMARY:'.addslashes($event['subject']) . '
BEGIN:VALARM
TRIGGER:-PT30M
REPEAT:1
DURATION:PT15M
ACTION:DISPLAY
DESCRIPTION:Reminder
END:VALARM'.'
DTSTART;TZID="America/New_York":'.$dtstart.'
END:VEVENT
END:VCALENDAR';
/* set correct content-type-header */
if($event['id']){
header('Content-type: text/calendar; charset=utf-8');
header('Content-Disposition: attachment; filename=tracker_event.ics');
echo $ical;
}
else{
header('Location: /');
}
我对 icalendar 事件等比较陌生,在网上进行了详尽的研究以得出上述代码,使用虚拟值取得了一些成功,直到现在我需要用真实数据代替。
非常感谢任何帮助。
已解决。问题是我将 HTML 内容添加到 ICS 的描述部分。我完全删除了 DESCRIPTION,并将其替换为:
X-ALT-DESC;FMTTYPE=text/html:<html>'.$html.'</html>
其中 $html 将您希望显示的内容(在 Outlook 2016 中,我的部署环境)存储为 HTML 格式的内容。
现在一切都如我所愿。希望有一天这对某人有所帮助。
正在尝试从 php 生成 .ics,到目前为止未成功。该文件已创建(它下载到我的 /downloads 文件夹)但是当我单击下载的 ics 事件时,没有任何反应,Outlook 中没有弹出窗口。这是我尝试过的:
$company='company';//$_GET['company'];
$proj_title='projtitle';//$_GET['proj_title'];
$proj_num='project number';//$_GET['proj_num'];
$subject='subject';//$_GET['subject'];
$subject=$proj_num.' '.$company.' - '.$proj_title.': '.$subject;
$http='http%3A%2F%2F';
$fwd_slash='%2F';
$question_mark='%3F';
$equals='%3D';
$ampersand='%26';
$description='Brief description of meeting.';
/* begin ical */
$meeting_date=date('Y-m-d')." 09:00:00";
$meeting_duration=3600;
$meeting_stamp=strtotime($meeting_date." UTC");
$dtstart=gmdate("Ymd\THis\Z",$meeting_stamp);
$dtend=gmdate("Ymd\THis\Z",$meeting_stamp+$meeting_duration);
/* set up the event properties */
$event=array(
'id' => $proj_num,
'subject' => $subject,
'description' => $description,
'datestart' => $dtstart,
'dateend' => $dtend,
'location' => 'Boardroom'
);
/* build the ics file */
$ical='BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//hacksw/handcal//NONSGML v1.0//EN
CALSCALE:GREGORIAN
BEGIN:VEVENT
DTEND;TZID="America/New_York":'.$dtend.'
UID:'.md5($event['subject']).'
DTSTAMP:'.time().'
LOCATION:'.addslashes($event['location']).'
DESCRIPTION:'.addslashes($event['description']).'
URL;VALUE=URI:http://tracker/ics/'.$event['id'].'
SUMMARY:'.addslashes($event['subject']) . '
BEGIN:VALARM
TRIGGER:-PT30M
REPEAT:1
DURATION:PT15M
ACTION:DISPLAY
DESCRIPTION:Reminder
END:VALARM'.'
DTSTART;TZID="America/New_York":'.$dtstart.'
END:VEVENT
END:VCALENDAR';
/* set correct content-type-header */
if($event['id']){
header('Content-type: text/calendar; charset=utf-8');
header('Content-Disposition: attachment; filename=tracker_event.ics');
echo $ical;
}
else{
header('Location: /');
}
我对 icalendar 事件等比较陌生,在网上进行了详尽的研究以得出上述代码,使用虚拟值取得了一些成功,直到现在我需要用真实数据代替。
非常感谢任何帮助。
已解决。问题是我将 HTML 内容添加到 ICS 的描述部分。我完全删除了 DESCRIPTION,并将其替换为:
X-ALT-DESC;FMTTYPE=text/html:<html>'.$html.'</html>
其中 $html 将您希望显示的内容(在 Outlook 2016 中,我的部署环境)存储为 HTML 格式的内容。
现在一切都如我所愿。希望有一天这对某人有所帮助。