选择某个 API 或技术开发适用于 Outlook 的解决方案

本文介绍 API 和相关技术,用户可以将它们用于扩展 Outlook 2013 和 Outlook 2016,并帮助决定适用于用户方案的 API 或技术。

Microsoft 支持各类 API 以及扩展 Outlook 的技术:

  • 从 Office 2013 开始,适用于 Office 平台的应用为在桌面、平板电脑和智能手机上跨 Outlook 客户端扩展 Outlook 功能提供了实现的可能。 此平台包括适用于 Office 的 JavaScript API 和适用于应用清单的架构。

  • 对象模型、相应的 Outlook 主互操作程序集 (PIA) 和消息传递 API (MAPI) 已是 Outlook 解决方案中最常使用的 API。

  • 辅助 API 在几种方案中补充了 MAPI。

  • Outlook Social Connector (OSC) 提供程序可扩展性和天气栏可扩展性服务于其间隙市场的特定方案。

这篇文章介绍适用于 Office 外接程序平台、对象模型、PIA 和 MAPI 的选择条件。 请注意,Office 外接程序使用适用于 Office 的 JavaScript API 并且不会调用对象模型,反之亦然。 使用其他 API 的解决方案可以使用一个或多个 API。 例如,在 C++ 中编写的 COM 外接程序可以在同一个解决方案中使用对象模型、MAPI 和辅助 API。

要从这篇文章获得最大收益,您应熟悉用户级别的 Outlook 并具备常规软件开发的知识。 但是,不需要您全面了解这些 API 或相关技术支持的功能。 本文可帮助回答下列问题:

  • 如果您仅对您的解决方案的目标、目标市场和可用资源有所了解,那么在选择 API 时您还要考虑哪些其他条件?

  • 为什么您要考虑 Office 外接程序,您应在何时选择创建应用程序而不是外接程序?

  • 如果您的解决方案必须在早期版本的 Outlook(包括 Outlook 2003)中运行,那么它将对您的 API 选择有何影响?

  • 如果您的解决方案必须在包含数千个项目的 Outlook 文件夹中循环执行操作,同时您需要修改这些项目,那么哪种 API 是最适合的?

  • 如果您的解决方案非常依赖于 Outlook 业务逻辑,并且还与其他 Office 应用程序进行交互,那么 Outlook 对象模型是否为最佳选择?

  • 对象模型和 MAPI 允许您在 Outlook 中扩展哪些项?

  • 如果可以使用对象模型或 MAPI 来完成任务,那么应如何决定使用哪个 API 呢?

对象评估标准

此部分描述了可用于比较 Office 外接程序平台、对象模型、PIA 和 MAPI 的条件以确定哪一个可以更好地满足您的需求。 不同条件的重要性的增减取决于您的项目和可用的资源。

此部分中的表格定义了以下类别的评估条件:

  • 功能条件 - 介绍您可以或不可以借助技术执行的操作。

  • 开发条件 - 介绍使用技术所需的开发工具或信息

  • 安全条件 - 介绍与技术相关的安全和权限问题。

  • 部署条件 - 介绍针对技术推荐的部署和分发方法。

适用于 Office 平台的相关应用程序的目标评估条件

从 Office 2013 开始,开发人员可以使用 Office 外接程序平台将 Web 服务和内容扩展到 Office 富客户端和 Web 客户端的上下文环境中。 Office 外接程序是一个使用常见 Web 技术开发的网页,它托管在 Office 客户端应用程序(如 Outlook)中,并可在本地或在云中运行。 在几种 Office 外接程序类型当中,Outlook 支持的类型被称为邮件应用程序。 虽然对象模型、PIA 和 MAPI 通常用于在应用程序级别自动化 Outlook,然而您可以使用适用于 Office 的 JavaScript API 在项目级别与电子邮件的内容和属性、会议请求或约会进行交互。 您可以将邮件应用程序发布到 Office 商店或内部 Exchange 目录。

最终用户和管理员可以在 Exchange 邮箱上安装邮件应用程序,并在 Outlook 富客户端和 Outlook Web App 中使用邮件应用程序。 作为开发人员,您可以选择仅限在桌面上使用的邮件应用程序,也可选择在平板电脑或智能手机上使用。 图 1 显示了在示例:创建邮件应用程序以查看 Outlook 中的 YouTube 视频中详细介绍的 YouTube 邮件应用程序的示例。 YouTube 邮件应用程序允许最终用户选择 YouTube 视频的 URL 并在台式机或平板电脑上观看 Outlook 或 Outlook Web App 中的视频。

图 1. 选定的邮件的 YouTube 邮件应用程序处于活动状态,其中包含指向 YouTube.com 上视频的 URL

Outlook 中的 YouTube 邮件应用程序

在用户安装邮件应用程序后,如果当前上下文与应用程序指定的激活条件匹配,则该应用程序可在应用程序栏中使用。 邮件应用程序允许您指定有关当前所选项目的规则,以便仅在满足特定条件时才激活邮件应用程序。 例如,仅当所选的 Outlook 项目包含一个指向 YouTube.com 上某个视频的 URL 时,才会关联使您可以在 Outlook 中播放 YouTube 视频的 YouTube 邮件应用程序。 在这种情况下,您应指定仅在所选的邮件包含此类 URL 时该应用程序才应处于活动状态。

下表显示 Office 外接程序平台的评估条件。

功能条件

条件 Office 平台的应用程序中提供的邮件应用程序支持
应用程序域 邮件应用的活动范围实际上是指用户所选的满足激活条件的 Exchange 邮箱中的任何受支持的邮件或约会项目。 邮件应用的权限决定了它对该项目存在的属性和特定实体(如电子邮件地址或电话号码)的访问权限。 例如,请求读/写邮箱权限的邮件应用可以读取和写入用户邮箱中任何项目的所有属性;创建、读取和写入任何文件夹或项目;并从该邮箱发送某个项目。
主要对象 适用于 Office 的 JavaScript API 提供了由所有类型的 Office 外接程序共享的最高级别的一些对象:OfficeContextAysncResult。 适用且特定于邮件应用程序的 API 中的下一个级别的对象包括 MailboxItemUserProfile 对象,它们支持访问有关当前在用户邮箱中选定的用户和项目的信息。 在数据级别, CustomPropertiesRoamingSettings 对象都支持保留邮件应用程序分别为所选的项目和用户的邮箱设置的属性。 项目级对象包括从 Item 继承的 AppointmentMessage 对象,以及从 Message 继承的 MeetingRequest 对象。 这些表示支持邮件应用程序的 Outlook 项目的类型:约会和会议的日历项和诸如电子邮件、会议请求、响应和取消等邮件项目。 API 中除此级别外,还有项目级属性(如 Appointment.subject) 以及支持某些已知的 Entities 对象(例如 ContactMeetingSuggestionPhoneNumberTaskSuggestion)的对象和属性。 请参阅Outlook 外接程序体系结构和功能概述,了解有关邮件应用程序支持的功能摘要。
数据访问模型 适用于 Office 的 JavaScript API 表示可作为一组分层对象的下列功能:应用程序的运行时环境、用户的邮箱和配置文件和与某个项目相关的数据。
线程模型 每个邮件应用程序都在独立于 Outlook 进程的自身进程中执行操作。
应用程序体系结构 在 Outlook 中,邮件应用程序是作为单独的进程托管在 Web 浏览器控件内的一组 HTML 和 JavaScript 网页,反过来,它们也可托管在提供安全和性能隔离的应用程序运行时进程内。
远程使用情况 邮件应用程序使用适用于 Office 的 JavaScript API 来访问有关当前用户、邮箱和存储在相应 Exchange Server 上的选定项目的数据。 如果它们具有相应的权限并使用相应技术跨域进行访问,则邮件应用程序还可以调用 Exchange Web 服务和其他第三方 Web 服务来扩展其功能。
事务 适用于 Office 的 JavaScript API 不支持事务。
可用性 从 Outlook 2013 开始,适用于 Office 的 JavaScript API 可供 Exchange Server 2013 上的邮箱使用。

开发条件

条件 Office 平台的应用程序中提供的邮件应用程序支持
语言和工具 您可以使用任何常见的 Web 技术(包括 HTML5、JavaScript、CSS3、XML 和 REST API)来实现邮件应用程序。 您可以使用您的首选的 Web 开发工具。 或者,使用 Napa、Visual Studio 2008,或这些工具的更高版本来提供了便利,节省您的开发时间。
托管实现 如果适用于您方案,则您可以使用托管的 .aspx 页来实现适用于您的邮件应用程序的服务器端代码。
可脚本化 适用于 Office 的 JavaScript API 可在脚本中直接使用。
测试和调试工具 您可以使用您喜欢的任何 Web 开发工具。 Napa 和 Visual Studio 提供集成开发环境,便于应用测试和调试。 Outlook 加载项激活疑难解答示例:Outlook 项目的调试属性 提供了进一步的帮助来排查和调试邮件应用。
专家可用性 具有所需的 Web 开发专业技能级别的 Office 外接程序程序员相对比较容易找到。 该平台适用于专业开发人员和非专业开发人员。
可查看的信息 有关开发和发布 Office 外接程序的信息可在构建适用于 Office 和 SharePoint 的应用程序中找到。 适用于邮件应用程序的特定文档可在Outlook 外接程序中找到。
开发人员和部署许可 请参阅 许可 Office 和 SharePoint 加载项,了解有关 Office 外接程序应用程序许可证框架的信息。

安全条件

条件 Office 平台的应用程序中提供的邮件应用程序支持
设计时权限 开发邮件应用程序不需要任何特定的权限。
安装权限 默认情况下,最终用户和管理员可以安装低信任度的需要“受限”或“读取项”权限的邮件应用程序,而管理员可以安装高信任度的需要“读/写邮箱”权限的邮件应用程序。
运行时权限 邮件应用请求基于三层权限模型的特定权限级别:受限读取项读/写邮箱
内置的安全功能 Office 外接程序运行时提供以下优势来防止应用破坏最终用户的环境:隔离运行应用的进程。 不涉及 .dll 或 .exe 替换项或 ActiveX 组件。 让最终用户可以轻松安装或卸载应用程序。 管理员和最终用户有权控制可提供的邮件应用程序以及控制在安装邮件应用程序之前是否授予请求的权限。 在有富客户端的情况下,管理对内存和 CPU 的使用以防止受到拒绝服务的恶意攻击。
安全监视功能 对于邮件应用,将监视以下资源:CPU 核心使用情况。 内存使用率。 故障数。 阻止应用程序的时长。 正则表达式响应时间。 重新计算正则表达式的次数。 管理员可以覆盖控制资源使用率的默认设置。

部署条件

条件 Office 平台的应用程序中提供的邮件应用程序支持
服务器平台要求 为其安装邮件应用程序的用户邮箱必须使用的是 Exchange Server 2013 或更高版本。
客户端平台要求 对于将运行在 Outlook 富客户端、Outlook 2013 和 Internet Explorer 9 上或运行在这些应用程序的更高版本上的邮件应用程序,要求必须安装在本地计算机上。
部署方法 您可以将邮件应用程序发布到 Office 商店或发布到对该 Exchange Server 上的用户提供该应用程序的 Exchange 目录。 然后,管理员或用户可以通过使用 Exchange 管理中心 (EAC) 或通过运行远程 Windows PowerShell cmdlet,选择从 Office 商店或 Exchange 目录安装邮件应用程序。 您可以从 Outlook Backstage 视图或 Outlook Web App,或通过直接登录到您邮箱的 EAC 来访问 EAC。 有关详细信息,请参阅部署和安装 Outlook 外接程序以进行测试
部署说明 一旦您在 Outlook 或 Outlook Web App 上安装了邮件应用程序,该邮件应用程序即可在这两个 Outlook 客户端上供该邮箱使用。

对象模型和 PIA 的目标评估条件

在客户端计算机上运行的解决方案可以使用 Outlook 对象模型或 PIA 以编程方式访问 Outlook 项目,如联系人、邮件、日历项目、会议请求和任务。 与 MAPI 不同,Outlook 对象模型和 PIA 可以提供 Outlook 用户界面更改的事件通知,例如更改当前文件夹或显示 Outlook 检查器。

注意

[!注释] 对于访问存储在 Microsoft Exchange 邮箱或个人文件夹 (.pst) 文件中的数据的解决方案,则必须将 Outlook 安装并配置在该应用程序运行所在的客户端计算机上。 > Outlook 对象模型和 PIA 支持相同的功能来扩展 Outlook。 PIA 定义托管的接口,该接口可映射到基于 COM 的对象模型并与托管的解决方案进行交互。 在本节后面的讨论中,大部分功能、安全性和部署条件都采用相同的方式应用于对象模型和 PIA。 有关 PIA 如何促进 COM 与.NET Framework之间的互操作性的详细信息,请参阅 COM 与 .NET 之间的互操作性简介Outlook PIA 的体系结构

下表显示 Outlook 对象模型和 PIA 的评估条件。

功能条件

条件 Outlook 对象模型或 PIA
应用程序域 使用 Outlook 对象模型或 PIA 的外接程序或独立的应用程序通常处理特定于用户的邮件、自定义 Outlook 用户界面,或创建适用于特定解决方案(如与 Outlook 集成的客户关系管理 (CRM) 解决方案)的自定义项类型。 Outlook 对象模型或 PIA 有时会在非正式的工作流过程中(尤其是在不允许在 Microsoft Exchange 服务器上进行应用程序开发时)用于邮件处理。 与基于浏览器的客户端不同的是,当用户在处于脱机状态或与公司网络断开连接时,缓存模式操作允许执行 Outlook 解决方案。
主要对象 Outlook 对象模型和 PIA 中的顶级对象为 Outlook Application 对象。 ExplorersConversationInspectorsViewsNavigationPaneSolutionsModuleFormRegion 和相关的对象表示 Outlook 用户界面的元素。 NameSpaceStoresFoldersAccountsAccountSelectorAddressEntriesExchangeUser 和相关的对象支持扩展 Outlook 会话、配置文件、用户帐户、邮件存储和文件夹。 在数据级别,大量的项目级对象,例如 MailItemAppointmentItemContactItemTaskItem 表示内置的 Outlook 项类型。 PropertyAccessorTableSearchItemPropertiesUserDefinedPropertiesAttachmentsCategoriesRecipientsRecurrencePatternRemindersRules 和相关的对象支持自定义和处理项目级对象。
数据访问模型 Outlook 对象模型和 PIA 表示作为带有层次结构的一组对象和集合的所有数据。
线程模型 在 Outlook 的主前台线程上执行所有对 Outlook 对象模型和 PIA 的调用。 Outlook 对象模型支持的唯一线程模型是单线程单元 (STA)。 从后台线程调用 Outlook 对象模型或 PIA 是不受支持的并且会导致您的解决方案出错和出现意外的结果。
应用程序体系结构 通常,COM 外接程序和其他 Office 应用程序使用 Outlook 对象模型扩展 Outlook。 托管的解决方案可以使用 Visual Studio 和.NET Framework 的 Outlook PIA 和 COM 互操作性层来访问 Outlook 对象模型。 Visual Studio 提供模板和其他类库和清单以方便使用 Office 文档和应用程序自定义项。 有关使用 Visual Studio 为 Outlook 开发托管的外接程序的详细信息,请参阅Architecture of Application-Level Add-InsOutlook Solutions。 Outlook 对象模型还支持 Visual Basic for Applications (VBA) 宏和 Windows Scripting Host (WSH),但不支持 Windows 服务应用程序。
远程使用情况 可以仅在安装了 Outlook 的计算机上使用 Outlook 对象模型和 PIA。 可以使用 Outlook 对象模型来访问存储在 Exchange 中的可在 Outlook 应用程序中使用的信息。
事务 Outlook 对象模型和 PIA 不支持事务。
可用性 Outlook 对象模型当前可在 Outlook 的所有版本中使用。 从 Outlook 2003 开始,PIA 可在 Outlook 版本中使用。 每个新版本的 Outlook 中都具有扩展项和改进项。

开发条件

条件 Outlook 对象模型或 PIA
语言和工具 可以使用任何 COM 或自动化兼容的语言(如 Visual Basic 或 C#)以及非 COM 语言(如本机 C 或 C ++)来执行 Outlook 对象模型应用程序。 Microsoft Visual Studio 2010 中的 Microsoft Office 开发工具是开发 Outlook 2010 和 Outlook 2007 的托管加载项的首选工具。 适用于 Microsoft Office System 的 Microsoft Visual Studio 2005 工具是 Outlook 2003 的首选工具。 还可以使用 Visual Studio 2010 中的 Office 开发工具为 32 位和 64 位版本的 Outlook 创建解决方案。 在 Visual Studio 2010 中的 Office 开发工具或 Microsoft Office System 的 Microsoft Visual Studio 工具中构建解决方案时,为目标平台指定任何 CPU 选项会导致产生同时适用于 32 位 和 64 位版本的 Outlook 2010 的托管解决方案。
托管实现 Outlook PIA 允许在托管代码环境中使用 Outlook 对象模型,该环境由一组丰富的类库和支持技术支持,这些库和支持技术解决了 VBA 和 COM 加载项的许多限制。PIA 是一种 COM 包装器,充当托管环境与 COM 环境之间的桥梁。 有关详细信息,请参阅Why Use the Outlook PIA
可脚本化 可以在脚本中使用 Outlook 对象模型。
测试和调试工具 使用 Outlook 对象模型或 PIA 不需要任何特殊的调试工具。 另一方面,您可以使用 Visual Studio 提供方便进行应用程序测试和调试的集成开发环境。
专家可用性 通过使用 Outlook 对象模型或 PIA 成功地开发应用程序的开发人员相对容易找到。 Outlook 对象模型和 PIA 适用于使用常用的开发工具(如 Visual Studio)创建的外接程序。 这些工具提供可简化开发过程的设计时环境。
可查看的信息 Microsoft 和第三方资源提供了有关通过使用 Outlook 对象模型进行编程的信息。 有关 Outlook 对象模型的详细信息,请参阅 Outlook 2010 开发人员参考。 有关 Outlook PIA 的详细信息,请参阅 Outlook 2010 主互操作程序集引用。 有关通过在 Visual Studio 中使用 Office 开发工具开发的托管 Outlook 解决方案的示例,请参阅使用 Visual Studio 创建的 Outlook 解决方案
开发人员和部署许可 请参阅您的 Exchange 和 Microsoft Developer Network (MSDN) 订阅许可协议以确定在您的应用程序中使用 Outlook 和 Outlook 对象模型是否需要其他许可证。

安全条件

条件 Outlook 对象模型或 PIA
设计时权限 通过使用 Outlook 对象模型或 PIA 开发应用程序不需要任何特殊的权限。
安装权限 安装使用 Outlook 对象模型或 PIA 的应用程序不需要任何特殊权限。 但是,安装 Office 和 Outlook 需要本地管理员权限。
运行时权限 运行使用 Outlook 对象模型或 PIA 的应用程序不需要任何特殊权限。
内置的安全功能 Outlook 对象模型和 PIA 通过使用 MAPI 与 Exchange 进行通信,通过使用 Active Directory 服务接口 (ADSI) 与 Active Directory 进行通信。 运行应用程序的用户的当前安全上下文可用于确定代码可访问的资源。 默认情况下,信任外接程序对 Outlook 对象模型或 PIA 中的所有对象、属性和方法具有完全访问权限。 IT 管理员可以控制哪些外接程序和对象可以访问 Outlook 对象模型或 PIA。 Outlook 对象模型和 PIA 阻止运行在 Outlook 进程外部的代码访问安全对象和方法。
安全监视功能 Outlook 监视加载项的以下指标,以确定它是否应禁用加载项:启动关闭文件夹开关打开项目 调用 频率 管理员可以使用组策略替代用户设置和控制在用户计算机上运行的加载项。 有关详细信息,请参阅 保持启用外接程序的性能标准

部署条件

条件 Outlook 对象模型或 PIA
服务器平台要求 Outlook 对象模型和 PIA 是客户端技术。
客户端平台要求 使用 Outlook 对象模型或 PIA 访问 Exchange 数据的应用程序要求在本地计算机上安装 Outlook。
部署方法 使用 Outlook 对象模型或 PIA 的应用程序通过使用标准的应用程序安装软件进行分发。
部署说明 因为不应在 Exchange Server 上安装 Outlook,所以使用 Outlook 对象模型或 PIA 的应用程序无法在 Exchange Server 上运行。

MAPI 的目标评估标准

您可以使用 MAPI 来访问公用和私人存储中的项目和文件夹,以及访问通过每个项目存储的属性。 所有版本的 Outlook 都使用 MAPI。 您可以创建使用 MAPI 的客户端,也可以创建 MAPI 服务器和 MAPI 窗体处理程序。 此部分中的信息仅适用于 MAPI 客户端应用程序。

注意

[!注释] MAPI 是用于访问在 Exchange 或个人文件夹 (.pst) 文件中的信息的成熟机制,并且 MAPI 提供了一些在任何其他 API 中不提供的功能。 但是,在 Intranet 外部 MAPI 不起作用,而且它在 MAPI 会话持续进行的时间段中还要维护打开的连接,同时 MAPI 学起来也比较难。 MAPI 不会强制执行 Outlook 业务逻辑,因此您必须特别小心以确保对 Outlook 业务逻辑的维持。

下表显示了对 MAPI 的评估条件。

功能条件

条件 MAPI
应用程序域 使用 MAPI 的客户端应用程序访问存储在 Exchange 中的用户邮箱或公用文件夹信息以及存储在 Active Directory 中的用户目录信息。 使用 MAPI 的客户端应用程序通常是电子邮件客户端(如 Outlook)和需要进行复杂电子邮件处理的应用程序。
主要对象 MAPI 对象全部通过 IMAPISession: IUnknown 界面获取。 会话对象提供对对象的客户端访问,以使用 MAPI 配置文件、状态、邮件服务提供程序管理、邮件存储表和通讯簿。 邮件存储表包含有关邮件存储、文件夹、邮件、附件和收件人的对象。 地址簿表包含有关邮件用户和通讯组列表的对象。
数据访问模型 MAPI 表示作为一组分层对象的邮件和用户。
线程模型 没有特定的线程处理限制。 但是,由于封送对象的成本较高,使用自由线程的应用程序应避免在多个线程中共享 MAPI 对象。 MAPI 和 MAPI 服务提供程序使用自由线程。
应用程序体系结构 MAPI 客户端应用程序通常是基于 Windows 窗体的客户端应用程序。 但是,您可以使用 MAPI 编写 N 层应用程序。
远程使用情况 MAPI 使用远程过程调用 (RPC) 与 Exchange Server 进行通信。 通常有意阻止 RPC 通过 Internet 防火墙。
事务 MAPI 不支持事务。
可用性 MAPI 存根当前附带 Windows 的所有版本。 在安装 Outlook 时,Office 安装它自己的 MAPI 子系统。 此时预计不会对 MAPI 进行任何更改。

开发条件

条件 MAPI
语言和工具 您可以通过使用 C 或 C++ 来直接访问 MAPI。 可以访问 C/C++ 调用会议的其他语言可能无法访问 MAPI。 不支持使用托管语言,如 Visual Basic 或 C# 。 您必须为 32 位和 64 位版本的 Outlook 编译单独的 MAPI 解决方案。
托管实现 MAPI 是一个非托管的组件。 在 Visual Studio 和.NET Framework 的 COM 互操作性层下不支持使用 MAPI。
可脚本化 不能在脚本中直接使用 MAPI。
测试和调试工具 不需要任何特殊的调试工具来调试使用 MAPI 的应用程序。 另一方面,您可以使用 MFCMAPI。 MFCMAPI 通过图形用户界面使用 MAPI 来提供对 MAPI 存储的访问,当您通过使用 MAPI 来扩展 Outlook 时还能促进对问题进行调查。
专家可用性 专家 MAPI 编程人员可能很难找,并且学习该技术可能需要很长时间。 除了 Microsoft 社区,只有一小部分高质量的第三方网站提供了有关 MAPI 开发的有用信息。
可查看的信息 介绍 MAPI 编程的 Microsoft 和第三方书籍均可用。
开发人员和部署许可 开发使用 MAPI 的应用程序不需要特殊许可。

安全条件

条件 MAPI
设计时权限 开发人员必须有权访问 Exchange 存储中的数据。 Exchange 会将用户和通讯组列表信息存储在 Active Directory 中,因此创建访问该信息的 MAPI 客户端应用程序的开发人员必须能够检索和设置该信息。
安装权限 设置基于 MAPI 的应用程序通常要求用户是本地管理员或有权安装软件。
运行时权限 运行基于 MAPI 的应用程序通常仅需要用户具有足够的权限来访问 Exchange 存储或个人文件夹 (.pst) 文件上的数据。
内置的安全功能 MAPI 配置文件在大多数平台上受密码保护。

部署条件

条件 MAPI
服务器平台要求 为 MAPI 客户端应用程序的用户存储用户数据所在的 Exchange Server 必须经过正确配置,以允许 MAPI 客户端进行访问。
客户端平台要求 客户端应用程序安装程序应该验证 MAPI 的正确版本是否可在计算机上使用,是否通过使用 Mapisvc.inf 文件正确完成了配置。
部署方法 可以通过使用标准的软件分发技术将使用 MAPI 的应用程序部署到客户端计算机。
部署说明 安装程序应该验证正确版本的 MAPI 是否可用。

适用于 Office 平台的应用程序的决定因素

因为 Office 外接程序使用 Web 技术,所以它们最适合连接到云或本地服务,并将服务引入富客户端和 Web 客户端的上下文环境。 通过请求适当的权限,邮件应用程序还允许在邮箱中执行读取、写入或发送邮件的操作。

与外接程序相比,邮件应用程序是开发人员的更好选择的常见原因如下:

  • 您可以使用现有知识和 Web 技术(如 HTML、JavaScript 和 CSS)的优点。 对于高级用户和开发人员新手来说,提升 XML、HTML 和 JavaScript 技能所需的时间比起基于 COM 的 API(包括对象模型和 MAPI)要少很多。

  • 您可以使用简单的 Web 部署模型来更新 Web 服务器上的邮件应用程序(包括应用程序使用的 Web 服务)而无需在 Outlook 客户端上执行任何复杂的安装。 事实上,对邮件应用程序(应用程序清单除外)的任何更新都不需要在 Office 客户端上进行任何更新。 您只需在 Web 服务器上就可以方便地对邮件应用程序的代码或用户界面进行更新。 这在更新外接程序所涉及的管理开销方面提供了明显的优势。

  • 您可以对邮件应用程序使用常见的 Web 开发平台,使它能够在桌面、平板电脑和智能手机上跨 Outlook 富客户端和 Outlook Web App 进行漫游。 另一方面,外接程序使用 Outlook 富客户端的对象模型,只能在台式机设备类型上的该富客户端上运行。

  • 通过 Office 商店,您可以快速完成生成和发布应用程序操作。

  • 由于三层权限模型的原因,用户和管理员会觉得邮件应用程序比外接程序具有更好的安全性和隐私性,它对用户的配置文件中的每个帐户的内容都具有完全访问权限。 因此反过来,也会促进用户使用该应用程序。

  • 根据您的方案,将存在一些您可以使用但外接程序不支持的专用于邮件应用程序的功能:

    • 您可以只针对某些上下文环境指定要激活的邮件应用程序(例如,仅当用户选定的约会的邮件类是 IPM.Appointment.Contoso,或者电子邮件的正文包含程序包跟踪号码或客户标识符时,Outlook 才将该应用程序显示在应用程序栏中)。

    • 如果所选的邮件中包含一些已知的实体,如地址、联系人、电子邮件地址、会议建议或任务建议,则您可以激活某个邮件应用程序。

    • 您可以充分利用标识令牌的身份验证功能以及 Exchange Web 服务。

但是,以下功能仅针对外接程序,因此在某些情况下可能使得您选择外接程序比选择邮件应用程序更合适:

  • 您可以在应用程序级别使用外接程序来扩展或自动化 Outlook,因为对象模型和 PIA 已经广泛地与 Outlook 功能(如所有 Outlook 项类型、用户界面、会话和规则)实现了集成。 在项目级别,外接程序可以在阅读或撰写模式下与项目进行交互。 使用邮件应用程序,您就不能在应用程序级别自动化 Outlook,并且在用户邮箱中,您只能在受支持的项目(邮件和约会)的只读模式上下文环境中扩展 Outlook 的功能。

  • 您可以指定新项目类型的自定义业务逻辑。

  • 您可以在功能区和 Backstage 视图中修改并添加自定义命令。

  • 您可以显示自定义窗体页或窗体区域。

  • 您可以检测事件,如发送邮件或修改邮件属性。

  • 您可以在 Outlook 2013 和 Exchange Server 2013 以及 Outlook 和 Exchange 的早期版本上使用外接程序。 另一方面,从 Outlook 2013 和 Exchange Server 2013 开始,邮件应用可与 Outlook 和 Exchange 配合使用,但不适用于早期版本。

有关对象模型和 PIA 支持的方案的详细信息,请参阅下一节对象模型或 PIA 的决定因素。 有关对 Office 外接程序平台与其他 Office 相关扩展性技术的比较,请参阅 Office 和 SharePoint 相关应用程序的背景

对象模型或 PIA 的决定因素

Outlook 对象模型或 PIA 支持的主要基准方案

一般情况下,如果解决方案自定义 Outlook 用户界面或依赖于 Outlook 的业务逻辑,请使用对象模型或 PIA。 以下是 Outlook 解决方案使用对象模型或 PIA 时对应的主要基准方案。

从 Outlook 2007 开始,对象模型或 PIA 支持的方案

除了这些基准方案,如果你的 Outlook 解决方案支持以下列表中的任一方案并且你的解决方案适合运行在 Outlook 2007 或更高版本,而非早期版本上,那么你可以使用对象模型或 PIA。 本节指定你可以在 Outlook 对象模型中用来扩展每种方案的主对象或成员(Visual Studio 自动化对象模型中的 IDTExtensibility2 接口和 Office 对象模型中的 IRibbonExtensibility 接口除外,你可以将这些接口与 Outlook 对象模型进行集成)。

从 Outlook 2010 开始,对象模型或 PIA 支持的方案

如果你的 Outlook 解决方案适合运行在 Outlook 2010 上,而不是早期版本上,则可以选择使用对象模型或 PIA 来支持下一节所示的方案。 本节指定你可以在 Outlook 对象模型中用来扩展每种方案的主对象或成员(Office 对象模型中的 IRibbonControlIRibbonExtensibilityIRibbonUI 接口除外,你可以将这些接口与 Outlook 对象模型集成)。

从 Outlook 2013 开始,对象模型或 PIA 支持的方案

如果你的解决方案适合运行在 Outlook 2013 上,而不是早期版本上,则可以使用对象模型或 PIA 来支持以下资源中所示的方案。

MAPI 的决定因素

通常情况下,您使用 MAPI 来访问基于 MAPI 的服务器上的数据(如 Microsoft Exchange Server)并执行以下任务:

  • 创建自定义服务提供程序,如通讯簿提供程序、传输提供程序或存储提供程序。

  • 创建一个接收器进程。

  • 创建或管理配置文件。

  • 运行作为 Windows NT 服务的应用程序。

  • 在后台线程上运行任务。 例如,枚举文件夹中的多个项目和修改后台线程中项目的属性可以优化性能。

有关详细信息和代码示例,请参阅 Outlook MAPI 引用MFCMAPI

此外,如果您的解决方案运行在早于 Outlook 2007 的 Outlook 版本上,并且如下所示的方案已应用到您的解决方案,则您应使用 MAPI 来扩展这些方案。

  • 设置和获取未在对象模型中公开的内置项目级属性。
  • 管理帐户、附件、Exchange 通讯组列表、Exchange 用户或存储。
  • 存储解决方案的专用数据。
  • 管理帐户的邮件存储。

从 Outlook 2007 开始,对象模型可以支持许多功能,而在 Outlook 2007 之前,开发人员将不得不求助于 MAPI 或其他 API(如 Microsoft 协作数据对象 (CDO) 1.2.1 和 Microsoft Exchange 客户端扩展)。 因此如果上面列表中的任何方案适用于您的解决方案,但您的解决方案运行在 Outlook 2007 或 Outlook 2010 中,您可以并且应该使用 Outlook 对象模型或 PIA 来支持这些方案。 有关可统一 Outlook 开发技术的 Outlook 2007 增强功能的详细信息,请参阅 What's New for Developers in Outlook 2007 (Part 1 of 2)

辅助 API 的决定因素

在对象模型或 MAPI 不提供解决方案的某些情况下,可以将 Outlook 辅助 API 与 Outlook 业务逻辑或 MAPI 进行集成。 在下列情况中使用 Outlook 辅助 API:

  • 帐户管理:管理帐户信息、管理帐户、提供有关帐户更改的通知和保护帐户免受垃圾邮件的影响。
  • 数据降级:使用首选的字符格式包装对象,而不是使用其本身的格式公开对象。
  • 重定日历和时区的基本值支持:重定 Outlook 日历基本值以支持夏令时。
  • 忙/闲状态:在日历上提供忙/闲信息。
  • 联系人图片:确定 Outlook 中对联系人图片的显示。
  • 项目货币:确定 Outlook 项是否存在未保存的更改。
  • 对项目的分类:发送项目后对 Outlook 项进行分类。

有关辅助 API 的详细信息,请参阅其他资源 - 辅助 API 部分。

根据进程内和进程外的解决方案自动化 Outlook

注意

本节和下节中对自动化 Outlook 的讨论超出了 Office 外接程序(旨在扩展 Office 客户端或 Web 应用程序功能而非实现自动执行功能)的范围。

Outlook 支持自动化,通过使用运行在与 Outlook 进程相同的前台进程中的外接程序以及通过使用运行在 Outlook 进程之外的独立进程中的独立解决方案来实现。 通常,若要使 Outlook 自动运行,可以通过对象模型、PIA 或 MAPI 来使用外接程序与 Outlook 进行交互,在少数情况下,可通过辅助 API(如 HrProcessConvActionForSentItem)进行。 仅在必要时(例如,当您正在编写 MAPI 客户端应用程序 - 该应用程序使用 Tzmovelib.dll 文件重定客户的 Outlook 日历基本值;或当枚举文件夹中的多个项目并修改后台线程中用于优化性能的项目属性时)才使用进程外的解决方案。

加载项是自动执行 Outlook 的首选解决方案,因为 Outlook 仅信任在加载项的 OnConnection (Object、ext_ConnectMode、Object、Array) 事件期间传递给加载项的 Application 对象。 您可以通过从此 Application 对象派生出所有对象、属性和方法来避免显示对象模型保护的安全警告。 如果外接程序创建 Application 对象的新实例,则 Outlook 不信任该对象,即使加载项位于受信任的加载项列表中也是如此。从此类 Application 对象派生的任何对象、属性和方法将不受信任,被阻止的属性和方法将调用安全警告。 有关 Outlook 对象模型保护的详细信息,请参阅 Security Behavior of the Outlook Object Model

根据托管和非托管解决方案自动化 Outlook

Outlook 支持使用托管或非托管语言编写的外接程序和独立应用程序的自动化操作。 使用频率较高的托管语言是 C# 和 Visual Basic。 C++ 和 Delphi 工具在非托管开发中较为常见。 当在托管和非托管开发之间进行选择时,可用的专业技能是一个要考虑的因素。

如果您的解决方案仅使用对象模型,则可以考虑使用 PIA 或使用 Visual Studio 中的 Office 开发工具来开发托管的解决方案。 Visual Studio 中的 Office 开发工具提供了项目模板和可视化设计器,从而简化了创建自定义用户界面和开发 Office 解决方案的方法。

此外,由于 MAPI 的开发比 .NET Framework 早了好几年,并且 Microsoft 不为 MAPI 提供托管的包装,因此 Microsoft 不支持在托管代码中使用 MAPI。 如果您使用的是 MAPI,则必须开发非托管的解决方案。 有关详细信息,请参阅客户端邮件开发的支持准则

间隙 API 和技术

Outlook Social Connector (OSC) 和天气栏支持在 Outlook 中扩展非常具体的方案。

Outlook Social Connector (OSC) 提供程序扩展性

Outlook Social Connector (OSC) 提供程序扩展支持为社交网络开发提供程序以允许用户在 Outlook 和其他 Office 客户端应用程序中查看该社交网络上的朋友和活动更新。 图 6 中显示了 OSC,它可以在人员窗格中显示社交网络网站中某个人员的活动。

图 6. 在人员窗格中显示社交网络数据的 OSC

Outlook Social Connector 窗格

Outlook 中的 OSC 允许用户在人员窗格中查看从 Outlook 中的某个人员发来电子邮件、附件和会议请求的聚合。 在组织环境中,在 SharePoint 网站进行协作的用户可以在 SharePoint 网站上看到此人的文档更新和其他网站活动。 Outlook Social Connector 提供程序扩展支持开发可用于同步和显示 Outlook 中的社交网络更新的 OSC 提供程序。 在默认情况下,常见的 OSC 提供程序(如 Facebook 和 LinkedIn)将通过 Outlook 进行安装。 根据 Outlook 用户已登录的社交网络网站,用户可以在人员窗格中看到相应的社交网络上的照片、状态和活动等更新信息。

天气栏可扩展性

从 Outlook 2013 开始,天气栏使开发人员能够为天气栏插入第三方天气 Web 服务,以便提供用户选择位置的天气状况数据。 Outlook 中的天气栏显示某个地理位置的天气情况和天气预报。 用户可以选择一个或多个位置,并方便地在日历模块中查看天气栏中的天气数据。 图 7 显示的天气栏显示纽约州的纽约市未来三天的天气预报。

图 7. Outlook 中的天气栏

显示纽约的预报的天气栏。

在默认情况下,Outlook 使用 MSN 天气提供的天气数据。 天气栏支持第三方天气数据 Web 服务,该服务需遵守已定义的与 Outlook 进行通信的协议。 只要第三方天气数据服务支持该协议,则用户可以选择该天气数据服务,从而在天气栏中提供天气数据。

请参阅其他资源 - 主要引用、资源和代码示例部分,了解有关使用 OSC 提供程序扩展和天气栏可扩展性的详细信息。

总结

若要确定适用于您的解决方案的最佳 API 或技术,您必须首先定义您的解决方案的目标:

  • 规划您的解决方案支持的 Outlook 版本。

  • 您的解决方案的高优先级方案。 您的解决方案主要与邮件或约会项目的内容和属性进行交互吗? 或者您的解决方案是否在应用程序级别自动化 Outlook? 如果是这样,那么这些方案是否涉及枚举、筛选或修改包含许多 Outlook 项目的文件夹?

首先,验证邮件应用程序支持在 Office 外接程序平台上是否满足您的需求。 请参阅适用于 Office 平台的相关应用程序的目标评估条件中的功能条件部分,以确定主要对象和功能是否支持您的方案。 请参阅 适用于 Office 平台的应用程序的决定因素部分,以验证与外接程序相比,邮件应用程序是否是您的方案更好的选择。 通常情况下,如果可能,将您的解决方案作为应用程序进行开发,以使用不同设备类型跨 Outlook 客户端实现充分利用该平台支持的目的。

如果您的方案不仅仅需要您扩展邮件和约会项目,或要求您在应用程序级别自动化 Outlook,请尝试将您的方案与对象模型或 PIA 的决定因素部分中列出的那些项进行匹配。 如果您的目标 Outlook 版本的对象模型(或 PIA)支持您的方案,并且您的解决方案不管理包含许多项目的文件夹,则您应该使用托管或非托管语言将您的解决方案作为外接程序来实现。

如果目标 Outlook 版本的对象模型(或 PIA)不支持您的某些方案,请验证这些方案在 MAPI 的决定因素辅助 API 的决定因素部分中是否满足您的需求。 如果 MAPI 满足您的需求,则应在非托管代码中实现您的解决方案。 如果辅助 API 可解决您的某个方案,则您可以使用托管代码或非托管代码。

如果您的解决方案使用 MAPI,您必须在非托管代码(如 C++)中实现它。 否则,确定使用托管代码或非托管代码来创建解决方案通常取决于您的可用资源及其专业知识。 至于确定是否将解决方案作为外接程序或独立的应用程序来实现,请选择外接程序以避免用户不断调用 Outlook 对象模型保护,除非您的方案需要管理包含许多项目的文件夹。 在后一种方案中,将解决方案作为后台线程来运行可以优化 Outlook 性能。

如果您的方案中包含显示 Outlook 中的社交网络信息或更新,您应使用 OSC 提供程序扩展来创建 COM 可见的 DLL。 您可以使用托管或非托管语言来执行此操作。

如果您有兴趣向天气栏插入第三方天气数据服务,您可以按照天气栏可扩展性定义的协议执行操作并提供适当的 Web 服务。 您可以使用托管语言创建这些 Web 服务。

在您决定在您的解决方案中使用 API 或技术之后,您可以参考其他资源 - 主要引用、资源和代码示例部分中的其他文档和代码示例,以了解详细信息。

Office 加载项平台概述提供了对 Office 外接程序的详细介绍,包括体系结构和开发生命周期。

有关开发邮件应用的详细资源路线图,请参阅 Outlook 加载项

另请参阅:对象模型和 PIA

以下资源提供有关使用对象模型和 PIA 的详细信息。

帐户 - 配置文件中的多个帐户

通讯簿和 Exchange 用户

附件

  • 向邮件项附加文件

  • 附件文件类型受限于 Outlook 2010

  • Attachment 对象

  • AttachmentSelection 对象

  • 每个项目对象的 AttachmentAdd 事件

  • 每个项目对象的 AttachmentRead 事件

  • 每个项目对象的 AttachmentRemove 事件

  • 每个项目对象的 BeforeAttachmentAdd 事件

  • 每个项目对象的 BeforeAttachmentPreview 事件

  • 每个项目对象的 BeforeAttachmentRead 事件

  • 每个项目对象的 BeforeAttachmentSave 事件

  • 每个项目对象的 BeforeAttachmentWrite 事件

附件:检查器中的所选内容

自动化 Outlook

类别

联系人:检查地址和全名

对话

事件

资源管理器:内嵌响应

项目:基本属性、字段和窗体

项目:自定义属性

项目:枚举、筛选和排序

项目:标记为任务的标记

请参阅某些项目对象(如 MailItem 对象)中与任务相关的以下属性:

项目:资源管理器中的所选内容

杂项:名片、规则和视图

安全性

共享

解决方案:特定于解决方案的文件夹

解决方案:存储数据

用户界面:自定义窗体区域

用户界面:自 Outlook 2007 以来进行自定义

用户界面:自 Outlook 2010 以来进行自定义

用户界面:特定于解决方案的文件夹

另请参阅:辅助 API

以下资源提供有关 Outlook 辅助 API 的详细信息。

帐户管理

对项目进行分类

联系人图片

数据下降

忙/闲状态

项目货币

重定基址日历

另请参阅:主引用、资源和代码示例

以下资源提供有关主 Outlook 引用、资源和代码示例的详细信息。

主要引用和资源

代码示例