Outlook 中面向开发人员的新增功能

本文档提供 Microsoft Outlook 2013 中面向开发人员的新增功能和增强功能的顶级视图,包括邮件应用程序、天气栏的第三方天气数据服务以及内嵌响应。该文档还介绍了对 Outlook Social Connector、Office Mobile 服务的更改,对 Outlook 2013 与 Outlook 早期版本共存的支持,以及外接程序的新性能标准。对于准备在 Outlook 平台上着手开始的开发人员,本文档将针对 Outlook 2013 编码提供足够详尽的信息。

简介

Outlook 2013 提供适用于大量新功能的编程性支持。Office 外接程序是一种新的平台,使开发人员可以使用 HTML 和 JavaScript 等基于 Web 的工具来生成出现在 Outlook 阅读窗格或检查器窗口中的应用程序。与传统 COM 外接程序不同,应用程序不需要在用户计算机上安装或更新 DLL。用户初始化邮件应用程序时,邮件应用程序使用 Office 外接程序 JavaScript 对象模型提供有关在 Outlook 富客户端和 Outlook Web App 中所选邮件的上下文信息。在您的 Web 服务器上运行您的应用程序,并且在您的 Web 内容中所做的任何更改将立即反映在您的 Outlook 客户端上运行的应用程序中。

除了应用程序,还有对新的天气栏的可扩展性支持以及 Outlook 2013 对 Outlook Social Connector 提供程序扩展性和 Office Mobile 服务的支持方式的更改。其他功能(如 Outlook 共存和外接程序性能监视)与任何对象模型不直接相关,但它们将会影响您设计和构建您的解决方案的方式。

下面是 Outlook 2013 中面向开发人员的重要更改:

  • 邮件应用程序

  • 天气栏的自定义天气服务

  • 内嵌响应和其他 Outlook 对象模型的增强功能

  • Outlook Social Connector 增强功能

  • 不再支持 Office Mobile 服务

  • 与 Outlook 早期版本共存

  • 保留已启用的外接程序的性能标准

备注

在本文所述的对象、属性、方法和事件在 Outlook 2013 的 RTM 版本中可能会有所更改。在 Outlook 2013 的 RTM 版本之前可能还会引入其他对象模型功能。在发布您的解决方案之前,请务必获取 Outlook 2013 的 RTM 版本来测试您的代码更改。

邮件应用程序

Office 外接程序是一项新功能,允许您将 Web 服务直接合并到 Outlook,而无需编写和部署传统的 Outlook 外接程序。在 Outlook 2013 中,邮件应用程序为使用单个基本代码的 Outlook 或 Outlook Web App 用户提供丰富且极具吸引力的体验。邮件应用程序将显示与 Outlook 阅读窗格相邻的应用程序窗格,或显示提供适合显示的邮件或约会的 Web 内容的检查器。应用程序是使用普遍存在的 Web 技术(如 HTML 和 JavaScript)而创建的。邮件应用程序需要 Exchange 2013,但不能供使用 Exchange 2013 早期 Exchange 版本的帐户或者使用 POP3 或 IMAP 帐户的用户使用。

以下各节简要介绍邮件应用程序体系结构、激活规则和安全模型。以下各节并不代表全面的技术参考。请参阅Office 加载项,了解有关清单架构、规则条件、内置实体和自定义正则表达式、JavaScript 对象模型以及将邮件应用程序提交到 Office 商店的详细信息。

体系结构

邮件应用程序平台的体系结构在简洁性方面很出色。Exchange 客户端(如 Outlook 富客户端或 Outlook Web App)从 Exchange 服务器下载邮件应用程序清单。XML 清单指定一组在客户端上运行并确定是否在用户选择电子邮件或约会时激活应用程序的规则。如果满足激活规则,则应用程序按钮将显示在应用程序栏上。例如,图 1 中您看到“必应地图”和“操作项”邮件应用程序都已基于所选的电子邮件的内容被激活并显示在应用程序栏上。

图 1. 在 Outlook 中显示上下文敏感型必应地图的邮件应用程序

Outlook 中的 Bing 地图邮件应用程序

当应用程序栏上显示其应用程序按钮时,说明邮件应用程序已激活。一旦用户选择该应用程序按钮,就会显示应用程序窗格,并在托管在您的 Web 服务器上的网页的 JavaScript 代码中运行初始化事件处理程序。图 2 介绍当启动 Outlook 客户端和用户在 Outlook 中选择某个项目时将发生的过程。

图 2. 邮件应用程序体系结构和启动过程

启动 Outlook 邮件应用程序时的事件流

邮件应用程序的 JavaScript 代码可以访问选定的邮件或约会项目的属性。根据应用程序请求的权限,该应用程序也可以访问自定义属性、枚举实体(如地址或会议建议)或正则表达式的匹配项,并进行 Exchange Web 服务 (EWS) 呼叫。

激活规则

激活规则控制何时在 Outlook 客户端的用户界面中激活邮件应用程序。在 XML 清单中定义规则,规则评估引擎将该规则应用于在阅读窗格或检查器窗口中选定的项目。如果规则的计算结果为 true,则应用程序按钮就出现在应用程序栏上。请注意以下几点规则:

  • 可以将多个规则进行组合以符合复杂激活需求。

    应用逻辑 And 或 Or 运算符。

    可以使用正则表达式定义这些规则。

    规则可以访问已知的实体,如电话号码、URL 和街道地址。

规则类型如下所示。

规则的类型

说明

ItemIs

可用来检查项目是否是特定类型(约会、消息或自定义消息类)的规则。例如:

<Rule xsi:type=“ItemIs” ItemType=“Message” />

ItemHasKnownEntity

可用来检查项目是否有特定实体的规则。例如:

<Rule xsi:type=“ItemHasKnownEntity” EntityType=“Address” />

ItemHasRegularExpressionMatch

可用来检查是否存在对应于指定的正则表达式的匹配项的规则。

RuleCollection

定义由多个规则组成的规则(使用 And 或 Or 进行组合)。

请注意,规则可以识别已知的实体或您在应用程序清单中定义的自定义正则表达式。

什么是已知实体?在邮件传输期间,已知的实体将由 Exchange 服务器进行分析,并在邮件上进行标记以供规则评估引擎使用。下表列出了一些可用于创建激活规则的已知实体。

已知实体的类型

激活条件

Address

美国街道地址。例如:

1 Microsoft Way, Redmond, WA 07722

Contact

与其他实体有关的个人名称。例如:

Steve Ballmer, Microsoft, 1 Microsoft Way, Redmond, WA 98052

EmailAddress

任何 SMTP 电子邮件地址。例如:

someone@contoso.com

MeetingSuggestion

对事件或会议的引用。例如:

我们下周二一起吃午饭吧。

PhoneNumber

美国电话号码。例如:

(425) 555-1212

TaskSuggestion

电子邮件中的可操作语句。例如:

请在我的计算机上安装 Office 2013。

Url

文件名或 Web 地址。例如:

https://microsoft.com

安全模型

您的邮箱包含您的隐私信息。在企业设置中,您的邮箱包含与您的客户、供应商和您的同事进行通信的特权。Outlook 保护该信息,并确保邮件应用程序保证这些信息的安全性。当用户获取邮件应用程序时,用户必须授予应用程序在其清单中请求的权限级别。如果用户没有授予该权限,则该应用程序不会安装到用户的 Exchange 邮箱中。邮件应用程序使用三层安全模型。应用程序可以执行的操作将取决于最终用户或管理员根据在应用程序清单中请求的权限给与的安全授权。请注意,请求“读/写邮箱”权限的应用程序不能由最终用户进行安装。请求“读/写邮箱”权限的应用程序必须由系统管理员安装。

图 3. 用于邮件应用程序的三层安全模型

面向用户、开发人员和管理员的三层权限模型

图 3 和下表描述了 3 个权限级别。请注意,默认的权限“受限”将限制应用程序从当前所选邮件访问个人身份信息 (PII)。如果用户授予提升的权限级别(如“读取项”,应用程序可以获取邮件的发件人或收件人之类的信息。“读/写邮箱”权限可允许应用程序调用包括能够创建或修改用户邮箱中的项目在内的功能强大的 EWS 功能子集。

操作者

清单中的权限

访问

安装低信任邮件应用程序的最终用户

Restricted

来自邮件的已知实体的子集:Address、PhoneNumber、Url

安装低信任邮件应用程序的最终用户

ReadItem

来自邮件的所有已知实体:Address、Contact、EmailAddress、MeetingSuggestion、PhoneNumber、TaskSuggestion、Url

邮件正文中的自定义正则表达式匹配项。

JSOM:

安装高信任邮件应用程序的 Exchange 管理员

ReadWriteMailbox

ReadItem 访问和以下的:

EWS:EWS API 的子集

天气栏的自定义天气数据服务

Outlook 2013 中新增的天气栏使用 MSN 天气提供用户选定位置的天气预报。第三方天气数据服务可插入 Outlook 以提供相似的天气预报。图 4 显示了显示纽约天气预报的天气栏。

图 4. 显示纽约天气预报的天气栏

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

若要插入 Outlook 天气栏,天气数据服务可以使用支持简单的第 2 部分协议的 Web 服务:

  1. 天气数据服务支持用于 Web 服务的基 URL,例如,http://service.contoso.com/data.aspx。

  2. 第 1 部分:Web 服务允许 Outlook 将以下参数附加到基 URL 中,以请求对应于用户选定位置的位置代码:

    • outputview=search,它指示请求是一个位置搜索。

    • weasearchstr=city,其中 city 指示天气信息的用户所选位置。

    • culture=LCID,其中 LCID 指示为用户安装的 Office 版本的区域性。该值在标识语言的 [RFC4646] 标记中定义

    • src=outlook,它指明 Outlook 是请求服务的客户端应用程序。

    Web 服务响应必须符合 Outlook Weather Location XML Schema

    图 5 汇总了协议的第 1 部分,通过位置代码对用户选定的位置做出请求和响应。

    图 5. 位置代码的 Web 服务请求和响应

    天气位置请求和响应

  3. 第 2 部分:Web 服务还支持 Outlook 附加以下参数,用于请求从第 1 部分获取的位置代码的预测信息:

    • wealocations=code,其中 code 是从第 1 部分获取的位置。

    • weadegreetype=degreetype,其中 degreetype 可以是温度的公制单位 c,也可以是英制单位 f。

    • culture=LCID,其中 LCID 指示 Office 版本的区域性,类似于第 1 部分中的情况。

    • src=outlook,它指明 Outlook 是请求服务的客户端应用程序,类似于第 1 部分中的情况。

    Web 服务响应必须符合 Outlook Weather Information XML Schema

    图 6 汇总了协议的第 2 部分,对用户选定位置的天气数据做出请求和响应。

    图 6. 天气信息的 Web 服务请求和响应

    天气信息请求和响应

有关详细信息,请参阅 扩展 Outlook 中的天气栏

Outlook 对象模型更改

已向 Outlook 对象模型添加新的对象、属性、方法、事件和枚举值,以提供对新 Outlook 2013 功能的可编程性支持。此外,对象模型改进解决了开发人员频繁请求更改 Outlook 平台的问题。

现有的 Outlook 对象的增强功能

下表列出了针对 Outlook 早期版本中可用的对象、集合和枚举的增强功能。“新成员”列中仅列出了新的方法、属性、事件和枚举值。

表 1. Outlook 对象模型增强功能

对象或枚举

新成员

AppointmentItem

ReadComplete 事件

ContactItem

ShowCheckAddressDialog 方法

ShowCheckFullNameDialog 方法

ReadComplete 事件

DistListItem

ReadComplete 事件

DocumentItem

ReadComplete 事件

Explorer

ActiveInlineResponse 属性

ActiveInlineResponseWordEditor 属性

InlineResponse 事件

InlineResponseClose 事件

JournalItem

ReadComplete 事件

MailItem

ReadComplete 事件

MeetingItem

ReadComplete 事件

OlAccountType

olEas 枚举值

OlBusyStatus

olWorkingElsewhere 枚举值

OlObjectClass

olClassPeopleView 枚举值

OlSearchScope

olSearchScopeCurrentStore 枚举值

OlViewType

olPeopleView 枚举值

PostItem

ReadComplete 事件

RemoteItem

ReadComplete 事件

ReportItem

ReadComplete 事件

SharingItem

ReadComplete 事件

TaskItem

ReadComplete 事件

TaskRequestAcceptItem

ReadComplete 事件

TaskRequestDeclineItem

ReadComplete 事件

TaskRequestItem

ReadComplete 事件

TaskRequestUpdateItem

ReadComplete 事件

新建对象

下表列出了 Outlook 2013 中引入的新对象。“属性”和“方法”列中列出了所有对象成员 。

表 2. Outlook 对象模型新增功能

对象

属性

方法

PeopleView

Application

Apply

Class

Copy

Filter

Delete

Language

GoToDate

LockUserChanges

Reset

Name

Save

SaveOption

Session

SortFields

Standard

ViewType

XML

弃用的对象和成员

以下是此版本的 Outlook 对象模型中主要的弃用情况:

  • 支持待办事项栏

    因为待办事项栏在 Outlook 2013 用户界面中不再受到支持,所以通过尝试使用 Explorer.ShowPane(olToDoBar) 显示或隐藏待办事项栏将返回错误。您应修改任何现有代码来处理错误或避免通过使用在 Outlook 2013 中运行的代码的 olToDoBar 常量调用 ShowPane。

  • 支持联系人链接

    联系人链接功能及其对象模型支持(通过 Link 和 Links 对象)已被弃用。现在每个项目对象的 Links 属性将返回 Null(在 Visual Basic 中则为 Nothing),并应修改任何现有代码来处理此行为。

  • MobileItem 对象。若要了解详细信息,请参阅不再支持 Office Mobile 服务部分。

下表列出 Outlook 2013 中已弃用的对象、成员,以及枚举值。“已弃用成员”列中仅列出了已弃用的对象成员和枚举值。请注意,虽然已弃用的成员隐藏在 Visual Basic 对象浏览器中,而已弃用的枚举或枚举值却没有隐藏,但无论如何也不应再在代码中使用它们。

对象、集合或枚举

已弃用的成员或枚举值

AppointmentItem

Links 属性

CalendarView

DayWeekFont 属性

DayWeekTimeFont 属性

MonthFont 属性

ContactItem

Links 属性

DistListItem

Links 属性

DocumentItem

Links 属性

异常

ItemProperties 属性

JournalItem

Links 属性

Link

ApplicationClass 属性

Item 属性

Name 属性

Parent 属性

Session 属性

Type 属性

Links

ApplicationClass 属性

Count 属性

Parent 属性

Session 属性

AddItem 方法

Remove 方法

MailItem

Links 属性

MeetingItem

Links 属性

MobileItem

属性

Actions 属性

Application 属性

Attachments 属性

BillingInformation 属性

Body 属性

Categories 属性

Class 属性

Companies 属性

ConversationIndex 属性

ConversationTopic 属性

CreationTime 属性

Count 属性

EntryID 属性

FormDescription 属性

GetInspector 属性

HTMLBody 属性

Importance 属性

ItemProperties 属性

LastModificationTime 属性

MessageClass 属性

Mileage 属性

MobileFormat 属性

NoAging 属性

OutlookInternalVersion 属性

OutlookVersion 属性

Parent 属性

PropertyAccessor 属性

ReceivedByEntryID 属性

ReceivedByName 属性

ReceivedTime 属性

Recipients 属性

ReplyRecipientNames 属性

ReplyRecipients 属性

Saved 属性

SenderEmailAddress 属性

SenderEmailType 属性

SenderName 属性

SendUsingAccount 属性

Sensitivity 属性

Sent 属性

SentOn 属性

Session 属性

Size 属性

SMILBody 属性

Subject 属性

Submitted 属性

To 属性

UnRead 属性

UserProperties 属性

方法

Close 方法

Copy 方法

Delete 方法

Display 方法

Forward 方法

Move 方法

Reply 方法

ReplyAll 方法

Save 方法

SaveAs 方法

Send 方法

事件

AttachmentAdd 事件

AttachmentReadAttachmentRemove 事件

BeforeAttachmentAdd 事件

BeforeAttachmentPreview 事件

BeforeAttachmentRead 事件

BeforeAttachmentSave 事件

BeforeAttachmentWriteToTempFile 事件

BeforeAutoSave 事件

BeforeCheckNames 事件

BeforeDelete 事件

Close 事件

CustomAction 事件

CustomPropertyChange事件事件

Forward 事件

Open 事件

PropertyChange 事件

Read 事件

ReadComplete 事件

Reply 事件

ReplyAll 事件

Send 事件

UnloadWrite 事件

NoteItem

Links 属性

OlObjectClass

olLink 枚举值

olLinks 枚举值

olMobile 枚举值

OlPane

olToDoBar 枚举值

PostItem

Links 属性

RemoteItem

Links 属性

ReportItem

Links 属性

TaskItem

Links 属性

TaskRequestAcceptItem

Links 属性

TaskRequestDeclineItem

Links 属性

TaskRequestItem

Links 属性

TaskRequestUpdateItem

Links 属性

使用内嵌响应

Outlook 2013 引入了内嵌响应功能,以便用户可以在阅读窗格中撰写响应,而不是打开新的检查器窗口。如果在发送响应之前,您的解决方案需要向撰写注释功能区中添加自定义 Office Fluent UI 控件或您需要将业务逻辑或自定义功能应用于响应消息,则您可以修改您的解决方案以使用 Explorer 对象上的新 InlineResponse 事件。

备注

仅当您在“视图”菜单中选择了在资源管理器中显示阅读窗格,您才可以使用内嵌响应。

InlineResponse 事件是检查器集合对象上的 NewInspector 事件的内嵌等效事件。当打开一个新的检查器窗口时,会激发 NewInspector 事件。当用户执行的操作导致内嵌响应显示在阅读窗格中(如下图 7 所示)时,将激发 InlineResponse 事件。

图 7. 当用户选择一个响应操作时将创建一个内嵌响应

创建内嵌响应

内嵌响应的对象模型支持

以下成员已添加到 Explorer 对象中,用以提供对内嵌响应功能的编程性支持:

成员

说明

ActiveInlineResponse 属性

在阅读窗格中返回一个表示活动内嵌响应项目的项目对象。只读。

ActiveInlineResponseWordEditor 属性

返回显示在阅读窗格中的活动内嵌响应的 Word Document 对象。只读。

InlineResponse 事件

当用户执行的操作导致内嵌响应显示在阅读窗格中时发生。

使用 InlineResponse 事件

我们来假设这样一种情况:您的代码需要插入适用于每个撰写邮件(包括回复、全部回复和转发邮件)的免责声明。由于内嵌响应是 Outlook 2013 中的默认响应模式,所以您的代码必须挂钩 Explorer 对象上 InlineResponse 事件的事件处理程序。以下 C# 代码挂钩 OutlookExplorer 类中 InlineResponse 事件的事件处理程序。在此代码示例中,OutlookExplorer 是 Explorer 对象集合的一个包装类。

public OutlookExplorer(Outlook.Explorer explorer)
{
    m_Window = explorer;

    // Hook up InlineResponse event
    m_Window.InlineResponse += 
        new Outlook.ExplorerEvents_10_InlineResponseEventHandler
        (m_Window_InlineResponse);

    // Hook up other events if applicable.
}

一旦触发了 InlineResponse 事件,示例代码会创建 m_Mail 的邮件项目实例并侦听 MailItem 对象的 PropertyChange 事件。m_Mail 是您可以用来实现您的外接程序所需的所有业务逻辑的事件感知实例变量。

示例代码将 MailItem.Size 属性与 0 进行比较,以确定内嵌响应是新的还是现有的草稿。ActiveInlineResponseWordEditor 属性会返回 Word.Document 对象 doc,它表示活动 Explorer 的活动内嵌响应。使用 Word 对象模型,该代码会将免责声明添加到此 doc 对象的开头。

// InlineResponse fires when the user creates an inline response item
void m_Window_InlineResponse(object Item)
{
    if (Item is Outlook.MailItem)
    {
        m_Mail = Item as Outlook.MailItem;
        // Hook up event-aware instance variable.
        // Use the variable to implement any business logic 
        // required by your add-in.
        m_Mail.PropertyChange += 
            new Outlook.ItemEvents_10_PropertyChangeEventHandler(
                m_Mail_PropertyChange);
        // Implement any business logic.

        // Use mail.Size to determine if item is new 
        // or is a draft inline response.
        // Size == 0 indicates a new inline response.
        if (m_Mail.Size == 0)
        {
            {
                Word.Document doc = 
                    m_Window.ActiveInlineResponseWordEditor as Word.Document;
                Word.Application wdApp = doc.Application as Word.Application;
                Word.Range rng = wdApp.ActiveDocument.Range(Start: 1);
                rng.InsertBefore("My Disclaimer...");
            }
        }
        else
        {
            // Do nothing.
        }
    }
}

请注意,ActiveInlineResponse 属性将返回表示活动内嵌响应项的 MailItem 对象。您可以对此项目使用 MailItem 对象的相同属性和方法,以下项目除外:

另一方面,如果没有内嵌响应处于活动状态,ActiveInlineResponseWordEditor 和 ActiveInlineResponse 属性将返回 null。

将自定义控件添加到撰写工具上下文选项卡中

另一个可能场景是您想要对内嵌回复扩展 Outlook 用户界面。若要扩展 Outlook 用户界面,您需要使用 Office Fluent UI 扩展,本文中不对此部分做深入的介绍。请参阅本文的最后提供的链接,了解有关扩展 Outlook 用户界面的其他信息。当内嵌响应显示在 Outlook 2013 中时,用户将看到显示在 Office Fluent 功能区中的“撰写工具”上下文选项卡。若要将您的控件添加到“撰写工具”上下文选项卡中,请将您的自定义控件添加到功能区 XML 的 <contextualTabs> </contextualTabs> 部分,该部分将被传递到 IRibbonExtensibility 界面的 GetCustomUI 方法,用于等同于“Microsoft.Outlook.Explorer”的 RibbonID。您必须使用 idMso 属性的适当值标识 tabSet 元素,在这种情况下是“TabComposeTools”。以下功能区 XML 创建图 7 中所示的 MyButton 控件。

    <contextualTabs>
      <tabSet idMso="TabComposeTools">
        <tab idMso="TabMessage">
          <group label="MyGroup" id="MyComposeToolsGroup">
            <button id="MyButtonInlineResponse"
                    size="large"
                    label="MyButton"
                    imageMso="MagicEightBall"
                    onAction="OnInlineResponseButtonClick" />
          </group>
        </tab>
      </tabSet>
    </contextualTabs>

当用户选择 MyButton 控件时,会调用 OnInlineResponseButtonClick 处理程序。以下代码示例使用 ActiveInlineResponseWordEditor 属性获取 Word.Document 对象的实例。然后,您可以使用 Word.Document 对象的所有功能插入和设置您的方案所需的文本格式。

// Callback for inline response custom button.
public void OnInlineResponseButtonClick(Office.IRibbonControl control)
{
    if (control.Context is Outlook.Explorer)
    {
        Outlook.Explorer myExplorer =
            control.Context as Outlook.Explorer;
        Word.Document doc =
        myExplorer.ActiveInlineResponseWordEditor as Word.Document;
        Word.Application wdApp = doc.Application as Word.Application;
        Word.Range rng = wdApp.ActiveDocument.Range(Start: 1,
            End: wdApp.ActiveDocument.Characters.Count);
        rng.InsertBefore("\n" + "My Disclaimer...");
    }
}

对 Outlook Social Connector 提供程序扩展所做的更改

在 Office 2013 中,Outlook Social Connector (OSC) 扩展了其作用域。它不仅允许 Outlook,还允许支持显示用户在线状态的所有 Office 客户端应用程序和联系人卡片都能够显示在专业人员或社交网络网站上应用的社交信息更新的聚合。此外,SharePoint Server、SharePoint Workspace 和 Lync 客户端还支持 OSC。

Outlook 2013 的 OSC 提供程序扩展中的一项重要更改是不再使用活动缓存对活动进行同步。如果 OSC 提供程序支持显示这些活动,则该提供程序必须根据需要来同步活动,以显示最新的活动。

此外,提供程序可以立即使用 OSC XML 架构针对某人进行额外的元数据通信,例如,askmeabout、businessAddress、interests、skills、schools、website。

有关详细信息,请参阅对于提供程序的新功能

不再支持 Office Mobile 服务

在 Office 2010 中,开发人员可以构建适用于 Office Mobile 服务 (OMS) 的 Web 服务,用于将 Outlook 和 SharePoint 的移动功能与移动设备进行集成。在 Office 2013 中,仅 SharePoint 继续支持 OMS。Outlook 2013 也已弃用了 MobileItem 对象及其成员。尝试使用 Application.CreateItem 创建 MobileItem 将返回 E_INVALIDARG。

与 Outlook 早期版本共存

共存是指能够通过 Outlook 2007 或 Outlook 2010 所在的相同计算机上的即点即用传递 Outlook 2013 的功能。共存(也称为并行安装)允许用户尝试 Outlook 2013,而无需卸载早期 Outlook 版本。即点即用是 Outlook 2013 默认的传递机制。一旦将 Outlook 2013 传递到计算机上,用户就可以运行 Outlook 2013 或在其计算机上安装的 Outlook 的早期版本。请注意,共存并不意味着同时运行两个版本的 Outlook。如果您尝试在运行 Outlook 2013 的同时运行 Outlook 的早期版本,将不支持同时运行两个版本的 Outlook,并且 Outlook 将显示一个错误对话框。

备注

Outlook 2007 之前的 Outlook 版本不支持 Outlook 2013 共存。

版本支持矩阵

本节描述可与 Outlook 2013 共存的 Outlook 早期版本的位数和安装模式。请注意以下事项:

  • MSI 指的是 Outlook 早期版本的 Microsoft 安装程序 (MSI) 安装。

  • Office 2013 的仅受支持的 Windows 版本是 Windows 7 和 Windows 8。

  • 即点即用不支持 Windows Server。

  • Outlook 2013 不支持与 Outlook 2003 或更早版本共存。

  • Outlook 2013 不支持与相同版本的 Outlook 共存 - 也就是,不支持由 MSI 安装的 Outlook 2013 和即点即用提供的 Outlook 2013 在同一台计算机上共存。

  • 不支持跨位数。用户必须始终安装匹配低级别 MSI 安装位数的即点即用版本。

版本

Outlook 2007 MSI

Outlook 2010 x86 MSI

Outlook 2010 x64 MSI

Outlook 2013 C2R x86

Outlook 2013 C2R x64

依赖于版本的配置文件

若要支持共存,Outlook 2013 将 Outlook 配置文件存储在 Windows 注册表的单独配置单元中。在第一次启动 Outlook 2013 期间,早期版本的 Outlook 中的配置文件将被迁移到 Outlook 2013 配置文件的配置单元中。在 Outlook 2013 的后续启动过程中,将不会迁移对早期版本的 Outlook 的配置文件所做的后续更改或增加功能。

Windows 注册表中的配置文件的配置单元

与在 HKCU\Software\Microsoft\Windows NT\Windows Messaging Subsystem\Profiles 下以与版本无关的方式存储配置文件的 Outlook 的早期版本不同,Outlook 2013 将配置文件存储在下列项下带有版本的配置单元中:

HKEY_CURRENT_USER\Software\Microsoft\Office\<version>\Outlook\Profiles

其中,<version> 是一个字符串,表示 xx.0 主要版本,如 Outlook 2013 的 15.0 版本。

调用 MAPI 配置文件 API

应用程序从配置文件配置单元中读取配置文件数据没有任何变化。初始化 MAPI(适用于低级别版本或最新 MAPI 版本,具体取决于应用程序的要求)之后,应用程序可以使用常见的 MAPI 配置文件 API 从相应的配置文件配置单元中读取值。

如果应用程序初始化 Outlook 2013 MAPI,MAPI 配置文件 API 会将配置文件数据读取或写入到带有版本的配置单元中。如果应用程序初始化早期版本的 Outlook 的 MAPI,则 MAPI 配置文件 API 会将配置文件数据读取或写入到独立于版本的配置单元中。

应用程序路径注册

若要防止低级别应用程序加载错误的 MAPI 版本,Outlook 2013 将修改注册表中的应用程序路径注册。加载错误 MAPI 版本的低级别版本的应用程序可能会导致在试图加载 MAPI 的应用程序中发生崩溃。通常情况下,早期版本的 Outlook 已将 Outlook 应用程序路径写入到以下项:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\OUTLOOK.EXE

即点即用的早期版本未修改 Outlook 应用程序路径。通过即点即用传递 Outlook 2013 可修改应用程序路径,如下所示:

  • 安装 Outlook 2007 或 Outlook 2010 的修补程序用于删除应用程序路径的依赖项。

    修改应用程序路径以指向 Outlook.exe 的 Outlook 2013 路径。

    Outlook 2013 的 Outlook.exe 的默认路径为 C:\Program Files\Microsoft Office 15\root\office15。

MAPI 版本控制

使用 MAPI 的应用程序调用 MAPIInitialize 函数以初始化 MAPI 会话。默认情况下,初始化 MAPI 的应用程序使用 Outlook 2013 提供的 MAPI 版本。如果您需要使用不同的 MAPI 版本,请参阅 Outlook 2013 MAPI 参考中的下列主题。

简单 MAPI

简单 MAPI 是指允许应用程序使用 MAPISendMail 或 Windows 8 中引入的新 MAPISendMailW API 发送带有附件的邮件的 API。

  • 唯一受支持的简单 MAPI API 是 MAPISendMail (Windows 7) 或 MapiSendMailW (Windows 8)。

    开发人员应考虑修改现有的简单 MAPI 代码,以使用能够提供完全 Unicode 支持并显示无模式 Outlook 检查器功能的 MAPISendMailW (Windows 8) 或 MAPISendMailHelper (Windows 7)。

    如果 Outlook 未运行或 Outlook 2013 正在运行,调用 MAPISendMail 或 MAPISendMailW 可显示 Outlook 2013 检查器。

    如果早期版本的 Outlook 正在运行,则调用 MAPISendMail 或 MAPISendMailW 会显示以下错误:

    在运行较旧版本的 Outlook 时不支持此操作。

协议处理程序

安装期间,Outlook 2013 将注册为下表中列出的常见协议的默认协议处理程序。Outlook 2013、Outlook 2010 和 Outlook 2007 支持这些协议。

协议

说明

feed:、feeds:

RSS 源处理程序

mailto:

显示 Outlook 检查器的 MailTo 链接处理程序

stssync:

SharePoint 同步处理程序

outlook:

Outlook 协议仅能够在 Outlook 项目正文或文件夹主页上使用

webcal:

webcal 协议处理程序

如果 Outlook 2013 与较旧版本的 Outlook 在同一台计算机上共存,请注意以下事项:

  • 如果没有任何早期版本的 Outlook 正在运行,则调用协议处理程序会调用 Outlook 2013 来处理协议处理程序请求。

如果某个早期版本的 Outlook 正在运行,则调用协议处理程序将使用命令行切换来调用 Outlook 早期版本,以处理请求。

文件关联

安装期间,Outlook 2013 将注册为下表中列出的常见文件关联的默认处理程序。Outlook 2013、Outlook 2010 和 Outlook 2007 支持所有这些文件扩展名。

文件关联

说明

.eml

电子邮件

.fdm

Outlook 窗体定义

.hol

Outlook 假日

.ics

iCalendar 文件

.msg

Outlook 邮件项目

.oft

Outlook 项目模板

.pst

Outlook 数据文件

.vcf

vCard 文件

.vcs

vCalendar 文件

如果 Outlook 2013 与较旧版本的 Outlook 在同一台计算机上共存,请注意以下事项:

  • 如果没有任何早期版本的 Outlook 正在运行,则从文件系统打开项目将打开 Outlook 2013 中的项。如果 Outlook 2013 尚未运行,则此操作将启动它。

  • 如果某个早期版本的 Outlook 正在运行,则从文件系统打开某个项目将导致 Outlook 2013 启动并递交请求到该早期版本的 Outlook。

共同创建 Outlook 应用程序对象

外接程序应使用 Application 对象传递回 OnConnection 事件(本机外接程序)或 ThisAddin_Startup 事件(使用 Visual Studio Tools for Office 构建的托管外接程序)中。如果您的应用程序使用 CreateObject 或使用提供了共同创建 Outlook.Application 实例的功能的其他函数来共同创建 Outlook.Application 对象,您应在共存环境中注意以下事项:

  • 如果 Outlook 未运行或 Outlook 2013 正在运行,则调用 CreateObject(“Outlook.Application”) 将返回表示 Outlook 2013 的 Outlook.Application 对象。

  • 如果早期版本的 Outlook 正在运行,则调用 CreateObject 将返回表示早期版本 Outlook 的 Outlook.Application 对象。

  • 检查 Application.Version 属性以确定正在运行的 Outlook 版本。

检测即点即用

若要检测即点即用环境中是否存在 Outlook,请验证 VirtualOutlook 项是否存在于以下注册表项中:

HKLM\Software\Microsoft\Office\15.0\Common\InstallRoot\Virtual\VirtualOutlook

如果存在 VirtualOutlook 项,那么 Outlook 已传递为即点即用应用程序。

确保您的解决方案将在共存环境中运行

由于共存是默认的传递模式,您应针对 Outlook 2013 和早期版本的 Outlook 测试您的解决方案并检查以下可能存在的问题:

  • 外接程序在以下路径下的 Windows 注册表的独立于版本的配置单元中注册

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\Outlook\Addins

    HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\Outlook\Addins

    由于外接程序注册与版本无关,所以您的外接程序应该在 Outlook 2013 或早期版本的 Outlook 正在运行时运行。请务必针对 Outlook 2013 和 Outlook 早期版本测试更新后的外接程序版本。外接程序应该使用 Application.Version 检测 Outlook 版本,并适当地调整到正在运行的 Outlook 版本。

  • 从您的代码中删除应用程序路径上的依赖项。

  • 请勿使用 Windows 注册表来枚举配置文件。改为使用 MAPI 配置文件 API。

保持启用外接程序的性能标准

扩展 Outlook 2010 的外接程序弹性支柱,Outlook 2013 可监视外接程序性能指标,如外接程序启动、关闭、文件夹切换、项目打开,以及调用频率等。Outlook 为每个性能监视指标记录已用时间(以毫秒为单位)。

例如,启动指标可度量在 Outlook 启动过程中每个已连接的外接程序所需的时间。然后,Outlook 会计算经过 5 个连续迭代后得到的启动时间中值。如果启动时间中值超过 1000 毫秒(1 秒),Outlook 将禁用该外接程序,并显示一条告知用户外接程序已被禁用的通知。用户可以选择始终启用外接程序,在此情况下,Outlook 不会禁用该外接程序,即使外接程序超过 1000 毫秒的性能阈值

监视默认禁用的外接程序性能

Outlook 使用以下条件来确定它是否应禁用外接程序。用户可以选择始终启用外接程序并将外接程序从外接程序禁用条件中予以免除。

条件

阈值(以毫秒为单位)

说明

启动

1000

测量外接程序使用 IDTExtensibility2_OnConnection 事件完成启动的时间(以毫秒为单位)。默认情况下,如果经过 5 个连续迭代后时间中位值超过性能阈值,Outlook 将禁用该外接程序。

关闭

500

测量外接程序使用 IDTExtensibility2_OnDisconnection 事件完成关闭的时间(以毫秒为单位)。仅适用于请求慢速关闭的外接程序。对于使用快速关闭的外接程序,则不受此条件的限制。如果经过 5 个连续迭代后时间中位值超过性能阈值,Outlook 将在下次启动 Outlook 时禁用该外接程序。

文件夹切换

500

测量外接程序对 Explorer 对象使用 BeforeFolderSwitchFolderSwitch 事件完成文件夹切换的时间(以毫秒为单位)。默认情况下,如果经过 5 个连续迭代后时间中位值超过性能阈值,Outlook 将禁用该外接程序。

项目打开

500

测量外接程序对某个项目使用 Open 事件完成打开项目的时间(以毫秒为单位)。默认情况下,如果经过 5 个连续迭代后时间中位值超过性能阈值,Outlook 将禁用该外接程序。

调用频率

1000

测量外接程序进行 10000 个连续调用呼叫之间的时间间隔(以毫秒为单位)。默认情况下,如果 10000 个连续呼叫和下一个 10000 个连续呼叫之间的时间间隔小于性能阈值,Outlook 将禁用该外接程序。与其他 4 个条件不同的是,此条件不会导致采用中值。

系统管理员对外接程序的控制

用户可以控制哪些外接程序可以在其计算机上运行。对于系统管理员而言,Outlook 2013 使用组策略提供了对外接程序更高级别的控制。组策略将始终覆盖用户设置,并且用户不能更改外接程序的由“托管外接程序列表”组策略配置的外接程序设置。策略项如下所示。

HKCU\Software\Policies\Microsoft\Office\15.0\Outlook\Resiliency\AddinList

名称

托管外接程序列表

说明

此策略设置允许您指定始终启用、始终禁用(阻止)或用户可配置的外接程序。

> [!NOTE] >

此处,“托管”一词是指将由组策略处理的外接程序,它与使用托管编程语言开发的外接程序无关。

若要阻止不受此策略设置管理的外接程序,您还必须配置“阻止所有非托管外接程序”策略设置。

若要启用此策略设置,请提供每个外接程序的以下信息:

  • 在“值名称”中,指定 COM 外接程序的编程标识符 (ProgID)。

    若要获取外接程序的 ProgID,请在安装了该外接程序的客户端计算机上使用注册表编辑器,以在以下路径下查找项名称

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\Outlook\Addins

    HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\Outlook\Addins

  • 在“值”中,指定值,如下所示:

    • 若要指定始终禁用(阻止)某个外接程序,请指定 0。

    • 若要指定始终启用某个外接程序,请指定 1。

    • 若要指定某个外接程序可由用户配置,并在启用后不受“阻止所有非托管外接程序”策略设置的阻止,请指定 2。

如果禁用或不启用此策略设置,将删除托管外接程序列表。如果启用了“阻止所有非托管外接程序”策略设置,则会阻止所有外接程序。

由此策略禁用的外接程序绝不会被 Outlook 外接程序禁用功能禁用,由于性能、弹性或可靠性原因,该禁用功能会禁用外接程序。

外接程序禁用功能的用户界面

当外接程序超过性能阈值时,Outlook 将显示图 8 中所示的通知栏,告知用户有一个或多个外接程序被禁用。

图 8. 当自动禁用某个外接程序时,Outlook 将显示一个通知栏

通知栏

如果用户在通知栏上单击“查看禁用的外接程序”按钮时,将显示“已禁用的外接程序”对话框,如图 9 所示。

图 9. 单击“始终启用此外接程序”按钮会启用该外接程序,并将该外接程序从外接程序禁用功能中予以免除

始终启用加载项

如果用户确定可接受外接程序请求的性能计时,则用户可选择“始终启用外接程序”。始终处于启用状态的外接程序不会根据性能条件自动被 Outlook 禁用。如果由于某种原因用户稍后决定他或她不再希望将该外接程序从外接程序禁用功能中予以免除,则用户还可以从如图 10 中所示的“已禁用的外接程序”对话框中禁用该外接程序。

图 10. 选择“禁用此外接程序”按钮可禁用该外接程序

禁用加载项

阻止禁用该外接程序

虽然外接程序禁用功能不会禁用大多数外接程序,但您不希望您的外接程序始终被禁用。以下是用于改善外接程序性能的建议:

  • 比起托管外接程序,应首选本机 COM 外接程序,因为托管外接程序在 Outlook 启动过程中一定会引起加载 .NET Framework 的开销。

  • 如果您有长时间运行的任务,如生成一个代价高昂的数据库连接,请在启动后推迟执行这些任务。

  • 如有可能,请本地缓存数据,而不是在执行资源管理器的 FolderSwitch 和 BeforeFolderSwitch 事件或某个项目的 Open 事件期间执行高成本网络调用。

  • 轮询是代价高昂的操作,所以比起轮询,应始终首选事件驱动的模型。

  • 请注意,对 Outlook 对象模型的所有调用都在 Outlook 的主前台线程上执行。如有可能,请避免长时间运行 Outlook 对象模型调用。请注意,在 Outlook 2013 中,当从后台线程调用 Outlook 对象模型时,对 Outlook 对象模型的调用将返回 E_RPC_WRONG_THREAD。

特别是,如果您使用 Visual Studio 中的 Office 开发人员工具来创建托管外接程序,要注意,加载 CLR 的第一个外接程序将受到性能的影响。请考虑以下措施,并参阅此文档末尾的其他资源,以了解详细信息:

  • 按需加载一个托管外接程序。

  • 延迟加载 CLR。

  • 使用 MSI 部署软件包,而不是 ClickOnce。

  • 如适用,请使用快速路径绕过架构验证、清单中的数字签名验证和自动更新检查。您可以在博客文章即将对您身边的 Service Pack 推出的性能改进 (Stephen Peters) 中找到有关使用快速路径的详细信息。

  • 如果您的外接程序扩展功能区和大型库中的链接,请替代功能区反射。

结论

邮件应用程序提供了一个令人兴奋的功能,让开发人员可以直接在 Outlook 和 Outlook Web App 中引入 Web 服务和 Web 驱动的上下文 UI。我们已为 Exchange 和 Outlook 的开发人员呈现我们的“写入一次,随处运行”的愿景。我们现在已提供了两个可扩展的重要支柱,第一个基于在 Office 2000 中引入的 Office COM 外接程序功能,第二个基于邮件应用程序平台。COM 外接程序模型支持仅与 Outlook 客户端的深度集成,并要求您安装您的解决方案时触控每个桌面。如果您有现有的外接程序解决方案,您应考虑更新外接程序以使用内嵌响应、共存和外接程序禁用功能。如果您希望有机会接触到使用 Outlook 和 Outlook Web App 的更大规模受众,请创建邮件应用程序,体验 Web 简单部署并直接将您的 Web 服务集成到 Outlook UI。无论您选择哪种途径(您有可能两者都选),祝您编码愉快!

其他资源

Office 外接程序

天气栏

Outlook 和 Office 对象模型

Outlook Social Connector

共存和 MAPI

Visual Studio 中的性能和 Office 外接程序开发

其他