别名缓存

适用于:Outlook 2013 | Outlook 2016

Microsoft Office Outlook 2007、Microsoft Outlook 2010和Microsoft Outlook 2013与昵称缓存(也称为“自动完成流”)交互。自动完成流是 Outlook 保留自动完成列表的位置,该列表是用户撰写电子邮件时显示在“收件人”、“抄送”和“密件抄送”编辑框中的名称列表。 本主题介绍 Outlook 2007、Outlook 2010 和 Outlook 2013 如何与自动完成流交互,还讨论了文件的二进制格式以及与自动完成流交互的建议方法。

对于与 Outlook 2010 或 Outlook 2013 交互的应用程序,自动完成流存储为 MAPI 属性,可以使用邮件的 MAPI 或 PropertyAccessor 对象进行修改。 PropertyAccessor 对象在 Outlook 2010 或 Outlook 2013 对象模型中公开。

Outlook 2007 对象模型或 MAPI API 没有依赖项。 因此,可以使用任何编程语言编写对 Outlook 2007 中的自动完成流进行更改的应用程序。

与自动完成Stream交互

访问邮件上的“ 收件人”、“ 抄送”或“ 密件抄送 ”编辑框时,将加载自动完成流并显示用户名列表。 Outlook 通过两种方式与自动完成流交互:

  1. 加载自动完成流

  2. 在自动完成流中保存对数据所做的更改

存储自动完成数据的方式在 Outlook 2007 和 Outlook 2010 或 Outlook 2013 之间有所不同,如下所示:

Outlook 2007

对于 Outlook 2007,自动完成流存储在与配置文件同名且扩展名为 .nk2 的文件中。 例如,如果使用“outlook”的默认配置文件,该文件将称为“outlook.nk2”。 .nk2 文件存储在 %APPDATA%\Microsoft\Outlook 中。 有关昵称缓存二进制文件格式的详细信息,请参阅 Outlook 2003/2007 NK2 文件格式和开发人员指南

Outlook 2010 和 Outlook 2013

Outlook 2010 或 Outlook 2013 从邮件帐户传递存储的收件箱的“关联内容”表中读取邮件的自动完成流。 此隐藏消息具有 IPM 的消息类和主题。Configuration.Autocomplete。 自动完成流存储在此消息的 PR_ROAMING_BINARYSTREAM 属性中, (PidTagRoamingBinary 规范属性) 。 自动完成数据可以暂时缓存在 %USERPROFILE%\AppData\Local\Microsoft\Outlook\RoamCache 中的自动完成.dat文件中。 但是,.dat文件只是缓存,在用户退出 Outlook 2010 或 Outlook 2013 时不用于写回传递存储。

加载自动完成Stream

每当初始化具有寻址功能的项时,Outlook 将加载自动完成流。 例如,电子邮件地址用于新邮件、邮件答复、联系人项目、会议请求等。 为了加载数据,Outlook 会将流的所有内容读取到内存中。

对于自动完成操作,Outlook 在 outlook.exe 进程生存期内以独占方式与此内存中结构交互。 Outlook 仅在关闭时保存结构。 有关此过程的详细信息,请参阅以下“保存自动完成Stream”部分。

保存自动完成Stream

如果自动完成列表已按以下任一方式更改,Outlook 会在关闭时保存自动完成流:

  • 通过解析姓名、从通讯簿对话框中选取收件人或向列表中尚不存在的收件人发送邮件,可以添加新的昵称条目。

  • 通过向列表中的现有收件人发送邮件来修改条目。

  • 用户通过 UI 删除条目。

  • 与本主题无关的其他次要方案。

保存对自动完成数据的更改涉及将内存中结构写回到自动完成Stream。 与 Outlook 2007 交互时,流将保存到本地 .nk2 文件。 对于 Outlook 2010 或 Outlook 2013,自动完成流将写回到邮件帐户传递存储的“收件箱”的“关联内容”表。

建议

  • 切勿部分修改自动完成流。 支持的交互为 1) 将整个自动完成流读取到内存中, 2) 修改内存结构,3) 将整个流写回到邮件帐户的送达存储的收件箱的关联内容表, (Outlook 2010 或 Outlook 2013) 或本地 .nk2 文件 (Outlook 2007) 。

  • 在 Outlook 运行时,请勿与自动完成流交互。 如果 Outlook 在修改流时正在运行,则在关闭流时可能会覆盖所做的更改。

  • 请勿将类型为 PT_MV_UNICODE 和 PR_MV_STRING8 的属性写入 Microsoft Outlook 2003 要使用的自动完成流。 这些属性仅由 Outlook 2007、Outlook 2010 和 Outlook 2013 理解。

  • 开发与 Outlook 2007 交互的代码时,建议在使用标准文件锁定 API ((例如 C/C++ 中的 LockFile )和 C#) 中的 FileStream.Lock 等标准文件锁定和写入 .nk2 文件时,使其不受其他进程的修改。

  • 仅修改来自自动完成流的行集中的类型的属性。 有关自动完成流属性和属性类型的详细信息,请参阅自动完成Stream

另请参阅

自动完成Stream

MAPI 配置文件

Outlook 2003/2007 NK2 文件格式和开发人员指南