2011-07-14 98 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; 
      } 
     } 
    } 

当你得到事件类型,你有兴趣的项目,您可以更新数据库

相关问题