Добавление встреч в календаре с помощью веб-служб Exchange и PHP - PullRequest
0 голосов
/ 14 июля 2011

У меня есть интересная головоломка, и я надеюсь, что кто-то хотя бы скажет мне, возможно ли на самом деле мое возможное решение.

У меня есть сайт PHP, на котором я создаю страницу для создания и отслеживания ответов на обмен календарными встречами и их уведомлениями.

Пользователь добавляет всю соответствующую информацию о событии и сохраняет ее, информация о событии сохраняется в БД, а электронное письмо создается и отправляется получателям. Я пишу код ics, поэтому, когда получатели получают его, это выглядит как уведомление о встрече, как будто оно было отправлено от клиента обмена. До этого момента все золотое.

Но идея в том, чтобы использовать электронную почту, единственная цель которой - отслеживать эти ответы и события. Затем у меня будет служба, использующая настройку EWS, на отдельном сервере, так как сайт находится на сервере LAMP, который будет периодически проверять события по этому адресу на наличие ответов и обновлять базу данных mysql ответами, чтобы они могли отображаться на страница событий.

Проблема в том, что когда я создаю событие и отправляю электронные письма из PHP, для адреса хоста не создается событие, поэтому, когда получатель выбирает вариант ответа (принятый, отклоненный, предварительный), хост ничего не получает как ответ на событие, которого у него нет.

Есть ли способ создать событие через PHP?

Или я мог бы добавить к уже существующей службе метод, который создаст событие по адресу хоста и вызовет его из PHP?

1 Ответ

0 голосов
/ 20 июля 2011

Как вы писали: реакция участников на отправленное приглашение бесполезна, поскольку у организатора встречи (вашего мероприятия) нет никакой информации об этой встрече.

Что вы можете сделать, это добавить создание в календаре хоста встречи в 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;
           }
       }
   }

И вы можете обновить свою базу данных, когда получите тип события для интересующих вас предметов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...