Как вы писали: реакция участников на отправленное приглашение бесполезна, поскольку у организатора встречи (вашего мероприятия) нет никакой информации об этой встрече.
Что вы можете сделать, это добавить создание в календаре хоста встречи в 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;
}
}
}
И вы можете обновить свою базу данных, когда получите тип события для интересующих вас предметов.