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

时间:2008-08-03 00:03:59

标签: php windows exchange-server webdav mapi

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

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

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

有什么想法吗?

更新

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

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

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

有人能告诉我我在哪里傻吗?

9 个答案:

答案 0 :(得分:21)

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

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

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

过去我使用过这个包装MAPIEx: Extended MAPI Wrapper

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

更新

对于延迟暂时没有跟踪帖子的方法感到抱歉。

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

今天我读了另一个interesting post标记为MAPI的另一个主题。但关键是它与this important MS article相关联。到目前为止,我一直没有意识到使用托管代码与MAPI接口的问题,尽管组件中的C ++代码应该不受此错误的影响,因为它是非托管的。

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

答案 1 :(得分:13)

您的客户是否使用Exchange 2007?如果是这样,我会看一下Exchange Web Services。如果没有,尽可能毛茸茸,我认为WebDAV是你最好的选择。

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

答案 2 :(得分:9)

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

Exchange Web Services for PHP

我只是在Linux上测试过,但我没有看到为什么它也不适用于PHP的Windows安装。

答案 3 :(得分:8)

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

答案 4 :(得分:5)

我不是PHP开发者,但Google表示PHP 5+可以实例化COM组件。如果您可以在一个盒子上安装Outlook,您可以围绕COM组件编写PHP Web服务来处理您需要的请求。

$outlook = COM("Outlook.Application")

Outlook API referance

答案 5 :(得分:4)

这个Zarafa PHP MAPI扩展名看起来可行。

答案 6 :(得分:4)

我建议使用PHP Exchange Web Services或短 php-ews。

wiki下的大量文档对我帮助很大。

答案 7 :(得分:3)

我会研究IMAP

IMAP, POP3 and NNTP

答案 8 :(得分:0)

jQuery Bootstrap Touch Keyboard (jQBTK)

最近一次更新是在3个月前,因此它得到了维护