使用Exchange web服务和PHP添加日历约会


Adding calendar appointments with Exchange web services and PHP

我有一个有趣的难题,我希望至少有人能告诉我,如果我可能的解决方案实际上是可能的。

我有一个PHP站点,我正在创建一个页面来创建和跟踪交换日历约会及其通知的响应。

用户添加事件的所有相关信息并保存它,事件信息存储在数据库中,创建电子邮件并发送给收件人。我正在编写ics代码,因此当接收方收到它时,它看起来就像一个约会通知,就好像它是从交换客户端发送的一样。到目前为止,一切都是金色的。

但我们的想法是使用电子邮件,其唯一目的是跟踪这些回复和事件。然后,我将在单独的服务器上使用EWS设置一个服务,因为该站点位于LAMP服务器上,它将定期检查此地址上的事件响应,并使用响应更新mysql数据库,以便它们可以显示在事件的页面上。

问题是当我创建事件并从PHP发送电子邮件时,没有为主机地址创建事件,因此当收件人选择响应选项(接受,拒绝,暂定)时,主机什么也收不到,因为响应是对它没有的事件。

是否有办法通过PHP创建事件?

或者我可以在我已经拥有的服务中添加一个方法,该方法将在主机地址上创建事件并从PHP调用它?

正如您所写:参与者对发送的邀请的反应是无用的,因为约会(您的活动)的组织者没有关于此约会的任何信息。

你可以做的是在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("joe@example.com");
app.RequiredAttendees.Add("tom@example.com");
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;
           }
       }
   }

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