2011-05-13 160 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";