第23章ASP、CDO与 Exchange Server 在上一章里,讲述了协作数据对象(CDO)的发展,特别研究了 CDONTS库及其使用。但 是 CDONTS库的功能有一定的限制。因此为了m了 提供更强大、复杂的消息应用程序,需要进一步C 学习CDO库。由于 CDONTS库是CDO库的子集 进一步学习CDO理所当然会给开发者提供更多 的编程能力 本章将介绍 CDO的对象模型 CDO与 CDONTS的不同 ·使用CDO库创建一个邮件客户应用程序。 23.1CDO库 CDO实际上提供了两个独立的库 LAiwu ·CDO库:提供用来发送和接收消息以及编 程访问和操作地址簿和文件夹的对象 CDO Rendering库:提供了这样一个对象 集合,能够把CDO对象转换成HIML格式, 从而使在浏览器上显示这些对象变得比较 容易 从本书的目的出发,注重介绍CDO库, 只简要介绍一下 CDO Rendering库 首先,像介绍 CDONTS时一样,看一下 CDO对象库的结构,如图23-1所示。 正如所看到的,CDO库比 CDONTS包含了 ineson 更多的对象,一些与 CDONTS共同的对象具有 更丰富的属性和功能。本书不对所有这些对象的 细节做深入研究,这超出了本书的范围。实际上 本书将深入研究其中的某些对象,对于其它的只 在一个较高的层次上浏览一下 23.1.1通用/共享对象 正如从图23-1中看到的,有几个属于多个父 对象的对象和集合。关于CDO库的讨论将从分 图23-1CDO对象库的结构
下载 第23章 A S P、C D O与Exchange Server 在上一章里,讲述了协作数据对象 ( C D O )的发展,特别研究了 C D O N T S库及其使用。但 是C D O N T S库的功能有一定的限制。因此为了 提供更强大、复杂的消息应用程序,需要进一步 学习C D O库。由于C D O N T S库是C D O库的子集, 进一步学习 C D O理所当然会给开发者提供更多 的编程能力。 本章将介绍: • CDO的对象模型。 • CDO与C D O N T S的不同。 • 使用C D O库创建一个邮件客户应用程序。 23.1 CDO库 C D O实际上提供了两个独立的库: • C D O库:提供用来发送和接收消息以及编 程访问和操作地址簿和文件夹的对象。 • CDO Rendering库:提供了这样一个对象 集合,能够把C D O对象转换成H T M L格式, 从而使在浏览器上显示这些对象变得比较 容易。 从本书的目的出发,注重介绍 C D O库, 只简要介绍一下CDO Rendering库。 首先,像介绍 C D O N T S时一样,看一下 C D O对象库的结构,如图2 3 - 1所示。 正如所看到的, C D O库比C D O N T S包含了 更多的对象,一些与 C D O N T S共同的对象具有 更丰富的属性和功能。本书不对所有这些对象的 细节做深入研究,这超出了本书的范围。实际上, 本书将深入研究其中的某些对象,对于其它的只 在一个较高的层次上浏览一下。 23.1.1 通用/共享对象 正如从图2 3 - 1中看到的,有几个属于多个父 对象的对象和集合。关于 C D O库的讨论将从分 图23-1 CDO对象库的结构
hina" coM ms AS,, CDO Ending smr 685 载 析这些通用/共享对象开始。如果一个对象根据其父对象的不同,具有不同的用法或属性,则 在介绍父对象时会给出相应的解释 ments集合 Attachments集合是具有零个或更多附件的集合,由 AppointmentItem对象、 Meetingltem对 象和 Message对象提供 Attachments集合提供了两个属性,如表23-1所示 表23-1 Attachments集合的属性及说明 属性 Count Item(index) 返回集合中索引为 index的附件项目 像 CDONTS一样,此集合也支持使用 For each等ⅤB(或 VBScrip)语句。 Attachments集合也提供了一个Add和一个 Delete方法。 Delete方法会删除集合中所有的项 目,要谨慎使用。如果想从集合中删除一个附件,应当使用 Attachment对象的 Delete方法。删 除会立即执行且不能撤消。 Delete方法不使用参数,只需这样简单地使用: colAttachments. Delete( Ad方法稍微复杂一点,有四个参数 Set objAttachment colAttachments Add( name] [, position] [ type] [ 其参数和说明如表23-2所示。 表232Add方法的参数及说明 说明 Name 选,附件的标题/显示名 可选,附件在消息主体内出现的字符位置 可选,附件的类型,可以是 CdoFileData(1)、 Cdo filelink(2) DooLe(3)Fl Cdo EmbeddedMessage(4) Source 可选,包含附件数据的文件的完全限定路径 例如,如果想添加一个 Excel文件( (inventory Report. xls)作为一个标题为“ Inventory Report 的消息附件,代码可以这样写: Set objAttachment colAttachments Add("Inventory Report,0,& leData, 'C: \Inventory. xIs") 需要添加一个附件到集合中去时,既可以在Add方法中定义所有的信息,也可以在产生的 Attachment对象上设置属性。下面将讨论 Attachment对象本身,并看一下如何用此对象的属性 添加一个附件 Attachment对象 个 Attachment对象代表一个 Message、 Meetingltem或 AppointmentItem对象的单个附件 这些附件可以是文件、OLE对象或其他的 Message对象 Attachment对象的属性及说明如表23-3所示
析这些通用/共享对象开始。如果一个对象根据其父对象的不同,具有不同的用法或属性,则 在介绍父对象时会给出相应的解释。 1. Attachments集合 A t t a c h m e n t s集合是具有零个或更多附件的集合,由 A p p o i n t m e n t I t e m对象、M e e t i n g I t e m对 象和M e s s a g e对象提供。 A t t a c h m e n t s集合提供了两个属性,如表 2 3 - 1所示。 表23-1 Attachments集合的属性及说明 属 性 说 明 C o u n t 返回集合的项目数 I t e m (i n d e x) 返回集合中索引为i n d e x的附件项目 像C D O N T S一样,此集合也支持使用For Each等V B (或V B S c r i p t )语句。 A t t a c h m e n t s集合也提供了一个A d d和一个D e l e t e方法。D e l e t e方法会删除集合中所有的项 目,要谨慎使用。如果想从集合中删除一个附件,应当使用 A t t a c h m e n t对象的D e l e t e方法。删 除会立即执行且不能撤消。 D e l e t e方法不使用参数,只需这样简单地使用: A d d方法稍微复杂一点,有四个参数: 其参数和说明如表2 3 - 2所示。 表23-2 Add方法的参数及说明 参 数 说 明 N a m e 可选,附件的标题/显示名 P o s i t i o n 可选,附件在消息主体内出现的字符位置 Ty p e 可选,附件的类型,可以是C d o F i l e D a t a ( 1 )、Cdo FileLink (2)、 CdoOle(3)和 CdoEmbeddedMessage(4) S o u r c e 可选,包含附件数据的文件的完全限定路径 例如,如果想添加一个E x c e l文件( i n v e n t o r y R e p o r t . x l s )作为一个标题为“Inventory Report” 的消息附件,代码可以这样写: 需要添加一个附件到集合中去时,既可以在 A d d方法中定义所有的信息,也可以在产生的 A t t a c h m e n t对象上设置属性。下面将讨论 A t t a c h m e n t对象本身,并看一下如何用此对象的属性 添加一个附件。 A t t a c h m e n t对象 一个A t t a c h m e n t对象代表一个M e s s a g e、M e e t i n g I t e m或A p p o i n t m e n t I t e m对象的单个附件。 这些附件可以是文件、O L E对象或其他的M e s s a g e对象。 A t t a c h m e n t对象的属性及说明如表2 3 - 3所示。 第2 3章 A S P、C D O与Exchange Serv e r计计685 下载
686Ap3高编程 Chinapub.com 下载 表23-3 Attachment对象的属性及说明 返回与 Attachment对象关联的字段的一个集合 返回在 Attachments集合之内当前 Attachment对象的索引位置 设置或返回附件的标题/显示名 设置或返回附件在消息主体内的字符位置 Source 设置或返回包含附件数据的文件的完全限定路径 设置或返回附件的类型,可以是: CdoFile Data、 CdoFilelink、 DooLe和 CdoEmbeddedMessage 注意到在 Attachments集合的Add方法中的参数映射到 Attachment对象的属性中。 上面看到如何用Add方法通过定义所有的信息来添加一个附件。下面是利用 Attachment对 象的属性添加一个附件的程序 Set objAttachment colAttachments Add with objAttachment Inventory Report Position 0 Type CdoFileData Source = 'C: \Inventory Report. xl End with bjcurMessage. Update 注意到在 Message对象上调用了 Update方法。这是为了提交 Attachments属性的变动 2. Fields集合 Fields集合是一个或多个 Field对象的集合。与 Attachments集合相同, Fields集合也有 Count属性、Item属性、Add方法和 Delete方法。这些属性与 Delete方法在功能上与 Attachments 集合中的一样。 然而,但Add方法的参数列表不同: Set objField s ob3Fieldscoll Add(name, Class [ value] [, PrapsetID] 其参数和说明如表23-4所示。 表23-4Add方法的参数及说明 参数 可选,一个定制的MAP属性的名称 Class Field对象的数据类型。可以是表23-5列出的值中的一个 「选,MAP属性的值 PropsetID 可选,MAP属性组的唯一的ID。与 Fields对象的ID相似 表23-5 Class属性的可能值 CoaRray 912(&H2000) 65(&H41) Cdoboolean frency Cdo Dataobject
686计计ASP 3 高级编程 下载 表23-3 Attachment对象的属性及说明 属 性 说 明 F i e l d s 返回与A t t a c h m e n t对象关联的字段的一个集合 I n d e x 返回在A t t a c h m e n t s集合之内当前A t t a c h m e n t对象的索引位置 N a m e 设置或返回附件的标题/显示名 P o s i t i o n 设置或返回附件在消息主体内的字符位置 S o u r c e 设置或返回包含附件数据的文件的完全限定路径 Ty p e 设置或返回附件的类型,可以是: C d o F i l e D a t a、C d o F i l e L i n k、C d o O l e和 C d o E m b e d d e d M e s s a g e 注意到在A t t a c h m e n t s集合的A d d方法中的参数映射到A t t a c h m e n t对象的属性中。 上面看到如何用A d d方法通过定义所有的信息来添加一个附件。下面是利用 A t t a c h m e n t对 象的属性添加一个附件的程序: 注意到在M e s s a g e对象上调用了U p d a t e方法。这是为了提交A t t a c h m e n t s属性的变动。 2. Fields集合 F i e l d s集合是一个或多个 F i e l d对象的集合。与 A t t a c h m e n t s集合相同, F i e l d s集合也有 C o u n t属性、I t e m属性、A d d方法和D e l e t e方法。这些属性与D e l e t e方法在功能上与A t t a c h m e n t s 集合中的一样。 然而,但A d d方法的参数列表不同: 其参数和说明如表2 3 - 4所示。 表23-4 Add方法的参数及说明 参 数 说 明 N a m e 可选,一个定制的M A P I属性的名称 C l a s s F i e l d对象的数据类型。可以是表 2 3 - 5列出的值中的一个 Va l u e 可选,M A P I属性的值 P r o p s e t I D 可选,M A P I属性组的唯一的I D。与F i e l d s对象的I D相似 表23-5 Class属性的可能值 名 称 值 C d o A r r a y 8 9 1 2 ( & H 2 0 0 0 ) C d o B l o b 6 5 ( & H 4 1 ) C d o B o o l e a n 11 C d o C u r r e n c y 6 C d o D a t a O b j e c t 1 3
687 下载 第23章ASP、CDO与 Exchange Server CdoDouble CdoEmpty Cdolnteger Oolong 750231 Cdosinglo 除有普通的集合方法外, Fields集合还有可以定义缺省MAP属性组的方法。 MAPI属性组是一个命名的属性集合,不同的组具有不同的名字 SetNamespace方法允许定义缺省使用的属性组(名字空间)。此方法的语法如下: objFieldscoll. SetNamespace(PropsetID) 当访问一个命名的属性时,此属性是在一个属性组内的。所有在一个属性组内的命名的 属性的集合称为名字空间( Namespace) 当在缺省的 Namespace内添加一个属性时,调用Add方法时就不必再指定 PropsetID。 SetNamespace方法允许指定缺省的 Namespace。在再次调用 SetNamespace方法之前,对缺 省 Namespace的任何变化都将保持有效。 因此,如果想创建一个名为 Display Name、存储字符串值的MAPI属性,代码如下 objField colFields Add('Display Name, cdostring 在这种情况下,省略了Vaue和 PropsetID参数。这样做,“ Display Name”字段的值在缺 省的 Namespace内被设置为一个空字符串 Field对象 Field对象代表CDO库中的许多MAP属性中的一个 MAPI属性是一个描述关于消息的某些方面的属性:例如,消息的发送地址、消息的主题 行和消息的发送时间等。 除显示缺省的MAPI属性之外, Field对象也允许访问定制的MAPI属性。 Field对象的属性及说明如表23-6所示 表23-6Fied对象的属性及说明 返回Feld对象代表的MAPI属性的唯一的ID Index 返回Feld对象在 Fields集合中的索引位置 返回字段的名称 返回对象包含的数据类型 Value 置或返回字段及其下层MAPI属性的值 ID属性是一个32位的整数,既包括MAP属性的标识符又有属性类型信息,高16
(续) 名 称 值 C d o d a t e 7 C d o D o u b l e 5 C d o E m p t y 0 C d o I n t e g e r 2 C d o L o n g 3 C d o N u l l 1 C d o S i n g l e 4 C d o S t r i n g 8 除有普通的集合方法外,F i e l d s集合还有可以定义缺省M A P I属性组的方法。 M A P I属性组是一个命名的属性集合,不同的组具有不同的名字。 S e t N a m e s p a c e方法允许定义缺省使用的属性组 (名字空间)。此方法的语法如下: 当访问一个命名的属性时,此属性是在一个属性组内的。所有在一个属性组内的命名的 属性的集合称为名字空间( N a m e s p a c e )。 当在缺省的 N a m e s p a c e内添加一个属性时,调用 A d d方法时就不必再指定 P r o p s e t I D。 S e t N a m e s p a c e方法允许指定缺省的N a m e s p a c e。在再次调用S e t N a m e s p a c e方法之前,对缺 省N a m e s p a c e的任何变化都将保持有效。 因此,如果想创建一个名为 Display Name、存储字符串值的M A P I属性,代码如下: 在这种情况下,省略了 Va l u e和P r o p s e t I D参数。这样做,“Display Name”字段的值在缺 省的N a m e s p a c e内被设置为一个空字符串。 F i e l d对象 F i e l d对象代表C D O库中的许多M A P I属性中的一个。 M A P I属性是一个描述关于消息的某些方面的属性:例如,消息的发送地址、消息的主题 行和消息的发送时间等。 除显示缺省的M A P I属性之外,F i e l d对象也允许访问定制的M A P I属性。 F i e l d对象的属性及说明如表2 3 - 6所示。 表23-6 Field对象的属性及说明 属 性 说 明 I D 返回F i e l d对象代表的M A P I属性的唯一的I D I n d e x 返回F i e l d对象在F i e l d s集合中的索引位置 N a m e 返回字段的名称 Ty p e 返回对象包含的数据类型 Va l u e 设置或返回字段及其下层 MAPI 属性的值 I D属性是一个3 2位的整数,既包括M A P I属性的标识符又有属性类型信息,高 1 6 第2 3章 A S P、C D O与Exchange Serv e r计计687 下载
688:3商编程 下载 位定义属性标识符,低16位定义了属性类型(二进制、整型等 Ficd对象还包括三个方法: Delete.ReadFromFilei和 Write Toile,如表237所示。 表23-7Feld对象的方法及说明 方法 说明 从 Fields集合中删除当前的字段对象 Read From File 从指定的文件加载Fed对象的值 Write RoFile 把Fied对象的值写入一个文件。如果此文件存在数据,将被当前的数据覆盖 两个访问文件的方法的语法很相似 objField. ReadFromFile(fileName) fileName是从中读取 Field对象值的文件的完全限定路径。 objField. WriteToFile(fileName) 同样, FileName是写入 Field对象值的文件的完全限定路径。 3. Recipients集合 Recipients集合是零个或更多 Recipient对象的集合。这个集合用来指定预定的Mail对象收 件人。就像 Fields集合和 Attachments集合一样, Recipients集合也有 Count属性、Item属性和 Delete方法。 Add方法的语法如下 et obj Recipient objRecipColl Add( [name] [ address] [ type] [ entryID] 其参数和说明如表23-8所示。 表238Add方法的参数及说明 Name 可选,收件人的显示/友好名字 Address 可选,收件人的完全限定的消息地址 可选,收件人的类型。可为以下三值: DotO(1)、 CdcC(2)和 Cofco(3) EntryID 可选,收件人的 Address Entry对象的唯一ID Name、 Address和Type参数与 Recipient对象的Name、 Address和Type属性一样。如果没有 指定参数,创建的 Recipient对象是空值。以下例子代码向To、CC、BCC收件人添加一条信 objMsg.Recipients.Add(Jeanie",CdoTO,"Jeanie@Anywhere.com") objmsg.Recipients.Add('jeaniesboss",Cdocc,jeaniesboss@anywhere.com objMsg.Recipients.Add(Jack,CdoBCC,Jack@Anywhere.com) Recipients集合还提供了 Addmultiple方法,能够在集合中创建多个 Recipient对象 语法如下 collRecipients. AddMultiple( names [ type] 其参数和说明如表23-9所示 表23-9 AddMultiple方法的参数及说明 Names 收件人列表,由“;”分开 可选,收件人的类型,可为 Doto、 Cdcc和 Cdobcc
688计计ASP 3 高级编程 下载 位定义属性标识符,低1 6位定义了属性类型(二进制、整型等)。 F i e l d对象还包括三个方法:D e l e t e、R e a d F r o m F i l e和Wr i t e To F i l e,如表2 3 - 7所示。 表23-7 Field对象的方法及说明 方 法 说 明 D e l e t e 从F i e l d s集合中删除当前的字段对象 R e a d F r o m F i l e 从指定的文件加载F i e l d对象的值 Wr i t e To F i l e 把F i e l d对象的值写入一个文件。如果此文件存在数据,将被当前的数据覆盖 两个访问文件的方法的语法很相似: f i l e N a m e是从中读取F i e l d对象值的文件的完全限定路径。 同样,Fi l e N a m e是写入F i e l d对象值的文件的完全限定路径。 3. Recipients集合 R e c i p i e n t s集合是零个或更多 R e c i p i e n t对象的集合。这个集合用来指定预定的 M a i l对象收 件人。就像Fi e l d s集合和A t t a t c h m e n t s集合一样,R e c i p i e n t s集合也有C o u n t属性、I t e m属性和 D e l e t e方法。 A d d方法的语法如下: 其参数和说明如表2 3 - 8所示。 表23-8 Add方法的参数及说明 参 数 说 明 N a m e 可选,收件人的显示/友好名字 A d d r e s s 可选,收件人的完全限定的消息地址 Ty p e 可选,收件人的类型。可为以下三值: C d o To ( 1 )、C d o C C ( 2 )和C d o B C C ( 3 ) E n t r y I D 可选,收件人的A d d r e s s E n t r y对象的唯一I D N a m e、A d d r e s s和Ty p e参数与R e c i p i e n t对象的N a m e、A d d r e s s和Ty p e属性一样。如果没有 指定参数,创建的 R e c i p i e n t对象是空值。以下例子代码向 To、C C、B C C收件人添加一条信 息: R e c i p i e n t s集合还提供了A d d M u l t i p l e方法,能够在集合中创建多个 R e c i p i e n t对象。 语法如下: 其参数和说明如表2 3 - 9所示。 表23-9 AddMultiple方法的参数及说明 参 数 说 明 N a m e s 收件人列表,由“;”分开 Type 可选,收件人的类型,可为 C d o To、C d o C C和C d o B C C