我在这里有一个有趣的难题,我希望有人至少可以告诉我,我的可能解决方案是否真的可行。
我有一个PHP网站,我在其上创建一个页面来创建和跟踪回复以交换日历约会及其通知。
用户添加有关事件的所有相关信息并保存,事件信息存储在数据库中,并创建电子邮件并发送给收件人。我正在编写代码,所以当收件人收到它时,它看起来像是一个约会通知,好像它是从交换客户端发送的。到目前为止,一切都是金色的。
但我们的想法是使用电子邮件,其唯一目的是跟踪这些回复和事件。然后我将在一个单独的服务器上使用EWS设置服务,因为该站点位于LAMP服务器上,它将定期检查此地址上的事件以获取响应,并使用响应更新mysql数据库,以便它们可以显示在活动页面。
问题是当我创建事件并从PHP发送电子邮件时,没有为主机地址创建事件,因此当收件人选择响应选项(接受,拒绝,暂定)时,主机不会收到任何内容回应是它没有的事件。
有没有办法通过PHP创建事件?
或者我可以向已经拥有的服务添加一个方法,该方法将在主机地址上创建事件并从PHP调用它吗?
答案 0 :(得分: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("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;
}
}
}
当您获得感兴趣的项目的事件类型时,您可以更新数据库。