Лучший способ получить доступ к Exchange с помощью PHP?

Я пишу приложение CMS на PHP, и одним из требований является то, что оно должно иметь возможность взаимодействовать с сервером Exchange клиента. Я писал об этой функциональности несколько раз раньше и всегда использовал для этого WebDAV , но теперь я отклоняюсь от этого.

Я буду запускать сайт на IIS ИЛИ Apache (без предпочтений) на Windows server 2008. Несколько вещей, которые мне нужно будет сделать, включают добавление контактов в адресную книгу данного пользователя, отправку электронных писем от имени данного пользователя и создание отчетов по контактам для определенного пользователя. Пользователь.

Все это довольно просто сделать с помощью WebDAV, но если есть лучший способ, не требующий каких-либо функций, он, скорее всего, в ближайшее время устареет.

Любые идеи?

Обновлять:

Джастин, мне нравится идея использования com-объектов, я просто беспокоюсь о поддержке третьего продукта, чтобы все работало ...

Джон, я могу написать веб-сервис на C# для взаимодействия с этими функциями и доступа к нему с помощью моего PHP-приложения, но это также немного не в порядке.

Пока я не уверен на 100%, что любой из них лучше, чем WebDAV ...

Кто-нибудь может показать мне, где я веду себя глупо?

Ответов (9)

Решение

Обновление от 2020 года:
прошло более десяти лет с тех пор, как этот вопрос изменился. У Microsft теперь есть Rest API , который позволит вам легко получить доступ к этим данным.


Оригинальный ответ

Я не использовал PHP для этого, но имею опыт использования C# для достижения того же.

Outlook API - это способ автоматизации Outlook, а не прямого подключения к Exchange. Я ранее использовал этот подход в приложении C#, и он действительно работает, хотя может содержать ошибки.

Если вы хотите подключиться напрямую к серверу Exchange, вам необходимо изучить расширенный MAPI.

Раньше я использовал эту оболочку MAPIEx: Extended MAPI Wrapper .

Это проект C#, но я считаю, что вы можете использовать некоторый .NET-код на сервере PHP5 Windows. В качестве альтернативы у него есть основная DLL C++, которую вы можете использовать. Я считаю, что это очень хорошо, и есть несколько хороших примеров приложений.


Извините за задержку, пока нет способа отслеживать сообщения.

Я согласен с добавлением дополнительных слоев в ваше приложение, и полагаться на сторонний код может быть страшно (и это справедливо).

Сегодня я прочитал еще один интересный пост с пометкой MAPI, посвященный другой теме. Ключевым моментом здесь является то, что он связан с этой важной статьей MS . До сих пор я не знал о проблемах с использованием управляемого кода для взаимодействия с MAPI, хотя код C++ в компоненте не должен зависеть от этой ошибки, поскольку он неуправляемый.

В этой записи блога также предлагаются другие способы подключения к серверу MAPI / Exchange. В этом случае из-за этих новых фактов http://us3.php.net/imap может быть ответом, предложенным другим пользователем.

Я бы рекомендовал использовать " PHP Exchange Web Services " или короткие php-ews.

Изрядное количество документации в вики мне очень помогло.

Это расширение Zarafa PHP MAPI выглядит так, как будто оно может работать.

https://github.com/Garethp/php-ews

Последний раз он обновлялся 3 месяца назад, поэтому поддерживается

Я не разработчик PHP, но Google говорит, что PHP 5+ может создавать экземпляры компонентов COM. Если вы можете установить Outlook в ящик, вы можете написать веб-службу PHP вокруг COM-компонента для обработки необходимых вам запросов.

$outlook = COM("Outlook.Application")

Ссылка на API Outlook

Я бы посмотрел в IMAP

IMAP, POP3 и NNTP

Ваш клиент использует Exchange 2007? Если так, я бы посмотрел на веб-службы Exchange . В противном случае, насколько это возможно, WebDAV - ваш лучший выбор.

Лично мне не нравится использовать маршрут COM-объекта Outlook.Application, поскольку его запросы безопасности («Приложение пытается получить доступ к вашим контактам. Разрешить?» И т. Д.) Могут вызвать проблемы на сервере. Я также думаю, что с помощью Outlook было бы сложно выполнять ваши задачи, похожие на олицетворение, например, отправлять почту от имени данного пользователя.

Не могу порекомендовать библиотеку Redemption Data Objects Дмитрия Стреблченко . Это COM-компонент, который предоставляет разумный API для расширенного MAPI, и его приятно использовать. Цели Exchange API перемещаются от одного выпуска к другому: «Используйте диск M :.! Нет, используйте WebDAV! Нет, используйте ExOLEDB!… Нет, используйте веб-службы! » с единственной постоянной - старый добрый MAPI.

Я выпустил лицензионную библиотеку MIT с открытым исходным кодом, которая позволяет выполнять некоторые основные операции на PHP с помощью веб-служб Exchange.

Веб-службы Exchange для PHP

Я тестировал его только в Linux, но не вижу причин, почему бы он не работал и на установке PHP в Windows.