¿La mejor manera de acceder a Exchange usando PHP?


Estoy escribiendo una aplicación CMS en PHP y uno de los requisitos es que debe ser capaz de interactuar con el servidor Exchange del cliente. He escrito esta funcionalidad un par de veces antes y siempre he utilizado WebDAV para hacerlo, pero ahora me estoy alejando de eso.

Ejecutaré el sitio en IIS O Apache (sin preferencias) en Windows server 2008. Algunas cosas que tendría que hacer incluyen agregar contactos a la libreta de direcciones de un usuario determinado, enviar correos electrónicos como un determinado informes de usuario y ejecución de contactos para un usuario.

Todo esto es bastante fácil de hacer con WebDAV, pero si hay una mejor manera que no requiere ninguna funcionalidad que es probable que sea obsoleta en el corto plazo.

¿Alguna idea?

Actualización:

Justin, me encanta la idea de usar objetos com, solo me preocupa mantener un 3er producto para que todo funcione...

John, puedo escribir un servicio web en C# para interactuar con estas funciones y acceder a él con mi aplicación PHP, pero también está un poco fuera del camino.

Hasta ahora, no estoy 100% convencido de que cualquiera de estos sea mejor que WebDAV...

¿Alguien puede mostrarme dónde estoy siendo tonto?

Author: Abdulla Nilam, 2008-08-03

8 answers

No he usado PHP para hacer esto, pero tengo experiencia en el uso de C# para lograr lo mismo.

La API de Outlook es una forma de automatizar Outlook en lugar de conectarse directamente a Exchange. Anteriormente he tomado este enfoque en una aplicación de C# y funciona aunque puede tener errores.

Si desea conectarse directamente al servidor de Exchange, deberá buscar MAPI extendido.

En el pasado usé este wrapper MAPIEx: Extended MAPI Wrapper .

Es un proyecto de C# pero creo que puedes usar algún código.NET en un servidor PHP5 de Windows. Alternativamente, tiene una DLL de C++ core que puede usar. He encontrado que es muy bueno y hay algunas buenas aplicaciones de ejemplo.

Actualización:

Lo sentimos por el retraso no hay forma actual de realizar un seguimiento de los mensajes todavía.

Estoy de acuerdo en agregar más capa a su aplicación y confiar en el código de terceros puede ser aterrador (y con razón.)

Hoy Me leer otro interesante post etiquetado como MAPI que está en un tema diferente. La clave aquí, sin embargo, es que se ha vinculado a este importante artículo de MS. No he sido consciente de los problemas hasta ahora en el uso de código administrado para interactuar con MAPI, aunque el código C++ en el componente no debería verse afectado por este error, ya que no está administrado.

Esta entrada del blog también sugiere otras formas de conectarse a MAPI/Exchange server. En este caso debido a estos nuevos hechos http://us3.php.net/imap puede ser la respuesta sugerida por el otro usuario.

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:46:37

¿Su cliente está usando Exchange 2007? Si es así, echaría un vistazo a Exchange Web Services . Si no, tan peludo como puede ser, creo que WebDAV es su mejor apuesta.

Personalmente no me gusta usar Outlook.Ruta del objeto COM de la aplicación, ya que sus indicaciones de seguridad ("Una aplicación está intentando acceder a sus contactos. Permitir esto?", sucesivamente.) puede causar problemas en un servidor. También creo que sería difícil lograr sus tareas de suplantación de identidad usando Outlook, como enviar correo como un usuario dado.

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-05 02:35:02

He lanzado una biblioteca con licencia MIT de código abierto que le permite hacer algunas operaciones básicas en PHP utilizando Exchange Web Services.

Intercambio de Servicios web para PHP

Solo lo he probado en Linux, pero no veo ninguna razón por la que no funcionaría en una instalación de Windows de PHP también.

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-27 11:33:33
 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-27 01:02:05

No soy un desarrollador de PHP, pero Google dice que PHP 5+ puede crear instancias de componentes COM. Si puede instalar Outlook en una caja, podría escribir un servicio web PHP alrededor del componente COM para manejar las solicitudes que necesita.

$outlook = COM("Outlook.Application")

Referencia de la API de Outlook

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-03 03:07:30

Yo buscaría en IMAP

IMAP, POP3 y 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-27 11:33:41

Esta extensión Zarafa PHP MAPI parece que podría funcionar.

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-23 08:14:08

Recomendaría usar "Servicios Web de PHP Exchange" o corto php-ews.

Buena cantidad de documentación bajo el wiki , me ayudó mucho.

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-01 13:20:33