2011-07-14 64 views
0

我在這裏有一個有趣的難題,我希望至少有人能告訴我我的可能解決方案是否可行。使用Exchange Web服務和PHP添加日曆約會

我有一個PHP網站,我正在創建一個頁面來創建和跟蹤交換日曆約會及其通知的響應。

用戶添加事件的所有相關信息並保存它,事件信息存儲在數據庫中,並且創建電子郵件併發送給收件人。我正在編寫ics代碼,因此當收件人收到它時,它看起來像約會通知,就好像它是從交換客戶端發送的一樣。到目前爲止,一切都是金色的。

但這個想法是使用電子郵件,其唯一目的是追蹤這些響應和事件。然後我將在一個單獨的服務器上使用EWS設置服務,因爲該站點位於LAMP服務器上,該服務器將定期檢查此地址上的事件以進行響應,並使用響應更新mysql數據庫,以便它們可以顯示在事件'頁面。

問題是當我創建事件並從PHP發送電子郵件時,沒有爲主機地址創建事件,因此當收件人選擇響應選項(接受,拒絕,暫定)時,主機不會收到任何內容作爲對它沒有的事件的迴應。

有沒有辦法通過PHP創建事件?

或者我可以添加一個方法到我已經有的服務上,它將在主機地址上創建事件並從PHP調用它?

回答

0

正如您所寫:參與者對發送的邀請的反應是無用的,因爲約會(您的活動)的組織者沒有關於此約會的任何信息。

您可以做的是在ExchangeServer的主機日曆中添加有關用戶使用PHP網頁創建的事件的約會創建。如果您使用適當的保存方法保存約會,並且如果您訂購了主持人的日曆文件夾事件(EWS訂閱事件不是您的),並且您將定期檢查它,則可以使用與會者的回覆更新您的記錄,邀請將自動發送。

您可以創建約會是這樣的:

Appointment app = new Appointment(_service); 
app.Start = DateTime.Now.AddMinutes(30); 
app.End = DateTime.Now.AddHours(2); 
app.Subject = "Test appointment"; 
app.RequiredAttendees.Add("[email protected]"); 
app.RequiredAttendees.Add("[email protected]"); 
app.Save(WellKnownFolderName.Calendar, SendInvitationsMode.SendOnlyToAll); 

,併爲日曆文件夾訂閱:以上

var subscription = _service.SubscribeToPullNotifications(new FolderId[] { WellKnownFolderName.Calendar }, 5, null, EventType.Created, EventType.Deleted, EventType.Modified, EventType.FreeBusyChanged); 

代碼創建關於與超時5分鐘(因此認購將日曆訂閱事件如果每5分鐘至少檢查一次,則從服務器刪除),訂閱將包含有關創建,修改,刪除或其空閒/忙碌狀態已更改的項目的事件隊列。

要查詢認購事件,你做這樣的事情:

var events = subscription.GetEvents(); 
    if (events.AllEvents.Count > 0) 
    { 
     foreach (var itemEvent in events.ItemEvents) 
     { 
      switch (itemEvent.EventType) 
      { 
       case EventType.Created: 
        break; 
       case EventType.Modified: 
        break; 
       case EventType.Copied: 
        break; 
       case EventType.FreeBusyChanged: 
        break; 
      } 
     } 
    } 

當你得到事件類型,你有興趣的項目,您可以更新數據庫

相關問題