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

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

本文内容

有关本文的 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 知识库中相应的文章:
295302 Outlook 2002 中协作数据对象 (CDO) 1.21s 电子邮件安全功能摘要
有关 CDO 对象模型的更多信息,请参见 Microsoft 网站上的以下文章:
http://msdn2.microsoft.com/en-us/library/ms527038.aspx

简单 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 网站上的以下文章:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/mapi/html/9a99b366-44e6-4665-9308-2eddf57e512c.asp

将 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 或库:
  • Collaboration Data Objects for Windows 2000 (CDOSYS) Microsoft Windows 2000(Professional 和 Server 版)以及 Microsoft Windows XP(专业版)中提供了此对象库。CDOSYS 是由 Windows 的 Internet 信息服务 (IIS) 组件安装的,因此必须安装 IIS 才能使用 CDOSYS。

    有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
    286430 如何使用 CDO for Windows 2000 和本地拾取目录发送 HTML 格式的邮件
    有关 CDOSYS 的其他信息,请访问下面的 Microsoft Developer Network (MSDN) 网站:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/e2k3/e2k3/_techsel_tech_1.asp
  • 扩展 MAPI 必须用 C/C++ 编写代码。有关其他信息,请访问下面的 Microsoft Developer Network (MSDN) 网站:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/mapi/html/6e7abeda-1cfe-46c9-a794-586aadbd0316.asp

参考

有关可用资源和 Microsoft Outlook 解决方案常见问题解答的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
287530 关于自定义窗体和 Outlook 解决方案的常见问题

属性

文章编号: 290500 - 最后修改: 2007年8月30日 - 修订: 6.1
这篇文章中的信息适用于:
  • Microsoft Outlook 2002 标准版
关键字:?
kbhowto kbsecurity kbemail KB290500
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