Добавить события в календарь Outlook с помощью сценария php - PullRequest
6 голосов
/ 13 мая 2011

Я хочу добавить события в мой календарь outlook из кода php.Поскольку 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";
?>

Так что теперь, когда я запускаю этот код в Firefox, у меня появляется всплывающее окнос просьбой открыть сгенерированный файл ics с помощью Microsoft Outlook, и я открыл его и сохранил его в Outlook, и, наконец, событие добавлено в Outlook.

Но есть ли способ, которым я могу автоматизировать этот процесс?Я имею в виду, могу ли я сохранить событие в календаре Outlook непосредственно из сценария php, не создавая и не сохраняя файл ics?

Ответы [ 6 ]

5 голосов
/ 19 июля 2011
<?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";
}

?>
4 голосов
/ 19 октября 2011

Если вы еще не внедрили его, CalDAV (http://caldav.calconnect.org/) предоставляет расширения календаря для WebDAV, если вам нужно добавить эту функцию на ваш сайт. DAViCAL (http://www.davical.org/), кажется, предлагает решение вашей проблемы, но я ' Я не использовал его, поэтому YMMV на нем.

3 голосов
/ 24 мая 2012

Я поэкспериментировал с этим, и Outlook автоматически добавит его в календарь, если вы отправите его как электронное письмо, а адрес отправителя будет таким же, как в учетной записи Outlook. Как только Outlook загружает сообщение, оно автоматически добавляет его в календарь.

3 голосов
/ 13 мая 2011

Каким образом ваше серверное приложение должно иметь доступ к клиентскому приложению?Вы можете отправить электронное письмо своему клиенту с записью в календаре.Может быть, это немного удобнее для вашего пользователя.

2 голосов
/ 24 августа 2012

Я сделал это с PHP, по сути создавая встроенное событие в отдельном php-файле, которое не требует дополнительных библиотек для тех из вас, кто еще хочет это сделать. Событие Outlook / iCal с 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";
0 голосов
/ 13 мая 2011

Вы не можете.

PHP - это язык сценариев для создания (главным образом) веб-страниц и работает на веб-серверах.Он не может изменять компьютеры пользователей.

Кстати, я не думаю, что вы можете - каким-либо образом - вставить событие в календарь пользователя без какого-либо взаимодействия с пользователем.Помимо технических причин, это проблема безопасности, вы не можете возиться с компьютерами других людей.

...