2011-05-13 56 views
6

Tôi muốn thêm sự kiện vào lịch nhìn của tôi từ mã php. Như quan điểm có thể chấp nhận một tập tin của phần mở rộng ".ics", tôi đã cố gắng mẫu mã này để tạo ra một tập tin ics:Thêm sự kiện vào lịch nhìn bằng tập lệnh 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"; 
?> 

Vì vậy, bây giờ khi tôi chạy mã này trong Firefox, tôi nhận được một cửa sổ pop-up yêu cầu để mở tập tin ics được tạo ra bằng cách sử dụng Microsoft Outlook và tôi mở nó và lưu nó vào triển vọng và cuối cùng một sự kiện được thêm vào trong triển vọng.

Nhưng có cách nào tôi có thể tự động hóa quy trình này không? Tôi có nghĩa là, tôi có thể lưu trữ các sự kiện trong Outlook lịch trực tiếp từ một kịch bản php, mà không cần phải tạo một tập tin ics và lưu nó?

+1

Bạn đang nhận thức được phụ thêm một liên kết off-topic như thế cho câu hỏi của bạn là thư rác? – Albireo

+0

Oh .. Albiero, xin lỗi .. tôi sẽ xóa liên kết đó. Tôi đã đề cập đến liên kết đó để xem xét kịch bản hiện tại của tôi. –

Trả lời

3

Cách ứng dụng máy chủ của bạn có thể truy cập ứng dụng khách? Bạn có thể gửi email cho khách hàng của bạn với một mục lịch. Có thể điều này hơi thoải mái hơn cho người dùng của bạn.

+0

Tôi có thể thêm sự kiện vào máy chủ trao đổi bằng WEBDAV không, sau đó đồng bộ hóa máy chủ trao đổi với triển vọng của người dùng. –

+0

@dskanth Sry, câu hỏi đó tôi không thể trả lời. – DanielB

-3

Bạn không thể.

PHP là ngôn ngữ kịch bản để tạo (chủ yếu) các trang web và chạy trên các máy chủ web. Nó không thể sửa đổi máy tính của người dùng.

Nhân tiện, tôi không nghĩ bạn có thể - bằng bất kỳ cách nào - chèn một sự kiện vào lịch của người dùng mà không có một số tương tác của người dùng. Bên cạnh lý do kỹ thuật, nó là một vấn đề an ninh, bạn không thể đi xung quanh rối tung với máy tính của người khác.

+0

Tôi cảm thấy có 2 lựa chọn. Một là sử dụng WEBDAV để thêm sự kiện từ php vào trao đổi máy chủ và sau đó đồng bộ hóa nó với triển vọng. Tùy chọn lạ thứ hai là tải tệp ics đã tạo lên vào thư mục sự kiện lịch Outlook trong máy tính. Nhưng điều đó thật kỳ lạ. Vì vậy, nhìn vào tùy chọn đầu tiên. –

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

Điều này sẽ không hoạt động trong triển vọng ... –

4

Nếu bạn chưa triển khai, CalDAV (http://caldav.calconnect.org/) cung cấp tiện ích mở rộng lịch cho WebDAV, nếu bạn cần thêm chức năng này vào trang web của mình. DAViCAL (http://www.davical.org/) dường như cung cấp một giải pháp cho vấn đề của bạn nhưng tôi đã không sử dụng nó để YMMV trên đó.

3

Tôi đã chơi với điều này và Outlook sẽ tự động thêm nó vào lịch nếu bạn gửi nó dưới dạng email và địa chỉ từ cùng một địa chỉ email như thiết lập tài khoản trong Outlook. Ngay khi Outlook tải xuống thư, nó sẽ tự động thêm nó vào lịch.

+0

Điều này có thể khó khăn với một số máy chủ xác thực địa chỉ từ đó. ví dụ. Nếu tôi cố gắng gửi email bằng tài khoản [email protected] của mình bằng cách sử dụng "[email protected]", Gmail sẽ từ chối gửi vì nó cho rằng tôi đang cố gắng giả mạo email. Bạn lý tưởng cần thông tin đăng nhập smtp của người dùng để bạn có thể gửi email từ tài khoản của họ. – Cerin

2

Tôi đã làm điều này với PHP, về cơ bản tạo một sự kiện ical nội tuyến trên một tệp php riêng biệt mà không yêu cầu bất kỳ thư viện bổ sung nào cho bạn vẫn muốn thực hiện. Outlook/iCal event with PHP

Về cơ bản đã làm nó như thế này

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"; 
Các vấn đề liên quan