inaopub.com 下载 第22章ASP和用于NT服务器的CDO 在前面几章中,我们已经了解了如何使用ASP源代码在 Microsoft back office中插入 些应用程序和服务。在本章中,将通过使用数据协作对象( Collaboration Data Objects, CDO)来集中研究Ema应用程序和服务之间的相互作用。特别是,将介绍CDO的一个子集, 即用于NT服务器的数据协作对象( Collaboration Data Objects for Windows NT Server, CDONTS 先从CDO的演化发展以及CDO和 CDONTS的区别开始,然后再研究CDO和 CDONTS的发 展趋势 作为本章的主体,将研究 CDONTS对象模型,通过一些利用 CDONTS的应用程序例子来 总结一下 CDONTS。下一章将更进一步地研究CDO。 221CDO是什么 cDo技术给开发者提供用于提供简单消息服务的简易方法,它是 Microsoft对象 库的最新版本。除此之外,CDO也能够利用 Microsoft Exchange Server所提供的功 能。在第20章中,曾把MSMQ比做应用程序的e-mail。在本章中,将看到CDO才是 真正的应用程序的e-mal CDO1.1以前的版本,都被命名为“ OLE Messaging”,其1.1版本用一个新的名字 Active Messaging”来命名。而现在的1.2版本则被命名为数据协作对象(CDO)。这个对象库 代替了先前的版本,并随 Microsoft Exchange Server5.5提供,除此之外,还可以在 Microsoft Web站上获得。CDO兼容以前的版本,使用 Active Messaging1.l写的源代码不需任何修改就 能够在安装有CDO的机器上运行。 有了CDO,程序员不仅可以完成一些简单的收发邮件,工作而且能够利用 Microsoft Exchange server来提供日历、协作和工作流程等功能。另外,CDO能被客户、服务器应用程 序或二者使用 对于编程,CDO能够用于ⅤB(3,0以上版本)、C/C++( Microsoft1.5以上版本)、Ⅴ SCript和 JScript。因为CDO被设计为用于交换,在此对象库中是没有用户界面(UI)元素的。然而 CDO包含的一些表现对象,具有提供生成HTML以在浏览器中显示的能力(CDO以前的版本也 供此项功能) 222使用CDO的原因 由于CDO可以用于 VBScript和 JScript,因此可在ASP页面中使用,使Web应用程序能够创 建一些邮件和消息。即使大部分用户已经有了一个邮件客户,但仍有一些迫不得已的原因让 他们再拥有一个Web邮件客户。 能用CDO生成一个不需要用户下载任何组件( Activex或插件)的网站,也允许用户从任何
下载 第22章 ASP和用于NT服务器的CDO 在前面几章中,我们已经了解了如何使用 A S P源代码在 Microsoft BackOff i c e中插入一 些应用程序和服务。在本章中,将通过使用数据协作对象 (Collaboration Data Objects , C D O )来集中研究E - m a i l应用程序和服务之间的相互作用。特别是,将介绍 C D O的一个子集, 即用于 N T服务器的数据协作对象 (Collaboration Data Objects for Windows NT Server, C D O N T S )。 先从C D O的演化发展以及C D O和C D O N T S的区别开始,然后再研究 C D O和C D O N T S的发 展趋势。 作为本章的主体,将研究 C D O N T S对象模型,通过一些利用 C D O N T S的应用程序例子来 总结一下C D O N T S。下一章将更进一步地研究 C D O。 22.1 CDO是什么 C D O技术给开发者提供用于提供简单消息服务的简易方法,它是 M i c r o s o f t对象 库的最新版本。除此之外, C D O也能够利用Microsoft Exchange Server所提供的功 能。在第2 0章中,曾把M S M Q比做应用程序的 e - m a i l。在本章中,将看到 C D O才是 真正的应用程序的e - m a i l。 CDO 1.1 以前的版本,都被命名为“ OLE Messaging ”,其 1 . 1版本用一个新的名字 “Active Messaging”来命名。而现在的 1 . 2版本则被命名为数据协作对象 ( C D O )。这个对象库 代替了先前的版本,并随 Microsoft Exchange Server 5.5提供,除此之外,还可以在 M i c r o s o f t We b站上获得。C D O兼容以前的版本,使用 Active Messaging 1.1写的源代码不需任何修改就 能够在安装有C D O的机器上运行。 有了 C D O,程序员不仅可以完成一些简单的收发邮件,工作而且能够利用 M i c r o s o f t Exchange Server来提供日历、协作和工作流程等功能。另外, C D O能被客户、服务器应用程 序或二者使用。 对于编程,C D O能够用于V B ( 3 . 0以上版本)、C/C++(Microsoft 1.5以上版本)、V B S c r i p t和 J S c r i p t。因为 C D O被设计为用于交换,在此对象库中是没有用户界面 ( U I )元素的。然而, C D O包含的一些表现对象,具有提供生成 H T M L以在浏览器中显示的能力 ( C D O以前的版本也 提供此项功能)。 22.2 使用C D O的原因 由于C D O可以用于V B S c r i p t和J S c r i p t,因此可在A S P页面中使用,使We b应用程序能够创 建一些邮件和消息。即使大部分用户已经有了一个邮件客户,但仍有一些迫不得已的原因让 他们再拥有一个We b邮件客户。 能用C D O生成一个不需要用户下载任何组件 ( A c t i v e X或插件)的网站,也允许用户从任何
648A5p3高程 China°boN 下载 web系统访问他们的邮箱。例如, Hotmail就是web邮箱接口的一个例子。 从ASP的另一面看,在许多的情形下,web服务器具有发送邮件的能力对应用程序是很有 益的。比如,应用程序将能够: 用户预订东西时,发送确认预订的邮件 某个操作失败时,发送管理邮件给Web管理员。 处理邮件收件人数据库清单,然后给每个收件人发送一个消息。 可能发生的事是无止境的,尤其是CDO创建的客户和服务器类型。CDO提供了一个对象 库,使消息收发的编程和实现简单化 222.1NT服务器下的CDO 在许多情况下,开发者可能不想使用 Exchange server及CDO的日历、协作和工作流程功 能,而仅关注于简单邮件消息的收发,那么他们应使用 CDONTS。 CDONTS是CDO功能的一个子集,它为应用程序提供一个可靠、快速、可扩展 的消息机制,而不必使用 Exchange Server和CDO提供的更先进的日历计算与工作 流程 CDONTS是作为 SMTP Service的一部分安装的,包含在 Windows2000 Server的一个可选 组件中。由于 CDONTS组件是CDO对象库的一个子集,它们既可以依靠 Windows2000中的 SMTP Service工作,也可以依靠 Exchange Server(5.5以上版本)工作(但必正运行有SMTP Service,而且不需改动任何代码。正像 CDONTS是CDO功能的一个子集一样, Windows2000 的 SMTP Service组件没有提供 Exchange5.5中提供的所有功能 CDONTS是开发者用来创建有邮件和消息能力的应用程序的简单对象库 作为 CDONTS的一个简单例子,下面看一下使用 NewMail对象发送一个邮件消息到底需 要什么。有了这个对象,开发者可使用下列两行简短的代码来发送一个 e-mail Se Create ct(c ai1") ieeRigthHere. Com Greetings", .How have you be 虽然还没有深入讨论这个 CDONTS对象,但你也能从这个例子看出,编写一个简单的发 送邮件的程序是非常容易的。 222.2CDO与 CDONTS的比较 在编写能够收发消息的应用程序时,首先要决定选择使用CDO还是使用 CDONTS,假如 需要在两者中作一个选择的话,那么记住它们的设计目标是非常重要的 CDO在影响 Exchange Server5.5和支持其更先进的特性方面表现优良 · CDONTS在开发快速、大规模的邮件应用程序或向已存在的应用程序添加消息和邮件能 力方面表现很好 假如需要支持日历、讨论、更复杂的消息收发、公共文件夹和工作流程管理等,那么 CDO1.2版本是一个较好的选择。相反,假如想创建一个能够处理简单的邮件消息的应用程序, 则 CDONTS更为适合一些
We b系统访问他们的邮箱。例如, H o t m a i l就是We b邮箱接口的一个例子。 从A S P的另一面看,在许多的情形下, We b服务器具有发送邮件的能力对应用程序是很有 益的。比如,应用程序将能够: • 用户预订东西时,发送确认预订的邮件。 • 某个操作失败时,发送管理邮件给 We b管理员。 • 处理邮件收件人数据库清单,然后给每个收件人发送一个消息。 可能发生的事是无止境的,尤其是 C D O创建的客户和服务器类型。 C D O提供了一个对象 库,使消息收发的编程和实现简单化。 22.2.1 NT服务器下的C D O 在许多情况下,开发者可能不想使用 Exchange Server及C D O的日历、协作和工作流程功 能,而仅关注于简单邮件消息的收发,那么他们应使用 C D O N T S。 C D O N T S是C D O功能的一个子集,它为应用程序提供一个可靠、快速、可扩展 的消息机制,而不必使用 Exchange Server和C D O提供的更先进的日历计算与工作 流程。 C D O N T S是作为SMTP Service的一部分安装的,包含在 Windows 2000 Server的一个可选 组件中。由于 C D O N T S组件是C D O对象库的一个子集,它们既可以依靠 Windows 2000中的 SMTP Service工作,也可以依靠 Exchange Server(5.5以上版本 )工作(但必正运行有 S M T P S e r v i c e,而且不需改动任何代码。正像 C D O N T S是C D O功能的一个子集一样,Windows 2000 的SMTP Service组件没有提供Exchange 5.5中提供的所有功能。 C D O N T S是开发者用来创建有邮件和消息能力的应用程序的简单对象库。 作为C D O N T S的一个简单例子,下面看一下使用 N e w M a i l对象发送一个邮件消息到底需 要什么。有了这个对象,开发者可使用下列两行简短的代码来发送一个 e - m a i l。 虽然还没有深入讨论这个 C D O N T S对象,但你也能从这个例子看出,编写一个简单的发 送邮件的程序是非常容易的。 22.2.2 CDO与C D O N T S的比较 在编写能够收发消息的应用程序时,首先要决定选择使用 C D O还是使用C D O N T S,假如 需要在两者中作一个选择的话,那么记住它们的设计目标是非常重要的。 • CDO在影响Exchange Server 5.5和支持其更先进的特性方面表现优良。 • C D O N T S在开发快速、大规模的邮件应用程序或向已存在的应用程序添加消息和邮件能 力方面表现很好。 假如需要支持日历、讨论、更复杂的消息收发、公共文件夹和工作流程管理等,那么 CDO 1.2版本是一个较好的选择。相反,假如想创建一个能够处理简单的邮件消息的应用程序, 则C D O N T S更为适合一些。 648计计ASP 3 高级编程 下载
hinapub.com第649 下载 注意 CDONTS应用程序与CDO应用程序是兼容的,而不是相互抵触,这一点也是很重要。 因为 CDONTS自身不含有任何MAPI功能,也就是说它没有API支持收发e-mail,与此相反, CDONTS工作于IS或与 Microsoft exchange server联合在一起的IS上 必须注意到CDO能运行在 Windows2000的 SMTP Service或 Exchange Server5 然而,为了实现运行平台从IS/SMTP平台到 Exchange server平台的升级,将需要使用 Exchange ims向导,此向导删除IS的 SMTP Service,而代之以 Exchange server 22.3节研究 CDONTS库,虽然它与CDO拥有的大量功能相比功能是有限的,但它对使用 ASP创建的大部分简单应用程序是有效的。然后介绍CDO库提供的附加对象以及CDO与 CDONTS的一些不同之处 22.2.3 CDo for Windows 2000 除 CDONTS和CDO库外,还有第三个与 CDONTS和CDO不同的数据协作对象库,以前称 为CDO2.0,现在将其命名为 Windows2000。它随 Windows2000的所有版本提供此版本与 CDONTS相比功能更为强大,但不支持利用CDO所提供的消息收发特性和功能。不像前两个 CDO库, CDO for Windows2000不对MAPI协议提供任何支持。因此,只能限制使用在 Windows2000的SMTP或NNTP服务上。到编写本书时, CDO for Windows2000仍然是处于 版。尽管这样,仍然有些关键点应该注意。 CDO for Windows2000第一个要注意的是它提供双重接口。即包含在 CDO for Windows 中的每个COM组件都实现一些接口,这些接口允许组件在支持COM或自动化的编程语 言中使用。 CDO for windows2000库也引入了一种新的依赖性。为了使 CDO for windows2000准确 无误地工作,系统必须安装有 Microsoft ado2.5组件。在 Windows2000操作系统中包 含这个组件(缺省时),不需要用户单独安装。 CDO for Windows2000使用ADO来为开发 者提供了一个用来访问消息信息的一致的数据访问方法。 ·功能上, CDO for windows2000也与CDO和 CDONTS库有不同之处。除了具有同样的 收发消息的功能外, CDO for Windows2000库还支持事件的嵌入,这一功能允许开发者 创建一些应用程序,拦截到达服务器的消息和新闻组邮件,并访问其中的信息。根据这 些信息或邮件的内容,应用程序可以做一些诸如拒收消息、添加符号或别的文本等操作, 也可做病毒扫描和其他的一些操作 正如先前所提到的, CDO for Windows2000库仍然是β版,且它的功能也可能 会变化。因此,对这一问题将不做深入的阐述,而将精力集中于CDO库和 CDONTS 223 CDONTS库 在使用一个组件时,第一步要做的就是搞清楚它的对象模型,下面将浏览 CDONTS组件 的对象模型。如图22-1所示,这个对象模型是很直观的,而且不太大 CDONTS对象模型的主体由 Session对象和其子对象构成。正如我们所看到过的,对于每
注意C D O N T S应用程序与C D O应用程序是兼容的,而不是相互抵触,这一点也是很重要。 因为C D O N T S自身不含有任何 M A P I功能,也就是说它没有 A P I支持收发e - m a i l,与此相反, C D O N T S工作于I I S或与Microsoft Exchange Server联合在一起的I I S上。 必须注意到C D O能运行在Windows 2000的SMTP Service上或Exchange Server 5.5 上。 然而,为了实现运行平台从 I I S / S M T P平台到Exchange Server平台的升级,将需要使用 Exchange IMS向导,此向导删除I I S的SMTP Service,而代之以Exchange Server。 2 2 . 3节研究C D O N T S库,虽然它与 C D O拥有的大量功能相比功能是有限的,但它对使用 A S P创建的大部分简单应用程序是有效的。然后介绍 C D O库提供的附加对象以及 C D O与 C D O N T S的一些不同之处。 22.2.3 CDO for Windows 2000 除C D O N T S和C D O库外,还有第三个与 C D O N T S和C D O不同的数据协作对象库,以前称 为CDO 2.0,现在将其命名为 Windows 2000。它随Windows 2000的所有版本提供此版本与 C D O N T S相比功能更为强大,但不支持利用 C D O所提供的消息收发特性和功能。不像前两个 C D O库, CDO for Windows 2000 不对M A P I协议提供任何支持。因此,只能限制使用在 Windows 2000的S M T P或N N T P服务上。到编写本书时, CDO for Windows 2000仍然是处于 版。尽管这样,仍然有些关键点应该注意。 • CDO for Windows 2000第一个要注意的是它提供双重接口。即包含在 CDO for Wi n d o w s 中的每个C O M组件都实现一些接口,这些接口允许组件在支持 C O M或自动化的编程语 言中使用。 • CDO for Windows 2000库也引入了一种新的依赖性。为了使 CDO for Windows 2000准确 无误地工作,系统必须安装有 Microsoft ADO 2.5组件。在Windows 2000操作系统中包 含这个组件(缺省时),不需要用户单独安装。CDO for Windows 2000使用A D O来为开发 者提供了一个用来访问消息信息的一致的数据访问方法。 • 功能上,CDO for Windows 2000也与C D O和C D O N T S库有不同之处。除了具有同样的 收发消息的功能外,CDO for Windows 2000库还支持事件的嵌入,这一功能允许开发者 创建一些应用程序,拦截到达服务器的消息和新闻组邮件,并访问其中的信息。根据这 些信息或邮件的内容,应用程序可以做一些诸如拒收消息、添加符号或别的文本等操作, 也可做病毒扫描和其他的一些操作。 正如先前所提到的,CDO for Windows 2000库仍然是 版,且它的功能也可能 会变化。因此,对这一问题将不做深入的阐述,而将精力集中于 C D O库和C D O N T S 库。 22.3 CDONTS库 在使用一个组件时,第一步要做的就是搞清楚它的对象模型,下面将浏览 C D O N T S组件 的对象模型。如图2 2 - 1所示,这个对象模型是很直观的,而且不太大。 C D O N T S对象模型的主体由 S e s s i o n对象和其子对象构成。正如我们所看到过的,对于每 第2 2章 A S P和用于N T服务器的C D O计计649 下载
65045p高程 Chinapub.com 个从服务器请求页面的用户,创建一个 ASP Session对象,它用来为指定用户保存信息。同样 个 CDONTS Session对象为每个登录进邮件服务器的用户创建,并包含此用户的特定信息。 除了 Session对象外, CDONTS还提供 NewMail对象。下面将先从研究简单的 NewMan对 象开始,然后深入到 Session对象。但是第一步,先看看如何引用类型库。 Session lew mail Folder Messages Message Attachments Attachment Recipients 图22-1 CDONTS组件的对象模型 223.1引用类型库 当用 CDONTS:编程时,你可能会发现使用常量(例如 Cdo Body FormatHTML)代替与他们相 关的值( Cdo Body FormatHTML代表0)是很有用的。要加入一个类型库的引用,需要编辑 global. asp文件 <!--METADATA TYPE=TypeLib"NAME="Microsoft CDo NTS 1.2 Library UID=(0E064ADD-9D99-11D0-ABE5-00AA0064D470}· VERSION=1.2--> 这个语法考虑到了Fle、UUID、Ⅴ ersion和LCID属性,UUID对此类型库是全局 唯一的,但是在多个安装间是一致的。 旦在 global. asp中添加了这个META标记,就能在ASP页面中使用 CDONTS常量。它们 能够减轻你记忆一些特定值的工作量。因此,不必记住 Cdohigh等于2,在ASP程序中可以只 使用 CdoHigh常量。 另一个有用的小技巧是在所有的ASP文件的顶端包含<% Option Explicit%>。然 后,假如要使用一个未声明的常量,在执行ASP程序代码时,将得到一个错误。假如 没有声明 Option Explicit, VBScript将把常量作为没有声明的变量,并给它分配0值
个从服务器请求页面的用户,创建一个 ASP Session对象,它用来为指定用户保存信息。同样, 一个CDONTS Session对象为每个登录进邮件服务器的用户创建,并包含此用户的特定信息。 除了S e s s i o n对象外,C D O N T S还提供N e w M a i l对象。下面将先从研究简单的 N e w M a i l对 象开始,然后深入到S e s s i o n对象。但是第一步,先看看如何引用类型库。 图22-1 CDO N T S组件的对象模型 22.3.1 引用类型库 当用C D O N T S编程时,你可能会发现使用常量 (例如C d o B o d y F o r m a t H T M L )代替与他们相 关的值 ( C d o B o d y F o r m a t H T M L代表 0 )是很有用的。要加入一个类型库的引用,需要编辑 g l o b a l . a s p文件: 这个语法考虑到了 F i l e、U U I D、Ve r s i o n和L C I D属性,U U I D对此类型库是全局 唯一的,但是在多个安装间是一致的。 一旦在g l o b a l . a s p中添加了这个 M E TA标记,就能在 A S P页面中使用C D O N T S常量。它们 能够减轻你记忆一些特定值的工作量。因此,不必记住 C d o H i g h等于2,在A S P程序中可以只 使用C d o H i g h常量。 另一个有用的小技巧是在所有的 A S P文件的顶端包含 <%Option Explicit%>。然 后,假如要使用一个未声明的常量,在执行 A S P程序代码时,将得到一个错误。假如 没有声明Option Explicit,V B S c r i p t将把常量作为没有声明的变量,并给它分配 0值, 650计计ASP 3 高级编程 下载
Chinapub coM M28 ASP BIH ENTA B BCD0 651 下载 发现这一类错误很难 2232 NewMail对象 NewMail对象允许简单快捷地在Web页上添加一个简单的邮件发送功能,下面几行程序将 创建并发送一个邮件消息 Set obj SendMail Createobject(CDONTS NewMail") obj SendMail. Send John@Anywhere JeanieeRigthHere. com' "Greetings,"How have you bee Set objSendMail Nothing 现在,分析一下这段程序是如何工作的 程序运行时,就和 SMTP Service建立了一个连接,并且一个SMTP消息发送到 Jeanie RightHere. com,消息的主题是“ Greetings”,主体是“ How have you been?”。当浏览此消息 它看上去像是从“Joanie@Anywhere.com”发出的 发送一个新的邮件消息的第一步是创建一个 NewMan对象实例,程序的第一行就起到这 个作用。程序的第二行发送消息,编排发送代码使用的是Send方法的参数。在这一章稍后的 部分将研究Send方法的更多细节。现在,仅给出此方法的语法: objNewMail. Send( From] [ To] [ Subject] [ Body] [ Importancel 程序的第三行释放 NewMail对象实例及所占用的的资源。该程序不需要开发者全面了解 Folder对象或 Message对象,也不需要用户登录。 程序中工作的主体在第二行,消息的所有重要信息都在Send方法的参数中指定。另外, 也可以指定 NewMail对象的每个属性值,如: Set obj SendMail Createobject(CDONTS NewMail) with ob3 SendMail From=John@Anywhere.com To="jeanie@righthere.com Subject ='Greetings Body -How have you been? End Set obj sendMail Nothing 这九行代码和先前的三行代码一样创建同一消息,它们具有相同的功能。不同之处是这 段代码具有更强的可读性,并且阅读者不必了解Send方法的语法。这种代码特别适合属性包 这种方法的缺点是较复杂,当仅想发送一个简单的消息时,使用指定了参数的Send方法是一 种较好的方式。 正像先前所提到的,使用 NewMail对象发送邮件不需要登录,这就允许发送匿名邮件, 除此之外,还可以模仿他人的邮件,它使开发者可以指定邮件是来自谁的。匿名邮件可通过 不指定From属性来发送。 TO、CC和BCC属性 在先前的例子中,你可能已经注意到对于收件人必须指定完全限定的消息地址 (Jeanie(@RightHere.com) 在 CDONTS领域中,没有别名或地址簿之类的东西。每一个收件人必须用完全 的SMTP地址来指定
发现这一类错误很难。 22.3.2 NewMail对象 N e w M a i l对象允许简单快捷地在We b页上添加一个简单的邮件发送功能,下面几行程序将 创建并发送一个邮件消息: 现在,分析一下这段程序是如何工作的。 程序运行时,就和 SMTP Service建立了一个连接,并且一个 S M T P消息发送到 J e a n i e @ R i g h t H e r e . c o m,消息的主题是“ G r e e t i n g s”,主体是“How have you been?”。当浏览此消息 时,它看上去像是从“J o h n i e @ A n y w h e r e . c o m”发出的。 发送一个新的邮件消息的第一步是创建一个 N e w M a i l对象实例,程序的第一行就起到这 个作用。程序的第二行发送消息,编排发送代码使用的是 S e n d方法的参数。在这一章稍后的 部分将研究S e n d方法的更多细节。现在,仅给出此方法的语法: 程序的第三行释放 N e w M a i l对象实例及所占用的的资源。该程序不需要开发者全面了解 F o l d e r对象或M e s s a g e对象,也不需要用户登录。 程序中工作的主体在第二行,消息的所有重要信息都在 S e n d方法的参数中指定。另外, 也可以指定N e w M a i l对象的每个属性值,如: 这九行代码和先前的三行代码一样创建同一消息,它们具有相同的功能。不同之处是这 段代码具有更强的可读性,并且阅读者不必了解 S e n d方法的语法。这种代码特别适合属性包 含多种值、信息量很大或很长的情况。当程序没有按期望执行时,这种代码比较容易调试。 这种方法的缺点是较复杂,当仅想发送一个简单的消息时,使用指定了参数的 S e n d方法是一 种较好的方式。 正像先前所提到的,使用 N e w M a i l对象发送邮件不需要登录,这就允许发送匿名邮件, 除此之外,还可以模仿他人的邮件,它使开发者可以指定邮件是来自谁的。匿名邮件可通过 不指定F r o m属性来发送。 1. TO、C C和B C C属性 在先前的例子中,你可能已经注意到对于收件人必须指定完全限定的消息地址 ( J e a n i e @ R i g h t H e r e . c o m )。 在C D O N T S领域中,没有别名或地址簿之类的东西。每一个收件人必须用完全 的S M T P地址来指定。 第2 2章 A S P和用于N T服务器的C D O计计651 下载