Najlepszy sposób na dostęp do Exchange za pomocą PHP?

Piszę aplikację CMS w PHP i jednym z wymagań jest to, że musi ona być w stanie połączyć się z serwerem Exchange klienta. Już kilka razy pisałem o tej funkcjonalności i zawsze używałem do tego WebDAV, ale teraz się od tego oddalam.

Będę uruchamiał stronę na IIS lub Apache (bez preferencji) na Windows server 2008. Kilka rzeczy, które muszę zrobić, to dodanie kontaktów do książki adresowej danego użytkownika, wysyłanie wiadomości e-mail jako dany użytkownika i uruchamianie raportów o kontaktach dla użytkownika.

Wszystko to jest dość łatwe do zrobienia z WebDAV, ale jeśli istnieje lepszy sposób, który nie wymaga żadnej funkcjonalności, która prawdopodobnie zostanie wycofana w najbliższym czasie.

Jakieś pomysły?

Aktualizacja:

Justin, uwielbiam pomysł korzystania z obiektów com, martwię się tylko o utrzymanie trzeciego produktu, aby wszystko działało...

John, mogę napisać web service w C# do interfejsu z tymi funkcjami i uzyskać do niego dostęp z moja aplikacja PHP, ale jest też trochę z drogi.

Jak na razie nie jestem w 100% przekonany, że któreś z nich jest lepsze niż WebDAV...

Czy ktoś może mi pokazać gdzie się wygłupiam?

Author: Abdulla Nilam, 2008-08-03

8 answers

Nie używałem do tego PHP, ale mam doświadczenie w używaniu C# do osiągnięcia tego samego.

Outlook API jest sposobem automatyzacji Outlooka, a nie łączenia się bezpośrednio z Exchange. Wcześniej podjąłem takie podejście w aplikacji C# i działa, chociaż może być wadliwy.

Jeśli chcesz połączyć się bezpośrednio z serwerem Exchange, musisz zbadać rozszerzoną mapę.

W przeszłości używałem tego wrappera MAPIEx: Extended MAPI Wrapper .

Jest to projekt C#, ale wierzę, że można użyć kodu. net na serwerze PHP5 Windows. Alternatywnie ma rdzeń C++ DLL, który może być w stanie użyć. Uważam, że jest bardzo dobry i jest kilka dobrych przykładowych aplikacji.

Aktualizacja:

Sorry za opóźnienie brak jeszcze aktualnego sposobu śledzenia postów.

Zgadzam się dodanie większej warstwy do Twojej aplikacji i poleganie na kodzie strony trzeciej może być przerażające (i słusznie.)

Dzisiaj I przeczytaj kolejny ciekawy post otagowany jako MAPI, który jest na inny temat. Najważniejsze jest jednak to, że powiązano go z tym ważnym artykułem MS . Do tej pory nie byłem świadomy problemów związanych z używaniem kodu zarządzanego do interfejsu MAPI, chociaż kod C++ w komponencie nie powinien mieć wpływu na ten błąd, ponieważ jest niezarządzany.

Ten wpis sugeruje również inne sposoby łączenia się z serwerem MAPI / Exchange. W tym przypadku ze względu na te nowe fakty http://us3.php.net/imap może być odpowiedzią sugerowaną przez innego użytkownika.

 21
Author: John,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:46:37

Czy twój Klient korzysta z Exchange 2007? Jeśli tak, rzuciłbym okiem na Exchange Web Services. Jeśli nie, to myślę, że WebDAV jest najlepszym rozwiązaniem.

Osobiście nie lubię korzystać z Outlooka.Application COM object route, zgodnie z monitami bezpieczeństwa ("aplikacja próbuje uzyskać dostęp do Twoich kontaktów. Pozwolić?", itp.) może powodować problemy na serwerze. Myślę też, że trudno byłoby wykonać zadania podobne do podszywania się za pomocą Outlooka, takie jak wysyłanie mail jako dany użytkownik.

 13
Author: Mike Powell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-05 02:35:02

Wydałem otwartoźródłową bibliotekę licencjonowaną przez MIT, która pozwala na wykonywanie podstawowych operacji w PHP przy użyciu Usług Sieciowych Exchange.

Exchange Web Services for PHP

Testowałem go tylko na Linuksie, ale nie widzę powodu, dla którego nie działałby również na instalacji PHP pod Windows.

 8
Author: Riley Dutton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-27 11:33:33

Nie mogę polecić biblioteki Redemption Data Objects. Jest to komponent COM, który zapewnia rozsądne API do rozszerzonych MAPI i jest przyjemny w użyciu. Punkty docelowe interfejsu API Exchange przechodzą z jednego wydania do drugiego: "użyj napędu M:! Nie, użyj WebDAV! Nie, użyj ExOLEDB!... Nie, skorzystaj z usług internetowych!"z jedynym stałym byciem starym dobrym MAPI.

 8
Author: Duncan Smart,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-27 01:02:05

Nie jestem programistą PHP, ale Google twierdzi, że PHP 5+ może tworzyć instancje komponentów COM. Jeśli możesz zainstalować Outlooka na pudełku, możesz napisać usługę internetową PHP wokół komponentu COM do obsługi żądań, których potrzebujesz.

$outlook = COM("Outlook.Application")

Outlook API referance

 5
Author: Justin Walgran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-03 03:07:30

Zajrzałbym do IMAP

IMAP, POP3 i NNTP

 4
Author: Tim Boland,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-27 11:33:41

This Zarafa PHP MAPI extension looks like it could work.

 4
Author: Scott Szretter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-23 08:14:08

Polecam użycie "PHP Exchange Web Services" lub krótkie php-ews.

Spora ilość dokumentacji na wiki , Bardzo mi pomogła.

 3
Author: Valentin Despa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-01 13:20:33