Outlook 中自定义属性的更改

文章翻译 文章翻译
文章编号: 907985 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

概要

为了保证自定义属性或字段的一致使用,Microsoft Office Outlook 2003 Service Pack 2 (SP2) 及 Outlook 的更高版本限制了可将自定义属性引入 Outlook 数据存储的某些方式。例如,可以采用特定方式在 Outlook 个人文件夹 (.pst) 文件中引入自定义属性。

简介

本文执行以下任务:
  • 提供自定义属性的概述。
  • 说明自定义属性的行为在 Outlook 2003 SP2 及 Outlook 的更高版本中发生了怎样的变化。
  • 论述某些用于创建新属性的最佳做法,以及我们不推荐使用的某些方法。

更多信息

关于自定义属性

电子邮件程序(比如 Outlook)使用自定义属性来向邮件中添加更多信息。通常,电子邮件程序使用这种附加信息来达到特定目的。不过,还可以采用其他方式来使用自定义属性。例如,如果您使用 Outlook 自定义窗体并且这些窗体包含自定义字段,则可以将自定义属性添加到邮件或项目。自定义属性通常用于添加更多信息以达到跟踪目的。自定义属性还用于添加用户不必看到的数据。自定义解决方案也可以将自定义属性添加到常规项目。自定义解决方案以编程方式将自定义属性添加到邮件或项目,而不需要自定义窗体。

在 Outlook 中,可以用 .msg 文件格式和 .oft 文件格式保存自定义属性。此外,如果发件人使用“使用 Outlook RTF 格式发送”选项,还可以将自定义属性保存到通过 Internet 发送的电子邮件。此选项采用传输中性封装格式 (TNEF) 封装邮件的 MAPI 部分,然后在收到邮件时,TNEF 将被解码。

在以下情况中,发件人可能会发送包含自定义属性的电子邮件:
  • 发送一次性自定义窗体。在一次性窗体中,窗体嵌入在邮件中。窗体不会发布在其他地方。 有关一次性窗体的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
    290657 对 Outlook 2002 中窗体定义和一次性窗体的说明
  • 发送已发布自定义窗体。在这种情况下,将不会发送自定义窗体,因为窗体未嵌入在邮件中。但是,窗体上使用的任何自定义属性仍然包括在邮件中。
注意:取决于在其中使用自定义属性的上下文,可采用多种方式引用自定义属性。在 Outlook 用户界面(比如“字段选择器”)中,可以引用自定义属性作为用户定义的字段或作为自定义字段。在 Outlook 对象库中,可以在 UserProperties 集合后引用自定义属性作为用户属性或作为用户定义的属性。在 MAPI 中,自定义字段被引用为命名属性。利用 MAPI 可方便地实现以下目的:
  • 将名称赋给属性
  • 将名称映射到唯一标识符
  • 使映射持久保留
有关如何在 MAPI 中实现命名属性的更多信息,请访问下面的 MSDN 网站:
http://msdn2.microsoft.com/zh-cn/library/ms529055.aspx
注意:在 Exchange 环境中,如文本中所使用的“存储”一词是指整个邮箱存储(数据库)。该词不是指个别用户的邮箱存储。一个组织中可能有一个或多个 Exchange 邮箱数据库。

Outlook 中的行为更改

在 Outlook 中实施的 MAPI 已改为控制如何能够创建自定义属性。为了保证自定义属性的一致使用,必须已在组织中或 Outlook 客户端上使用了自定义属性。一旦正在使用或注册了自定义属性,就可以将自定义属性随意传送到其他 Outlook 客户端或运行 Exchange Server 的服务器。也可以通过 Internet 发送自定义属性。

电子邮件通常采用 MIME 格式在 Internet 上发送。当 Outlook 收到 Internet 电子邮件时,邮件将被转换为 MAPI 表现形式。下面是 Internet 电子邮件协议的示例:
  • POP
  • IMAP
  • HTTP (Hotmail)
默认情况下,Outlook 不再允许 Internet 电子邮件创建新的自定义属性。对于传入电子邮件而言,只会保留已经在默认邮件传送存储中创建的属性。此更改主要影响在封装 TNEF (Winmail.dat) 中发送的邮件,在这种邮件中,发件人使用了“使用 Outlook RTF 格式发送”选项。但是,包含 X-message 头属性的 Internet 邮件也会受到影响。

注意:包含在 Exchange 组织中发送的自定义属性的邮件不受这些更改的影响。

自定义属性也可以保存在 .msg 文件和 .oft 文件中。如果用户打开包含自定义属性的 .msg 文件,在对邮件进行保存、转发等操作时,这些自定义属性不会保存到默认存储。通常,.oft 文件用于备份 Outlook 自定义窗体。对于 .oft 文件,新的行为将牵涉到各种项目。自定义窗体将不会打开。邮件将改为显示在该特定项目类型的默认窗体中。

总而言之,设计上的这种更改可能导致出现两种情况:
  • Outlook 忽略不存在的自定义属性。如果某个自定义属性在传送存储中不存在,则不会创建该属性,并且该属性的值将丢失。如果自定义属性已存在于传送存储中,则会保留它的值。此更改牵涉到以下各项:
    • 包含 TNEF 以及其嵌入邮件的 Internet 电子邮件。
    • S/MIME 邮件。
    • .msg 文件(当您将 .msg 文件拖放到某个 Outlook 项目窗口中以将文件添加到另一个项目时)。当您将 .msg 文件拖放到 Outlook 主窗口中以将文件添加到文件夹,或者在 Microsoft Word 窗口中拖放 .msg 文件(如果使用 Word 作为电子邮件编辑器)时,此更改也会牵涉到 .msg 文件。
    • 用户双击或右键单击打开的 .msg 文件。
  • Outlook 将忽略一次性窗体定义。如果一次性窗体指定某个自定义属性,并且该自定义属性在传送存储中不存在,则不会呈现一次性窗体。用户将会看到该特定项目类型的默认窗体。此更改牵涉到包含一次性窗体定义(封装在 TNEF 中)的 Internet 电子邮件。此更改还牵涉到用户双击或右键单击打开的 .oft 文件。

用于创建新属性的最佳做法和其他方法

可以采用多种方法来设计和开发自定义解决方案。其中的某些方法被认为是最佳做法。其他方法可能也有作用,但出于一个或多个原因,我们不推荐您使用那些方法。

最佳做法:以编程方式添加自定义字段

可以使用多种 API 以编程方式将自定义字段添加到项目。为此,请在 Outlook 对象库(“Outlook.Application”)中使用 UserProperties.Add 方法。以下代码举例说明了这一最佳做法。
Set myProp = myItem.UserProperties.Add("MyPropName", olText)
您也可以使用 CDO 对象库(“MAPI.Session”)来添加自定义字段。有关更多信息,请访问下面的 MSDN 网站:
http://msdn2.microsoft.com/zh-cn/library/ms527518.aspx
对于 C++ 开发人员,可以使用扩展 MAPI 来添加命名属性。有关更多信息,请访问下面的 MSDN 网站:
http://msdn2.microsoft.com/zh-cn/library/ms529684.aspx

最佳做法:使用包含自定义字段的已发布自定义窗体

Outlook 非常信任已发布自定义窗体。但是,Outlook 不信任未发布的窗体或一次性窗体。这包括 .oft 文件。因此,当您设计自定义窗体解决方案时,我们强烈建议您发布自定义窗体。您应设计窗体以使其不会成为一次性窗体。只要窗体一经发布,该窗体就不会受到 Outlook 中的更改的影响。
有关一次性窗体以及如何会无意创建一次性窗体的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
290657 对 Outlook 2002 中窗体定义和一次性窗体的说明

当您将 .oft 文件发布到其他存储时,默认存储将允许您在该存储中创建属性。此外,当您创建包含自定义属性的自定义窗体并将其发布到相应的窗体库或文件夹时,将会在受影响的存储中创建自定义属性。

最佳做法:以编程方式部署自定义窗体

如果正在开发将由其他用户使用的 Outlook 自定义窗体,您可以使用多种方法。可使用的方法取决于若干因素。这些因素包括窗体的类型、谁将使用窗体、将在何处使用窗体,等等。通常,如果某个自定义窗体将由许多人使用,我们建议您在企业窗体库中发布该窗体。但是,如果无法做到这一点,您可能需要在共享文件夹或某些用户的个人窗体库中发布该窗体。您可以通过在 Outlook 对象库中使用 CreateItemFromTemplate 方法,以编程方式安装自定义窗体。您使用 CreateItemFromTemplate 方法打开 .oft 文件,然后通过使用 PublishForm 方法发布窗体。在这种情况下,.oft 文件不会受到自定义属性更改的影响。

不推荐使用:部署或发送 .oft 文件以供用户打开

您可以将 Outlook 自定义窗体保存为 .oft 文件。这些窗体可能包含自定义字段、用户界面更改以及用于向窗体中添加功能的自定义 Microsoft Visual Basic Scripting Edition (VBScript) 代码。尽管 Outlook 已经包含防止 .oft 文件中的 VBScript 代码运行的功能,但 Outlook 现在还是限制使用 .oft 文件。如果 .oft 文件包含自定义属性,并且用户以前没有使用过这些自定义属性,则自定义属性不会出现在用户的默认存储中。当用户双击文件时,Outlook 将不会呈现自定义窗体。但是,为了让 Outlook 打开存储为 .oft 文件的自定义窗体,可单击“文件”,单击“新建”,然后单击“选择窗体”。然后您可以将位置更改为“文件系统中的用户模板”,然后单击“浏览”以打开 .oft 文件。窗体将打开,并且您可以将自定义属性保存到默认存储。

不推荐使用:使用 AllowNamedProps 注册表项

某些组织可能有在整个组织中使用特定自定义属性的正当原因。如果使用多个存储,您可能需要确保能够将一组自定义属性添加到所有存储。因此,Outlook 2003 SP2 及更高版本支持一些客户端注册表项,这些注册表项指定可以创建哪些自定义属性。为了指定应启用哪些自定义属性,自定义属性是在以下注册表项下定义的:
HKEY_CURRENT_USER\Software\Microsoft\Office\<version>\Outlook\AllowedNamedProps\


注意:在此注册表项中,<version> 是代表您所使用 Outlook 版本的占位符。对于 Outlook 2003,版本号为 11.0。对于 Outlook 2007,版本号为 12.0。在 Outlook 的以后版本中,该版本号将增加。

注册表中一个条目的整体注册表项结构如下:

<GUID>
< 属性名>
"Kind" (dword)
"ID" (dword)
"Type" (dword)
注册表项结构中使用以下占位符:
  • <GUID>:包含指定属性集的 GUID。您在 Outlook 自定义窗体上使用的 Outlook 自定义字段或属性都具有 GUID {00020329-0000-0000-C000}。在 MAPI 中,该 GUID 称为 PS_PULIC_STRINGS。但是,自定义 MAPI 程序对于自定义属性可能有它们自己的 GUID。
  • <属性名>:指定属性的名称。如果属性按字符串命名,则 <属性名> 是属性的实际字符串名称。如果属性按 ID 命名,则此注册表项的值将被忽略。但是,您必须为属性指定一个唯一的名称,以使属性能够存储在注册表中。如果 Kind 项设置为 1 或 <> 0,则注册表项名称将确定属性的名称。如果 Kind 项不等于 1,此注册表项名称将被忽略。
  • "Kind" (dword):指定属性是按 ID 还是按字符串命名。 如果值为 0,属性将按 ID 命名。名称是一个由 ID 指定的数字值。如果值为 1,则属性将按字符串命名。当 “Kind” 不存在时,此设置是默认设置。
  • "ID" (dword):包含按 ID 命名的属性的 ID 名称。如果 Kind 项设置为 0,则必须提供此信息。如果 Kind 项设置为 1,此信息将被忽略。
  • "Type" (dword):指定属性的类型。
此注册表项是必需的,但当前未使用注册表项。下表基于 MAPI 类型列出了此注册表项的可能的值。
收起该表格展开该表格
MAPI 类型 说明
PT_UNSPECIFIED 0 保留为接口使用(类型对于调用者不重要)
PT_NULL 1 NULL 属性值
PT_I2 2 带符号 16 位值
PT_LONG 3 带符号 32 位值
PT_R4 4 4 字节浮点
PT_DOUBLE 5 浮点双精度
PT_CURRENCY 6 带符号 64 位整型(小数点右边带四位数的小数)
PT_APPTIME 7 应用程序时间
PT_ERROR 10 32 位错误值
PT_BOOLEAN 11 16 位布尔值(非零为 true)
PT_OBJECT 13 属性中的嵌入对象
PT_I8 20 8 字节带符号整数
PT_STRING8 30 以空值结尾的 8 位字符串
PT_UNICODE 31 以空值结尾的 Unicode 字符串
PT_SYSTIME 64 FILETIME 64 位整数(带自 1601 年 1 月 1 日以来的 100ns 周期数)
PT_CLSID 72 OLE GUID
PT_BINARY 258 无解释(计数字节数组)
PT_MV_UNSPECIFIED 4096
PT_MV_NULL 4097
PT_MV_I2 4098
PT_MV_LONG 4099
PT_MV_R4 4100
PT_MV_DOUBLE 4101
PT_MV_CURRENCY 4102
PT_MV_APPTIME 4103
PT_MV_ERROR 4106
PT_MV_BOOLEAN 4107
PT_MV_OBJECT 4109
PT_MV_I8 4116
PT_MV_STRING8 4126
PT_MV_UNICODE 4127
PT_MV_SYSTIME 4160
PT_MV_CLSID 4168
PT_MV_BINARY 4354
下面是一个如何设置按字符串命名属性的示例:
名称:“MyStringFieldName1”
类型:PT_LONG
[HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Outlook\AllowedNamedProps\{00020329-0000-0000-C000-000000000046}\MyStringFieldName1] "Type"=dword:00000003
下面是一个如何设置按 ID 命名属性的示例:
ID:0x0330
类型:PT_LONG
[HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Outlook\AllowedNamedProps\{00020329-0000-0000-C000-000000000046}\MyMAPIProp1] "Kind"=dword:00000000 "ID"=dword:00000330 "Type"=dword:00000003

对于这两个示例,注册表在注册表编辑器显示的内容类似于如下:

{00020329-0000-0000-C000-000000000046}
MyStringFieldName1
Type = 3

MyStringFieldName2
Type = 3

{00020329-0000-0000-C000-000000000046}
MyMAPIProp1
Kind = 0
ID = 330
Type = 3

MyMAPIProp2
Kind = 0
ID = 331
Type = 3

不推荐使用:重新启用创建属性的能力

可以将三个注册表项部署到客户端计算机以停止对自定义属性的阻止,并使 Outlook 恢复到其以前的行为。组策略支持这些注册表项。以下注册表项可以使 Outlook 2003 恢复到其以前的行为:

注意:以下注册表项不会使 Outlook 2007 恢复到其以前的行为。
  • AllowTNEFtoCreateProps (
    HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Outlook\Options\Mail) "AllowTNEFtoCreateProps"=dword:00000000
    ):如果值为 0,TNEF/MIME 将无法创建新的非 Outlook 自定义属性。该值为默认值。如果值为 1,TNEF/MIME 将能够创建新的非 Outlook 自定义属性。
  • AllowMSGFilestoCreateProps:如果值为 0,.msg 文件和 .oft 文件将无法创建新的非 Outlook 自定义属性。该值为默认值。如果值为 1,.msg 文件和 .oft 文件将能够创建新的非 Outlook 自定义属性。
  • DisallowTNEFPreservation:为了便于迁移到这一新行为,Outlook 会保留未创建自定义属性时的原始 TNEF。原始 TNEF 保存在所保存项目上的一个二进制流中。Outlook 使用以下属性标记保存该流:
    PR_TNEF_UNPROCESSED_PROPS PROG_TAG(PT_BINARY, 0x0e9C)。
    HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Outlook\Options\Mail] "DisallowTNEFPreservation "=dword:00000000
    注册表设置控制 Outlook 是否创建 PR_TNEF_UNPROCESSED_PROPS 属性。

    注意:当您将一封邮件作为附件嵌入另一封邮件时,将会从邮件中删除 PR_TNEF_UNPROCESSED_PROPS 属性。当您转发邮件或回复邮件时,PR_TNEF_UNPROCESSED_PROPS 属性也会被删除。

属性

文章编号: 907985 - 最后修改: 2007年4月3日 - 修订: 3.3
这篇文章中的信息适用于:
  • Microsoft Office Outlook 2007
  • Microsoft Office Outlook 2003
关键字:?
kbinfo KB907985
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com