2011-05-13 23 views
6

Chcę dodać wydarzenia do mojego kalendarza programu Outlook z kodu php. Jak Outlook może zaakceptować plik z rozszerzeniem „.ics”, próbowałem ten przykładowy kod, aby wygenerować plik ICS:Dodaj wydarzenia do kalendarza programu Outlook za pomocą skryptu php.

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

Więc teraz, kiedy uruchomić ten kod w Firefox, mam pop-up z prośbą do otwórz wygenerowany plik ics za pomocą Microsoft Outlook, a ja go otworzyłem i zapisałem go do programu Outlook, a na końcu wydarzenie zostało dodane w programie Outlook.

Ale czy jest sposób, w jaki mogę zautomatyzować ten proces? Mam na myśli, czy mogę zapisać wydarzenie w kalendarzu Outlooka bezpośrednio ze skryptu php, bez potrzeby generowania pliku ics i zapisywania go?

+1

Jesteś świadomy dodanie łącza off-topic podobnego do Twojego pytania to spam? – Albireo

+0

Oh .. Albiero, przepraszam .. usunę ten link. Pomyślałem, że wspomnę ten link, żeby rzucić okiem na obecny scenariusz mnie. –

Odpowiedz

3

W jaki sposób aplikacja serwera powinna mieć dostęp do aplikacji klienckiej? Możesz wysłać wiadomość e-mail do swojego klienta z pozycją kalendarza. Być może jest to nieco bardziej komfortowe dla Twojego użytkownika.

+0

Czy mogę dodać zdarzenie do serwera wymiany za pomocą WEBDAV, a następnie zsynchronizować serwer wymiany z przeglądarką użytkownika. –

+0

@dskanth Sry, to pytanie nie mogę odpowiedzieć. – DanielB

-3

Nie możesz.

PHP to język skryptowy do tworzenia (głównie) stron internetowych i działa na serwerach internetowych. Nie może modyfikować komputerów użytkowników.

Nawiasem mówiąc, nie sądzę, że można - w jakikolwiek sposób - wstawić wydarzenie do kalendarza użytkownika bez jakiejkolwiek interakcji użytkownika. Poza względami technicznymi, jest to kwestia bezpieczeństwa, nie można ingerować w komputery innych ludzi.

+0

Mam wrażenie, że są jeszcze 2 opcje. Jednym z nich jest użycie WEBDAV do dodania zdarzenia z php do serwera wymiany, a następnie zsynchronizowanie go z programem Outlook. Drugą dziwną opcją jest przesłanie wygenerowanego pliku ics do folderu zdarzeń kalendarza Outlook na komputerze. Ale to dziwne. Więc patrząc na pierwszą opcję. –

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

To nie zadziała w widoku ... –

4

Jeśli nie zostały wdrożone go jeszcze, CalDAV (http://caldav.calconnect.org/) przewiduje rozszerzenia kalendarzy do WebDAV, jeśli trzeba dodać tę funkcjonalność do swojej stronie. DAViCAL (http://www.davical.org/) wydaje się oferować rozwiązanie twojego problemu, ale ja go nie użyłem, więc YMMV na nim.

3

Grałem z tym i Outlook automatycznie doda go do kalendarza, jeśli wyślesz go jako e-mail, a adres od to ten sam adres e-mail, co konfiguracja konta w Outlooku. Gdy program Outlook pobierze wiadomość, automatycznie doda ją do kalendarza.

+0

Może to być trudne w przypadku niektórych serwerów, które sprawdzają poprawność adresu od. na przykład Jeśli spróbuję wysłać wiadomość e-mail na moje konto uż[email protected], używając adresu "[email protected]", Gmail odmówi wysłania, ponieważ podejrzewa, że ​​próbuję utworzyć wiadomość e-mail. Idealnie potrzebujesz danych uwierzytelniających użytkownika SMTP, aby móc wysłać wiadomość e-mail ze swojego konta. – Cerin

2

Zrobiłem to z PHP, tworząc w zasadzie osobne wydarzenie ical na oddzielnym pliku php, który nie wymaga żadnych dodatkowych bibliotek dla tych, którzy wciąż tam chcą to zrobić. Outlook/iCal event with PHP

zasadzie zrobił to jak ten

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"; 
Powiązane problemy