繁体   English   中英

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

[英]Adding calendar appointments with Exchange web services and PHP

我在这里有一个有趣的难题,我希望有人至少可以告诉我我可能的解决方案是否真的可行。

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

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

但这个想法是使用 email,其唯一目的是跟踪这些响应和事件。 然后我将在单独的服务器上使用 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;
           }
       }
   }

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM