Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用php脚本将事件添加到outlook日历_Php_Events_Outlook_Icalendar - Fatal编程技术网

使用php脚本将事件添加到outlook日历

使用php脚本将事件添加到outlook日历,php,events,outlook,icalendar,Php,Events,Outlook,Icalendar,我想从php代码中将事件添加到outlook日历中。由于outlook可以接受扩展名为“.ics”的文件,因此我尝试了以下示例代码来生成ics文件: <?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.

我想从php代码中将事件添加到outlook日历中。由于outlook可以接受扩展名为“.ics”的文件,因此我尝试了以下示例代码来生成ics文件:

<?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:20101231T230000\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";
?>
你不能

PHP是一种脚本语言,用于创建(主要)网页,并在web服务器上运行。它无法修改用户的计算机


顺便说一句,我认为在没有某种用户交互的情况下,您无论如何都不能将事件插入到用户的日历中。除了技术原因,这是一个安全问题,你不能到处乱动别人的电脑。

你的服务器应用程序应该如何访问客户端应用程序?您可以向您的客户发送带有日历项的电子邮件。也许这对您的用户来说稍微舒服一点。


<?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:sample@test.com
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";
}

?>

如果您还没有实现它,CalDAV(http://caldav.calconnect.org/)如果需要将此功能添加到站点,则为WebDAV提供日历扩展。大卫(http://www.davical.org/)似乎为您的问题提供了一个解决方案,但我还没有用过这么多

我已经尝试过了,如果您将其作为电子邮件发送,并且发件人地址与Outlook中的帐户设置相同,Outlook将自动将其添加到日历中。Outlook下载邮件后会自动将其添加到日历中。

我使用PHP完成了这项工作,基本上是在一个单独的PHP文件中内联创建一个ical事件,对于那些仍想这样做的人来说,不需要任何额外的库

基本上是这样做的

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";

你知道在你的问题上附加这样的离题链接是垃圾邮件吗?哦。。阿尔贝罗,对不起。。我将删除该链接。我想提到这个链接来看看我目前的情况。我觉得还有两个选择。一种是使用WEBDAV将事件从php添加到exchange服务器,然后将其与outlook同步。第二个奇怪的选项是将生成的ics文件上载到电脑中的Outlook日历事件文件夹。但这很奇怪。现在来看第一个选项。我是否可以使用WEBDAV将事件添加到exchange服务器,然后将exchange服务器与用户的outlook同步。@dskanth Sry,这个问题我无法回答。对于某些验证发件人地址的服务器,这可能会很困难。e、 g.如果我试图用我的user@gmail.com使用“来自”的帐户=bob@other.com“,Gmail将拒绝发送,因为它认为我在试图伪造电子邮件。理想情况下,您需要用户的smtp凭据,以便可以从他们的帐户发送电子邮件。