【问题标题】:Best way to access Exchange using PHP?使用 PHP 访问 Exchange 的最佳方式?
【发布时间】:2010-09-05 06:16:47
【问题描述】:

我正在用 PHP 编写一个 CMS 应用程序,其中一项要求是它必须能够与客户的 Exchange 服务器交互。我之前已经写过几次这个功能,并且一直使用WebDAV 来完成它,但现在我不再使用它了。

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

所有这一切都可以通过 WebDAV 轻松完成,但如果有更好的方法不需要任何可能很快就会被弃用的功能。

有什么想法吗?

更新:

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

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

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

谁能告诉我我哪里傻了?

【问题讨论】:

  • 我投票给 WebDAV。如果它可以满足您的需求,请坚持下去。这是一个简单、定义明确的界面。 COM 和 consorts 是最灵活的,但文档很少,而且通常不稳定。
  • 你能指出一个在php中使用WEBDAV连接交换服务器的例子吗?我想向 Exchange 服务器添加日历事件。

标签: php windows exchange-server webdav mapi


【解决方案1】:

2020 年更新:
自从这个问题以来已经有十多年了,事情已经发生了变化。 Microsft 现在有一个Rest API,可以让您轻松访问这些数据。


原答案

我没有使用 PHP 来做到这一点,但有使用 C# 来实现相同目标的经验。

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

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

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

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


抱歉,目前还没有跟踪帖子的方法。

我同意在您的应用程序上添加更多层并依赖 3rd 方代码可能会很可怕(这是理所当然的。)

今天我读到另一个interesting post 标记为 MAPI,它是关于不同主题的。不过这里的关键是它已链接到this important MS article。直到现在我才意识到使用托管代码与 MAPI 接口的问题,尽管组件中的 C++ 代码应该不受此错误的影响,因为它是非托管的。

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

【讨论】:

    【解决方案2】:

    您的客户是否使用 Exchange 2007?如果是这样,我会看看Exchange Web Services。如果没有,尽管它可能很麻烦,但我认为 WebDAV 是你最好的选择。

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

    【讨论】:

      【解决方案3】:

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

      Exchange Web Services for PHP

      我只在 Linux 上测试过它,但我看不出它为什么不能在 Windows 安装的 PHP 上运行。

      【讨论】:

      • 您好,您能详细说明如何从我的 php 脚本在 Exchange 服务器上创建日历事件吗?
      • 有一个函数叫做“create_event”。这应该是不言自明的。 github.com/rileydutton/Exchange-Web-Services-for-PHP/blob/…
      • 谢谢,所以我需要托管交换服务器并将其与我的 php 网站集成?还要手动集成outlook和exchange服务器?您对 php-exchange 服务器集成有什么想法吗?
      • 此时(2018 年 6 月)这是最相关的答案。
      【解决方案4】:

      我不能高度推荐 Dmitry Streblechenko 的 Redemption Data Objects 库。它是一个 COM 组件,为 Extended MAPI 提供了一个健全的 API,使用起来很愉快。 Exchange API 目标从一个版本移动到下一个版本:“使用 M:驱动器!不,使用 WebDAV!不,使用 ExOLEDB!……不,使用 Web 服务!”唯一不变的是良好的旧 MAPI。

      【讨论】:

        【解决方案5】:

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

        $outlook = COM("Outlook.Application")
        

        Outlook API referance

        【讨论】:

        • 此解决方案不再相关,因为它不再处于活动状态,也不再由 Microsoft 维护。
        【解决方案6】:

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

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

        【讨论】:

          【解决方案7】:

          这个Zarafa PHP MAPI 扩展看起来可以工作。

          【讨论】:

          • 这个答案不再相关,因为它不再存在。
          【解决方案8】:

          我会研究 IMAP

          IMAP, POP3 and NNTP

          【讨论】:

            【解决方案9】:

            https://github.com/Garethp/php-ews

            最后一次更新是在 3 个月前,所以一直在维护

            【讨论】:

            • 在花了几天时间尝试不同的选项(包括 jamesiarmes/php-ews)来连接到我们的公司 Exchange 服务器 2010 并实际发送电子邮件后,我测试了这个库 github.com/Garethp/php-ews,它运行良好-盒子!感谢 Garethp Parker(开发人员)和 Justin Levene 提供链接!
            猜你喜欢
            • 2011-08-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-09-04
            • 2020-01-19
            • 2015-09-06
            相关资源
            最近更新 更多