你目前正处于脱机状态,正在等待 Internet 重新连接

开发人员需要了解的 Outlook 2002 中的电子邮件安全功能的说明

有关本文的 Microsoft Outlook 98 版本,请参见 262700.

有关本文的 Microsoft Outlook 2000 版本,请参见 262701.
概要
本文概要介绍了开发人员需要知道的有关 Outlook 2002 电子邮件安全功能的知识,以及这些功能是如何影响自定义解决方案的。

重要说明:本文介绍 Outlook 2002、Outlook 2002 Service Pack 1 和 Outlook 2002 Service Pack 2 中的安全功能。其他功能已添加到 Outlook 2002 Service Pack 3 中。 有关这些更改的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
838871对 Outlook 2002 Service Pack 3 (SP3) 中与开发人员有关的安全更改的说明
更多信息

概述

重要说明:除了本文中包含的信息外,还应该熟悉常规的 Outlook 2002 电子邮件安全功能。“帮助”中提供了有关 Outlook 电子邮件安全功能的信息。在帮助菜单上,单击 Microsoft Outlook 帮助。在目录中,单击安全和加密。 有关安全功能如何影响最终用户的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
290498在 Outlook 2002 中使用第三方加载项或自定义解决方案时收到警告消息
重要说明:本文介绍了 Outlook 2002 对编程接口上设置的各种限制的默认行为。如果您希望避免这些限制,管理员可以对客户端计算机进行配置,使它们不包含所有这些限制。作为一名开发人员,您需要熟悉可用于这些安全功能的管理选项。 有关如何替代这些限制的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
290499有关电子邮件安全功能的管理员信息
Outlook 2002 所包含的安全功能与以前随 Microsoft Outlook 98 和 Microsoft Outlook 2000 电子邮件安全更新发布的安全功能是同一类型的。这些功能为 Outlook 提供了附加级别的保护,以防止恶意电子邮件,但它们会对您使用 Outlook 中包含的开发人员功能以及其他消息处理技术或应用程序编程接口 (API) 所创建的解决方案产生负面影响。解决方案在一些情况下可能根本不起作用;而在另一些情况下可能会导致一条警告消息的出现,该警告消息会在您尝试运行解决方案时中断该方案。

这些安全功能在以下方面更改了 Outlook 和常规的消息处理功能:
  • 常规的附件行为
  • Outlook 对象模型
  • 协作数据对象 (CDO) 1.21s 对象模型
  • 简单消息处理应用程序编程接口(或简单 MAPI)
  • Outlook 中与安全相关的其他方面,如嵌入基于 HTML 的邮件中的代码

Outlook 对象模型安全功能

附件

在 Outlook 对象模型中,无法访问带有第 1 级或“不安全”文件扩展名的附件,具体而言就是:
  • 对象模型中的 Attachments 集合无法识别不安全附件。
  • 如果您尝试以编程方式发送包含这种附件之一的邮件,该邮件不会被发送。如果程序是用 C 或 C++ 编程语言编写的,您会收到 MAPI_E_CANCELLED 返回代码。
  • 如果您尝试使用 Outlook 对象模型打开“不安全”文件系统对象(或“freedoc”文件),您会收到使用 C 或 C++ 编程语言编写的 E_FAIL 返回代码。在 Outlook 的早期版本中,使用 Outlook 对象模型中的 Display 方法是可以打开“不安全”文件系统对象的。

Item.Send

当您运行使用 Outlook 对象模型的程序来调用 Send 方法时,您会收到一条警告消息。该警告消息告知您一个程序正尝试以您的名义发送邮件,并询问您是否允许发送此邮件。警告消息中包含一个和一个按钮;但是,按钮在警告消息出现 5 秒钟后才可用。单击可立即解除此警告消息。单击以后,Send 方法返回一个使用 C 或 C++ 编程语言编写的 E_FAIL 错误。

访问通讯簿和收件人

如果某个程序尝试使用 Outlook 对象模型来引用任何类型的收件人信息,将会显示一个对话框,要求您确认对这些信息的访问。收到此对话框后,您可以允许对通讯簿或收件人信息进行长达 10 分钟的访问。这就使得诸如移动设备同步之类的功能得以完成。如果您决定不允许访问您的通讯簿或收件人信息,则对于所有这些消息,您都会收到使用 C 或 C++ 编程语言编写的 E_FAIL 返回代码。

当某个解决方案尝试以编程方式访问 Outlook 对象模型的以下功能时,您会收到此确认对话框:
  • AddressEntries 集合或任何 AddressEntry 对象。
  • Recipients 集合或任何 Recipient 对象。
  • ContactItem 对象的以下属性:
    Email1.Address
    Email1.AddressType
    Email1.DisplayName
    Email1.EntryID
    Email2.Address
    Email2.AddressType
    Email2.DisplayName
    Email2.EntryID
    Email3.Address
    Email3.AddressType
    Email3.DisplayName
    Email3.EntryID
    NetMeetingAlias
    ReferredBy
  • MailItem 对象的以下属性:
    SentOnBehalfOfName
    SenderName
    ReceivedByName
    ReceivedOnBehalfOfName
    ReplyRecipientNames
    To
    Cc
    Bcc
  • AppointmentItem 对象的以下属性:
    Organizer
    RequiredAttendees
    OptionalAttendees
    Resources
    NetMeetingOrganizerAlias
  • TaskItem 对象的以下属性:
    ContactNames
    Contacts
    Delegator
    Owner
    StatusUpdateRecipients
    StatusOnCompletionRecipients
  • DistListItem 对象的 GetMember 方法。
  • JournalItem 对象的 ContactNames 属性。
  • MeetingItem 对象的 SenderName 属性。
  • PostItem 对象的 SenderName 属性。
  • Namespace 对象的 GetRecipientFromID 属性。
  • Action 对象的 Execute 方法。
  • UserProperty 对象的 Formula 属性。

Item.SaveAs

当您使用 SaveAs 方法将项目保存到文件系统以后,您会收到一条“通讯簿”警告消息。这包括所有类型的项目,无论这些项目是否包含附件或活动内容。进行此更改后,就没有人能够先以编程方式将项目保存到某个文件中,然后通过分析该文件来检索电子邮件地址。

“发送”命令栏按钮

不能再使用 Execute 方法以编程方式单击 Outlook 工具栏上的发送按钮。尽管这种做法没有在 Outlook 解决方案中普遍采用,但已经进行了此更改,以防止恶意企图。对于所有这些消息,您都会收到使用 C 或 C++ 编程语言编写的 E_FAIL 返回代码。

SendKeys

Outlook 不允许使用 Microsoft Visual Basic 或 Microsoft Visual Basic for Applications 的 SendKeys 命令访问某些对话框。这样可以防止恶意程序自动解除警告消息和避开新的安全功能。

未发布窗体中的 VBScript 不再运行

创建自定义 Outlook 窗体时,您可以选择在项目内直接嵌入 Visual Basic Scripting Edition (VBScript)。如果其他用户无法访问已发布的窗体,您可以进行这一嵌入操作。这些类型的窗体称为“一次性”窗体。 有关一次性窗体的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
290657对 Outlook 2002 中窗体定义和一次性窗体的说明
如果您在未应用 Outlook 电子邮件安全更新的 Outlook 版本中打开这些项目之一,Outlook 会显示一条安全警告消息,询问您是否要在窗体中启用该代码。在 Outlook 2002 中禁用该代码,您无法激活它。

CDO 1.21s 安全功能

CDO 1.21 对象模型已被更改,以便反映对 Outlook 对象模型和简单 MAPI 所做的更改。CDO 的版本号已更新为 1.21s 以反映这些安全功能。 有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
295302Outlook 2002 中协作数据对象 (CDO) 1.21s 电子邮件安全功能摘要
有关 CDO 对象模型的更多信息,请参见 Microsoft 网站上的以下文章:

简单 MAPI 安全功能

当 Outlook 作为默认的简单 MAPI 客户端安装到计算机上时,Outlook 将处理通过使用简单 MAPI 调用发出的请求。因此,安装 Outlook 2002 时,简单 MAPI 调用将由 Outlook 处理,并且这些调用可提供与 Outlook 对象模型相同级别的保护。默认情况下,如果您使用多个简单 MAPI 函数,则会收到一条警告消息,告知您某个程序正尝试以您的名义访问收件人信息或发送邮件。

下表描述了 Outlook 如何响应简单 MAPI 调用。
简单 MAPI 调用   经 Outlook 处理后的行为----------------------------------------------------------------MAPIAddress        确定MAPIDeleteMail     确定MAPIDetails        确定MAPIFindNext       确定MAPIFreeBuffer     确定MAPILogoff         确定MAPILogon          确定MAPIReadMail       提示MAPIResolveName    提示MAPISaveMail       确定MAPISendDocuments  确定MAPISendMail       确定(带 MAPI_DIALOG 参数),否则将提示					
有关简单 MAPI 调用的更多信息,请参见 Microsoft 网站上的以下文章:

将 Office 应用程序重置为高安全性

为了帮助防止感染可能存在于 Microsoft Office 文档中的有害宏病毒,Office XP 默认将程序设置为“高安全性”模式。这包括所有支持 Visual Basic for Applications 的 Office XP 程序(Microsoft Access 除外,因为 Microsoft Access 没有等效的宏安全性设置)。结果,所有 Access 文档类型都包括在无法访问的不安全文件扩展名的列表中。

Outlook 和 HTML 邮件

以下信息摘自 Microsoft Outlook 帮助:
为了防止感染可能包含在收到的 HTML 邮件中的病毒,无论安全区域设置如何,脚本都不会运行且 ActiveX 控件将被停用。默认情况下,Microsoft Outlook 安全区域设置为“受限站点”。

避免安全功能

电子邮件安全功能将影响所有使用 Outlook 对象模型、CDO 或简单 MAPI 的自定义解决方案,即使这些解决方案经过数字签名也是如此。这包括以下内容:

  • 发布到任一文件夹或窗体库(包括企业窗体库)的 Outlook 自定义窗体
  • Outlook COM 加载项
  • Outlook Visual Basic for Applications
  • 使用 Outlook 对象模型、CDO 或简单 MAPI 的任何其他类型的开发项目
您作为开发人员在尝试避免安全功能时有多种选择。根据您要在何处开发解决方案总结出您的典型选择:
  • Outlook 自定义窗体:发布窗体从而不使其成为一次性窗体,或使用管理员功能以使一次性窗体中的 VBScript 代码能够运行。
  • Outlook Visual Basic for Applications:使用管理员功能禁用对象模型限制,或将 Visual Basic for Applications 代码转换为 COM 加载项,然后使用管理员窗体注册该加载项。
  • COM 加载项:如果管理员使用管理员窗体注册了 COM 加载项,则可以信任这些加载项。但使用 COM 加载项时,只有 Outlook 对象模型不会产生警告,CDO 对象模型仍然会产生警告。

    在 Outlook 2000 中不能信任 COM 加载项,因为此项功能加在 Outlook 2002 版本的管理员窗体中。
  • 实现 Outlook 或 CDO 对象模型自动化:使用管理员功能禁用对象模型限制。
如果可行,您可能要考虑重新设计解决方案,以使其在服务器而不是客户端上运行。基于服务器的 API 不受这些电子邮件安全功能的保护。

您可能还要考虑使用另一个消息处理 API 或库:
参考
有关可用资源和 Microsoft Outlook 解决方案常见问题解答的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
287530关于自定义窗体和 Outlook 解决方案的常见问题
OutSol OutSol2002
属性

文章 ID:290500 - 上次审阅时间:08/30/2007 03:32:00 - 修订版本: 6.1

  • Microsoft Outlook 2002 标准版
  • kbhowto kbsecurity kbemail KB290500
反馈
ody>