使用PHP访问Exchange的最佳方法?

Bruce the Hoon 51 php windows mapi exchange-server webdav

我正在用PHP编写CMS应用程序,其中一个要求是它必须能够与客户的Exchange服务器连接.我之前已经写了几次这个功能,并且一直使用WebDAV来做这件事,但现在我不再那么做了.

我将在Windows服务器2008上运行IIS或Apache(无首选项)上的站点.我需要做的一些事情包括向给定用户的地址簿添加联系人,以给定用户身份发送电子邮件以及运行联系人的报告用户.

所有这些对于WebDAV来说都很容易,但如果有更好的方法不需要任何可能很快就被弃用的功能.

有任何想法吗?

更新:

Justin,我喜欢使用com对象的想法,我只是担心维护第三个产品以使一切工作......

John,我可以用C#编写一个Web服务来连接这些函数并使用我的PHP应用程序访问它,但它也有点偏僻.

到目前为止,我并不是100%确信其中任何一个都比WebDAV更好......

任何人都可以告诉我我在哪里傻吗?

John.. 21

我没有使用PHP来做这个,但有使用C#来实现同样的经验.

Outlook API是一种自动化Outlook的方式,而不是直接连接到Exchange.我以前在C#应用程序中采用了这种方法,虽然可能有问题,但它确实有效.

如果您希望直接连接到Exchange服务器,则需要研究扩展MAPI.

在过去,我使用了这个包装器MAPIEx:扩展MAPI Wrapper.

这是一个C#项目,但我相信你可以在PHP5 Windows服务器上使用一些.NET代码.或者它有一个C++核心DLL,你可以使用它.我发现它非常好,并且有一些很好的示例应用程序.

更新:

很抱歉延迟没有当前的方式来跟踪帖子.

我同意在您的应用程序中添加更多层,依赖第三方代码可能会让人感到恐惧(理所当然.)

今天我读了另一个有趣的帖子,标记为MAPI,是一个不同的主题.这里的关键是它与这篇重要的MS文章有关.到目前为止,我一直没有意识到使用托管代码与MAPI接口的问题,尽管组件中的C++代码应该不受此错误的影响,因为它是非托管的.

此博客条目还建议了其他连接到MAPI/Exchange服务器的方法.在这种情况下,由于这些新事实http://us3.php.net/imap可能是其他用户建议的答案.


Mike Powell.. 13

您的客户是否使用Exchange 2007?如果是这样,我将查看Exchange Web服务.如果没有,尽可能毛茸茸,我认为WebDAV是你最好的选择.

我个人不喜欢使用Outlook.Application COM对象路由,因为它的安全提示("应用程序试图访问您的联系人.允许这个?"等)可能会导致服务器出现问题.我还认为使用Outlook完成类似模拟的任务很困难,例如以给定用户身份发送邮件.


Riley Dutton.. 9

我发布了一个开源的MIT许可库,允许您使用Exchange Web服务在PHP中执行一些基本操作.

用于PHP的Exchange Web服务

我只在Linux上测试过,但我没有看到任何理由为什么它也无法在PHP的Windows安装上运行.


Duncan Smart.. 8

我不能高度推荐Dmitry Streblechenko的Redemption Data Objects库.它是一个COM组件,为扩展MAPI提供了一个理智的API,并且使用起来很愉快.Exchange API目标从一个版本移动到下一个版本:"使用M:驱动器!不,使用WebDAV!不,使用ExOLEDB!...不,使用Web服务!"唯一不变的是好的旧MAPI.


Justin Walgr.. 5

我不是PHP dev,但谷歌说PHP 5+可以实例化COM组件.如果您可以在一个盒子上安装Outlook,您可以围绕COM组件编写PHP Web服务来处理您需要的请求.

$outlook = COM("Outlook.Application")

Outlook API referance