使用 PHP 访问 Exchange 的最佳方式?
-
08-06-2019 - |
题
我正在用 PHP 编写一个 CMS 应用程序,要求之一是它必须能够与客户的 Exchange 服务器连接。我之前已经写过几次这个功能并且一直使用 网络DAV 这样做,但现在我正在放弃这样做。
我将在 Windows Server 2008 上的 IIS 或 Apache(无偏好)上运行该网站。我需要做的一些事情包括将联系人添加到给定用户的地址簿、作为给定用户发送电子邮件以及运行有关用户联系人的报告。
所有这些都可以通过 WebDAV 轻松完成,但如果有更好的方法不需要任何可能很快就会被弃用的功能。
有任何想法吗?
更新:
贾斯汀,我喜欢使用 com 对象的想法,我只担心维护第三个产品以使一切正常工作......
John,我可以用 C# 编写一个 Web 服务来与这些功能交互,并使用我的 PHP 应用程序访问它,但这也有点麻烦。
到目前为止,我并不是 100% 确信这两者中的任何一个都比 WebDAV 更好......
谁能告诉我我哪里傻了?
解决方案
我没有使用 PHP 来做到这一点,但有使用 C# 来实现同样的事情的经验。
Outlook API 是一种自动化 Outlook 的方法,而不是直接连接到 Exchange。我之前在 C# 应用程序中采用过这种方法,它确实有效,但可能存在错误。
如果您希望直接连接到 Exchange 服务器,则需要研究扩展 MAPI。
过去我用过这个包装 地图Ex:扩展 MAPI 包装器.
这是一个 C# 项目,但我相信您可以在 PHP5 Windows 服务器上使用一些 .NET 代码。或者,它有一个您可以使用的 C++ 核心 DLL。我发现它非常好,并且有一些很好的示例应用程序。
更新:
对于延迟,我们深表歉意,目前还没有方法来跟踪帖子。
我确实同意在您的应用程序中添加更多层并依赖第 3 方代码可能会很可怕(这是理所当然的。)
今天我读了另一本 有趣的帖子 标记为关于不同主题的 MAPI。但这里的关键是它已经链接到 这篇重要的 MS 文章. 。到目前为止,我一直没有意识到使用托管代码与 MAPI 接口的问题,尽管组件中的 C++ 代码应该不受此错误的影响,因为它是非托管的。
此博客文章还建议了连接到 MAPI/Exchange 服务器的其他方法。在这种情况下,由于这些新事实 http://us3.php.net/imap 可能是其他用户建议的答案。
其他提示
您的客户使用 Exchange 2007 吗?如果是这样,我会看看 交换网络服务. 。如果没有,尽管可能很棘手,但我认为 WebDAV 是您最好的选择。
就我个人而言,我不喜欢使用 Outlook.Application COM 对象路由,因为它的安全提示(“应用程序正在尝试访问您的联系人。允许这样做吗?”等)可能会导致服务器出现问题。我还认为使用 Outlook 完成类似模拟的任务(例如作为给定用户发送邮件)会很困难。
我发布了一个 MIT 许可的开源库,它允许您使用 Exchange Web 服务在 PHP 中执行一些基本操作。
我只在 Linux 上测试过它,但我不明白为什么它不能在 Windows 安装的 PHP 上运行。
我不能推荐 Dmitry Streblechenko 的 兑换数据对象 图书馆够高。它是一个 COM 组件,为扩展 MAPI 提供了健全的 API,并且使用起来很有趣。Exchange API 目标从一个版本转移到下一个版本:“使用它们:驾驶!不,使用 WebDAV!不,使用exoledB!…不,使用Web服务!”唯一的常数是良好的旧马普。
我不是 PHP 开发人员,但 Google 说 PHP 5+ 可以实例化 COM 组件。如果您可以在盒子上安装 Outlook,您可以围绕 COM 组件编写 PHP Web 服务来处理您需要的请求。
$outlook = COM("Outlook.Application")
我建议使用 "PHP 交换网络服务" 或短 php-ews。
相当数量的文件 维基百科, ,对我帮助很大。
这 扎拉法 PHP MAPI 扩展看起来可以工作。
我会研究一下 IMAP
https://github.com/Garethp/php-ews
最后一次更新是在 3 个月前,所以仍在维护中