2011-05-13 157 views
6

我想从php代码中将事件添加到我的Outlook日历中。如Outlook可以接受的扩展名“的.ics”文件,我已经试过此示例代码来生成ICS文件:当我运行在Firefox这个代码使用php脚本将活动添加到Outlook日历中

<?php 
header("Content-Type: text/Calendar"); 
header("Content-Disposition: inline; filename=calendar.ics"); 
echo "BEGIN:VCALENDAR\n"; 
echo "VERSION:2.0\n"; 
echo "PRODID:www.testMeiCalendar.net\n"; 
echo "METHOD:REQUEST\n"; // requied by Outlook 
echo "BEGIN:VEVENT\n"; 
echo "DTSTART:201T230000\n"; 
echo "DTEND:20110101T010000\n"; 
echo "SUMMARY:New Years Eve Reminder\n"; 
echo "LOCATION:Downtown\n"; 
echo "DESCRIPTION:Let's get together for New Years Eve\n"; 
echo "UID:ABCD1234\n"; 
echo "SEQUENCE:0\n"; 
echo "DTSTAMP:20101125T112600\n"; 
echo "END:VEVENT\n"; 
echo "END:VCALENDAR\n"; 
?> 

所以,现在,我有一个弹出窗口,询问到使用Microsoft Outlook打开生成的ics文件,然后打开它并将其保存到Outlook中,最后在Outlook中添加一个事件。

但是,有没有办法可以自动完成这一过程?我的意思是,我可以直接从PHP脚本将事件存储在Outlook日历中,而无需生成一个ics文件并保存它?

+1

你知道附加这样的闲谈链接到你的问题是垃圾邮件? – Albireo 2011-05-13 09:44:26

+0

哦.. Albiero,对不起..我将删除该链接。我想提一下这个链接来看看我目前的情况。 – 2011-05-13 09:50:09

回答

3

您的服务器应用程序应该如何访问客户端应用程序?您可以通过日历条目向您的客户发送电子邮件。也许这对你的用户来说稍微舒适些。

+0

我可以使用WEBDAV将事件添加到交换服务器,然后将交换服务器与用户的Outlook同步。 – 2011-05-17 06:00:21

+0

@dskanth Sry,那个问题我无法回答。 – DanielB 2011-05-17 07:04:44

-3

你不能。

PHP是一种脚本语言来创建(主要)的网页,并运行Web服务器上。它不能修改用户的计算机。

顺便说一句,我不认为你可以 - 以任何方式 - 插入事件到用户的日历中没有某种类型的用户互动。除了技术上的原因,这是一个安全问题,你不能绕开其他人的电脑。

+0

我觉得还有2个选择。一种是使用WEBDAV从php添加事件到交换服务器,然后与outlook同步。第二个奇怪的选择是将生成的ics文件上传到pc中的Outlook日历事件文件夹。但那很奇怪。所以看第一个选项。 – 2011-05-17 05:57:53

5
<?php 
/** 
* @category iCalendar 
* @description Basic code for sending an event invitation. 
* @version 1.0 
*/ 

//Create ICAL Content (Google rfc 2445 for details and examples of usage) 
//reference : http://www.mavetju.org/programming/outlook-ics.php 

$message="BEGIN:VCALENDAR 
VERSION:2.0 
CALSCALE:GREGORIAN 
METHOD:REQUEST 
BEGIN:VEVENT 
DTSTART:20110718T121000Z 
DTEND:20110718T131000Z 
DTSTAMP:20110525T075116Z 
ORGANIZER;CN=From Name:mailto:from email id 
UID:12345678 
ATTENDEE;PARTSTAT=NEEDS-ACTION;RSVP= TRUE;CN=Sample:mailto:[email protected] 
DESCRIPTION:This is a test of iCalendar event invitation. 
LOCATION: Kochi 
SEQUENCE:0 
STATUS:CONFIRMED 
SUMMARY:Test iCalendar 
TRANSP:OPAQUE 
END:VEVENT 
END:VCALENDAR"; 

/*Setting the header part, this is important */ 
$headers = "From: From Name <From Mail>\n"; 
$headers .= "MIME-Version: 1.0\n"; 
$headers .= "Content-Type: text/calendar; method=REQUEST;\n"; 
$headers .= '  charset="UTF-8"'; 
$headers .= "\n"; 
$headers .= "Content-Transfer-Encoding: 7bit"; 

/*mail content , attaching the ics detail in the mail as content*/ 
$subject = "Meeting Subject"; 
$subject = html_entity_decode($subject, ENT_QUOTES, 'UTF-8'); 

/*mail send*/ 
if(mail("To email", $subject, $message, $headers)) { 

    echo "sent"; 
}else { 
    echo "error"; 
} 

?> 
+1

这在Outlook中不起作用... – 2014-07-01 04:14:12

4

如果你没有实现它,的CalDAV(http://caldav.calconnect.org/)提供日历扩展WebDAV的,如果你需要这个功能添加到您的网站。 DAViCAL(http://www.davical.org/)似乎为您的问题提供了解决方案,但我没有使用它,所以YMMV就可以了。

3

我这个玩周围,如果你把它作为一个电子邮件和从地址是相同的电子邮件地址在Outlook帐户设置的Outlook会自动将其添加到日历。 Outlook下载邮件后,会自动将其添加到日历中。

+0

对于验证发件人地址的某些服务器,这可能很难。例如如果我尝试使用“from = [email protected]”与我的[email protected]帐户发送电子邮件,则Gmail会拒绝发送,因为它认为我正在尝试伪造电子邮件。您理想情况下需要用户的smtp凭据,以便您可以从其帐户发送电子邮件。 – Cerin 2014-08-04 16:49:31

2

我这样做用PHP,主要建立在不要求任何额外的库,对于那些你仍然在那里想要做一个单独的PHP文件中的iCal事件直列。 Outlook/iCal event with PHP

基本上做到了这样的

echo "BEGIN:VCALENDAR\n"; 
echo "VERSION:2.0\n"; 
echo "PRODID:-//YourSite//NONSGML YourSite//EN\n"; 
echo "METHOD:PUBLISH\n"; // required by Outlook 
echo "BEGIN:VEVENT\n"; 
echo "UID:".date('Ymd').'T'.date('His')."-".rand()."-yoursite.com\n"; // required by Outlook 
echo "DTSTAMP:".date('Ymd').'T'.date('His')."\n"; // required by Outlook 
echo "DTSTART:$year"."$month"."$day"."T"."$time\n"; //20120824T093200 (Datetime format required) 
echo "SUMMARY:$summary\n"; 
echo "DESCRIPTION: this is just a test\n"; 
echo "END:VEVENT\n"; 
echo "END:VCALENDAR\n";