Chinapub.comm244s9.cDOerTangesoner689 载 注意不能用 AddMutiple方法同时添加多于一种类型的收件人。 如果想要添加两个收件人到To列表,三个收件人到CC列表,就需要用类似以下的代码 colRecipients. Add('JeanieeAnywhere. Com; JeaniesBoss @Anywhere. Com., cdoTo) colRecipeints.Add("JackGNoWhereCom:Jill@Nowhere.Com;Jeanie@Nowhere.Com CDO提供了友好的或可解析的地址,而不使用完全限定的消息地址。例如,可以指定友 好名称“ Jeanie”来代替“ Jeanie@ Any Where,com”。为了把这些地址解析成消息地址 Recipients集合提供了 Resolve方法。执行 Resolve方法时将遍历整个 Recipients集合并尝试把每 个收件人地址解析为消息地址。任何不能解析出的地址作为不可解析的地址留下来。在企图 发送一个带有不可解析的地址的消息时,产生错误 虽然这个方法的文档显示一个可选参数用来定义是否显示一个对话框,但是当 应用程序在ASP中运行时,不允许对话框。因此就ASP程序而言,这个方法没有有效 的参数 excipients集合还提供了两个方法对不可解析的收件人对象进行操作 Get FirstUnresolved方法返回的 Recipients对象是第一个不可解析的 Recipients对象。如果 没有不可解析的 Recipients对象,它返回 Nothing GetNextUnresolved方法返回的 Recipients对象是下一个不可解析的 Recipients对象。当没 有余下的不可解析的 Recipients对象时,它返回 nothing. 另外, Recipients集合提供了一个 GetFree Busy方法,返回一个字符串,这个字符串能指示 出集合中所有收件人的空闲/忙碌时间。这是在特定时间范围内收件人组的有效性组合。 此方法的语法如下 strAvail= colRecipients GetFreeBusy (StartTime, EndTime, Interval) 其参数和说明如表23-10所示。 表23-10 GetFreeBusy方法的参数及说明 第一个时隙的日期和时间 最后一个时隙的日期和时间 每个时隙的分钟数 如果想要知道从上午9时到下午2时之间,以一小时为时隙会议收件人的有效性 ( availability),代码应这样写 trAvail colRecipients GetFreeBusy(1/1/1999 09: 00.,.1/1/1999 14: 00',60) 结果字符串的长度与 StartTime与 EndTime之间的间隔数目相等。字符串中的每个位置都 有一个表示收件人有效性的值,此处可能的值如表23-11所示。 表23-11字符串中可能的值及其代表的有效性 Cofree(o) 此时隙内有效 Cdo Tentative(l) 此时隙内收件人中至少一个有一个不确定的约会 CdoBusy(2 此时隙内收件人中至少一个有一个确定的约会 CdoOutOfoffice(3 此时隙内收件人中至少有一个不在
第2 3章 A S P、C D O与Exchange Serv e r计计689 下载 注意不能用A d d M u t i p l e方法同时添加多于一种类型的收件人。 如果想要添加两个收件人到To列表,三个收件人到CC列表,就需要用类似以下的代码: C D O提供了友好的或可解析的地址,而不使用完全限定的消息地址。例如,可以指定友 好名称“ J e a n i e”来代替“ J e a n i e @ A n y W h e r e . c o m”。为了把这些地址解析成消息地址, R e c i p i e n t s集合提供了R e s o l v e方法。执行R e s o l v e方法时将遍历整个R e c i p i e n t s集合并尝试把每 个收件人地址解析为消息地址。任何不能解析出的地址作为不可解析的地址留下来。在企图 发送一个带有不可解析的地址的消息时,产生错误。 虽然这个方法的文档显示一个可选参数用来定义是否显示一个对话框,但是当 应用程序在A S P中运行时,不允许对话框。因此就 A S P程序而言,这个方法没有有效 的参数。 R e c i p i e n t s集合还提供了两个方法对不可解析的收件人对象进行操作: • G e t F i r s t U n r e s o l v e d方法返回的R e c i p i e n t s对象是第一个不可解析的 R e c i p i e n t s对象。如果 没有不可解析的R e c i p i e n t s对象,它返回N o t h i n g。 • G e t N e x t U n r e s o l v e d方法返回的R e c i p i e n t s对象是下一个不可解析的 R e c i p i e n t s对象。当没 有余下的不可解析的R e c i p i e n t s对象时,它返回N o t h i n g。 另外,R e c i p i e n t s集合提供了一个G e t F r e e B u s y方法,返回一个字符串,这个字符串能指示 出集合中所有收件人的空闲/忙碌时间。这是在特定时间范围内收件人组的有效性组合。 此方法的语法如下: 其参数和说明如表2 3 - 1 0所示。 表23-10 GetFreeBusy方法的参数及说明 参 数 说 明 S t a r t Ti m e 第一个时隙的日期和时间 E n d Ti m e 最后一个时隙的日期和时间 I n t e r v a l 每个时隙的分钟数 如果想要知道从上午 9 时到下午 2时之间,以一小时为时隙会议收件人的有效性 ( a v a i l a b i l i t y ),代码应这样写: 结果字符串的长度与 S t a r t Ti m e与E n d Ti m e之间的间隔数目相等。字符串中的每个位置都 有一个表示收件人有效性的值,此处可能的值如表 2 3 - 11所示。 表2 3 - 11 字符串中可能的值及其代表的有效性 值 有效性 C d o F r e e ( 0 ) 此时隙内有效 C d o Te n t a t i v e ( 1 ) 此时隙内收件人中至少一个有一个不确定的约会 C d o B u s y ( 2 ) 此时隙内收件人中至少一个有一个确定的约会 C d o O u t O f O ff i c e ( 3 ) 此时隙内收件人中至少有一个不在
69053商级编程 Chinaopub coM 下载 当两个收件人在一个特定的时隙内有不同级别的约会时,将报告其中较高级别者。如果 个收件人有不确定的约会而另一个不在,有效性将为 Cdooutofoffice Recipient对象 Recipient对象代表了 Message对象中的单个收件人 Recipient对象具有表23-12所示的属性 表23-12 Recipient对象的属性及说明 收件人的完整消息地址 Addresss Entry 回代表收件人的 Address Entry对象(后面将详细说明) Ambiguous Names 当不能解析地址时返回可能的地址集合 回收件人的显示类型 回MAPI产生的收件人唯一ID 返回 Recipient对象在 Recipients集合中的索引位置 返回和设置收件人对会见邀请的响应 返回和设置 Recipient对象的名称 返回和设置收件人的类型,其值为 DotO、 Coco和 Cosco中的一个 Display Type参数可能的值如表23-13所示 表23-13 Display Type参数可能的值及说明 Clouser(o) 本地系统中的一个用户 CdoDistlist(1) 公共分发列表 CdoForum(2 开放论坛,通常为一个新闻组或公共文件夹 自动代理 CdoOrganization( 4) 表示一个大的组,诸如技术支持 CdoPrivate DistList(5) 私人分发列表 CdoRemoteUser(6) 远程系统中的一个用户 MeetingResponse Status参数可能的值如表23-14所示。 表23-14 Meeting Response Status参数可能的值及说明 CdoResponseNone(o) 收件人没有响应(由 Outlook使 CdoResponse Organized(1) 收件人没有响应(由 Schedule+使用) 收件人不确定接受请求 收件人确定接受请求 CdoResponse Declined(4) 收件人拒绝请求 CdoResponseNotResponded (5) 收件人没有响应 Recipient对象具有四个方法 · Delete。 Get Free busy Delete方法能立即永久地在 Recipients集合中删除 Recipient对象
690计计ASP 3 高级编程 下载 当两个收件人在一个特定的时隙内有不同级别的约会时,将报告其中较高级别者。如果 一个收件人有不确定的约会而另一个不在,有效性将为 C d o O u t O f O ff i c e。 R e c i p i e n t对象 R e c i p i e n t对象代表了M e s s a g e对象中的单个收件人。 R e c i p i e n t对象具有表2 3 - 1 2所示的属性。 表23-12 Recipient对象的属性及说明 属 性 说 明 A d d r e s s 收件人的完整消息地址 A d d r e s s s E n t r y 返回代表收件人的A d d r e s s E n t r y对象(后面将详细说明) A m b i g u o u s N a m e s 当不能解析地址时返回可能的地址集合 D i s p l a y Ty p e 返回收件人的显示类型 I D 返回M A P I产生的收件人唯一I D I n d e x 返回R e c i p i e n t对象在R e c i p i e n t s集合中的索引位置 M e e t i n g R e s p o n s e S t a t u s 返回和设置收件人对会见邀请的响应 N a m e 返回和设置R e c i p i e n t对象的名称 Ty p e 返回和设置收件人的类型,其值为 C d o To、C d o C C和C d o B C C中的一个 D i s p l a y Ty p e参数可能的值如表2 3 - 1 3所示。 表23-13 DisplayTy p e参数可能的值及说明 值 说 明 C d o U s e r ( 0 ) 本地系统中的一个用户 C d o D i s t L i s t ( 1 ) 公共分发列表 C d o F o r u m ( 2 ) 开放论坛,通常为一个新闻组或公共文件夹 C d o A g e n t ( 3 ) 自动代理 C d o O rg a n i z a t i o n ( 4 ) 表示一个大的组,诸如技术支持 C d o P r i v a t e D i s t L i s t ( 5 ) 私人分发列表 C d o R e m o t e U s e r ( 6 ) 远程系统中的一个用户 M e e t i n g R e s p o n s e S t a t u s参数可能的值如表2 3 - 1 4所示。 表23-14 MeetingResponseStatus参数可能的值及说明 值 说 明 C d o R e s p o n s e N o n e ( 0 ) 收件人没有响应(由O u t l o o k使用) C d o R e s p o n s e O rg a n i z e d ( 1 ) 收件人没有响应(由S c h e d u l e +使用) C d o R e s p o n s e Te n t a t i v e ( 2 ) 收件人不确定接受请求 C d o R e s p o n s e A c c e p t e d ( 3 ) 收件人确定接受请求 C d o R e s p o n s e D e c l i n e d ( 4 ) 收件人拒绝请求 C d o R e s p o n s e N o t R e s p o n d e d ( 5 ) 收件人没有响应 R e c i p i e n t对象具有四个方法: • Delete。 • GetFreeBusy。 • IsSameAs。 • Resolve。 D e l e t e方法能立即永久地在R e c i p i e n t s集合中删除R e c i p i e n t对象
691 载 第23章ASP、CDO与 Exchange Server GetFreeBusy方法与 Recipients集合中的 GetFreeBusy方法相似,但只能得到当前对象的有 如果一条消息有多个收件人而又想检查重复,可以用 Is Sameas方法检查一下是否有两个 或两个以上的收件人的地址相同。 Is sameas方法的语法如下 objRecipient. IssameAs(objRecip2 此处的 objRecip2参数是一个 Recipient对象,它与 objrecipient相比较。这个方法只有在两 个对象都代表同一消息系统中的一个永久对象时返回True。两个有相同值的收件人对象,如 果它们不能建立同一个物理对象就可以看作不同。因此,如果一个对象是另一个的拷贝,那 么 Is SameAs返回 False 最后, Recipient对象中的 Resolve方法与 Recipients集合中的 Resolve方法的工作方式相同 但它只解析当前的 Recipient对象的地址。 再次重申,虽然这个方法的文档显示一个可选参数用来定义是否显示一个对话 框,但是当应用程序在ASP中运行时,不允许对话框,也没有用户界面。 4. Addressentries集合 Addressentries集合是包括零或更多的 Address Entry对象的集合。 Address entries集合具有表23-15所示的属性。 表23-15 Addressentries集合的属性及说明 属性 返回集合中项目的数量 设置和返回集合的 Address Entry Filter对象 Item(indexs searchvalue) 从集合中返回一个 Address Entry条目 在后面介绍 Address Entry Filter对象时再详细讨论 ilter属性。本节将重点介绍其 他属性 像 Fields、 Recipients和 Attachments集合一样, AddressEntries集合有 Count属性和lem属性。 与其他集合不同的是它被看作一个大的集合,这就意味着此 Count属性不像它在小的集合中那 有效或有用。因此,在此集合中引用一个 Address Entry Filter对象,最可靠的方法是使用此 集合的Get方法,或指定一个唯一的标识符 此集合提供了的四个Get方法: Getlast 这些方法分别返回集合中的第一个、下一个、前一个和最后一个 Address Entry对象。例如 如果想要找到一个名为“ Jeanie”的 AddressEntry对象,可以在集合中这样搜寻 objAddEntry blnFound
G e t F r e e B u s y方法与R e c i p i e n t s集合中的G e t F r e e B u s y方法相似,但只能得到当前对象的有 效性。 如果一条消息有多个收件人而又想检查重复,可以用 I s S a m e A s方法检查一下是否有两个 或两个以上的收件人的地址相同。 I s S a m e A s方法的语法如下: 此处的o b j R e c i p 2参数是一个R e c i p i e n t对象,它与o b j R e c i p i e n t相比较。这个方法只有在两 个对象都代表同一消息系统中的一个永久对象时返回 Tr u e。两个有相同值的收件人对象,如 果它们不能建立同一个物理对象就可以看作不同。因此,如果一个对象是另一个的拷贝,那 么I s S a m e A s返回F a l s e。 最后,R e c i p i e n t对象中的R e s o l v e方法与R e c i p i e n t s集合中的R e s o l v e方法的工作方式相同, 但它只解析当前的R e c i p i e n t对象的地址。 再次重申,虽然这个方法的文档显示一个可选参数用来定义是否显示一个对话 框,但是当应用程序在A S P中运行时,不允许对话框,也没有用户界面。 4. AddressEntries集合 A d d r e s s E n t r i e s集合是包括零或更多的A d d r e s s E n t r y对象的集合。 A d d r e s s E n t r i e s集合具有表2 3 - 1 5所示的属性。 表23-15 AddressEntries集合的属性及说明 属 性 说 明 C o u n t 返回集合中项目的数量 F i l t e r 设置和返回集合的A d d r e s s E n t r y F i l t e r对象 I t e m (i n d e x或s e a rc h Va l u e) 从集合中返回一个A d d r e s s E n t r y条目 在后面介绍A d d r e s s E n t r y F i l t e r对象时再详细讨论 F i l t e r属性。本节将重点介绍其 他属性。 像F i e l d s、R e c i p i e n t s和A t t a c h m e n t s集合一样,A d d r e s s E n t r i e s集合有C o u n t属性和I t e m属性。 与其他集合不同的是它被看作一个大的集合,这就意味着此 C o u n t属性不像它在小的集合中那 么有效或有用。因此,在此集合中引用一个 A d d r e s s E n t r y F i l t e r对象,最可靠的方法是使用此 集合的G e t方法,或指定一个唯一的标识符。 此集合提供了的四个G e t方法: • GetFirst。 • GetNext。 • GetPrevious。 • GetLast。 这些方法分别返回集合中的第一个、下一个、前一个和最后一个 A d d r e s s E n t r y对象。例如, 如果想要找到一个名为“J e a n i e”的A d d r e s s E n t r y对象,可以在集合中这样搜寻: 第2 3章 A S P、C D O与Exchange Serv e r计计691 下载
6925:3高级程 False Set objAddEntry colAddEntries GetFirst hile (objAddEntry Is Not Nothing) And (Not blnFound If objAddEntry. Name ..Jeanie.Then blnFound = True End if Set objAddEntry colAddEntries GetNext 遗憾的是这不是一个定位特定 AddressEntry对象的高效方法。如果知道此集合是基于对象 的Name属性存储的,就能使用集合的Item属性,并指定一个搜索字符串来替代 Index。Item属 性的语法为 objAddrEntriescoll. Item(searchvalue) earch value参数是需查找的字符串值。当在Item属性调用中指定一个搜索字符串时,返 回的是其发现的第一个条目,该条目的当前排序属性的值等于(或大于) )search value中指定的字 符串值。例如,如果知道Name属性是当前的排序属性,下面的代码返回 Jeanie的 AddressEntry 对象 Set objAddEntry colAddEntries Item("Jeanie) 知道了能搜索基于当前排序属性的 Address Entry条目,现在可能想知道如何设置排序属性 在 Address entries集合中有一个Sort方法,允许指定使用的排序属性,以及基于此属性的排序 类型。语法为: COlAddEntries. Sort( [Sortorder] [ PropTag] colAddEntries. Sort( [Sortorder] [ name]) 这里有两套参数,其原因是既可以根据缺省的MAPI属性排序,也可以根据定制的MAPI 属性排序。当根据缺省的MAPI属性排序时,用第一个语法并指定用于排序的MAPI属性的属 性标记值。如果根据定制的MAPI属性排序,那么使用第二个语法。不管采用那种方法,第 个参数指定了排序的次序,其值及说明如表23-16所示 表23-16 Sortorder的值及说明 Cdonone(o) 不排序 deScending(1) 缺省,升序排列 Cdo Descending(2) 降序排列 注意到两个参数都是可选的,因此以下规则适用: 在两者都省略的情况下,集合使用与最后一次调用Sort方法相同的值排序。 ·如果省略了 Sortorder,就按升序排列。 ·如果 PropTag和Name都没指定,集合将用与最后一次调用Sort方法相同的值排列 对于任何一次调用Sort方法,当前的排列顺序都不会保留。排序是同一级别的,不能嵌套 因此,不能同时用名称和地址排序。每次只能用一个属性作为集合的排序属性。 Address entry对象
遗憾的是这不是一个定位特定 A d d r e s s E n t r y对象的高效方法。如果知道此集合是基于对象 的N a m e属性存储的,就能使用集合的 I t e m属性,并指定一个搜索字符串来替代 I n d e x。I t e m属 性的语法为: s e a r c h Va l u e参数是需查找的字符串值。当在 I t e m属性调用中指定一个搜索字符串时,返 回的是其发现的第一个条目,该条目的当前排序属性的值等于 (或大于) s e a r c h Va l u e中指定的字 符串值。例如,如果知道 N a m e属性是当前的排序属性,下面的代码返回 J e a n i e的A d d r e s s E n t r y 对象: 知道了能搜索基于当前排序属性的 A d d r e s s E n t r y条目,现在可能想知道如何设置排序属性。 在A d d r e s s E n t r i e s集合中有一个S o r t方法,允许指定使用的排序属性,以及基于此属性的排序 类型。语法为: 或: 这里有两套参数,其原因是既可以根据缺省的 M A P I属性排序,也可以根据定制的 M A P I 属性排序。当根据缺省的 M A P I属性排序时,用第一个语法并指定用于排序的 M A P I属性的属 性标记值。如果根据定制的 M A P I属性排序,那么使用第二个语法。不管采用那种方法,第一 个参数指定了排序的次序,其值及说明如表 2 3 - 1 6所示。 表23-16 SortOrder的值及说明 值 描 述 C d o N o n e ( 0 ) 不排序 C d o A s c e n d i n g ( 1 ) 缺省,升序排列 C d o D e s c e n d i n g ( 2 ) 降序排列 注意到两个参数都是可选的,因此以下规则适用: • 在两者都省略的情况下,集合使用与最后一次调用 S o r t方法相同的值排序。 • 如果省略了S o r t O r d e r,就按升序排列。 • 如果P r o p Ta g和N a m e都没指定,集合将用与最后一次调用 S o r t方法相同的值排列。 对于任何一次调用S o r t方法,当前的排列顺序都不会保留。排序是同一级别的,不能嵌套。 因此,不能同时用名称和地址排序。每次只能用一个属性作为集合的排序属性。 A d d r e s s E n t r y对象 692计计ASP 3 高级编程 下载
40N2.693 下载 AddressEntry对象包括消息系统需要的所有地址信息。大多情况下,它与一个人或投递消 息的分发列表相对应。其属性及说明如表23-17所示。 表23-17 AddressEntry对象的属性及说明 Address Address Entry的完整消息地址 Display Type 返回 Address Entry的显示类型 返回与当前的 Address Entry对象对应的用户的管理员的 Address Entry对象 返回MAP生成的 AddressEntry的唯一的ID Members 返回一个分发列表的全部成员的 Address Entries集合。如果当前 Address Entry不是一个分发列表,返回 nothing 返回和设置 Address Entry对象的显示名称 返回和设置地址类型。如SMTP、X400等 AddressEnt!y对象有五个方法 · Details Get FreeBusyo IsSameaso 这个 Delete方法与其他 Delete方法一样,从 AddressEntries集合中删除当前的 AddressEntry对 Get Free busy和 Is sameas方法与 Recipient对象中的相应方法的工作方式一样 如果不作为一个ASP应用程序运行, Details方法将显示一个对话框,表明当前 Address Entry对象的详细情况。在ASP应用程序中,不使用此方法。 另一方面, Update方法是一个能在我们的应用程序中使用的方法。这个方法用来提交 个 AddressEntry对象的变化。语法如下: ObjAddressEntry. Update( [makePermanent] [ refreshobject]) 此方法中的两个参数都是可选的,说明如下: make Permanent参数指定是否将改变保存到地址簿。如果没有保存这些改变,它们就只 供当前的 Addressentries集合使用。当更新或释放集合时,改变就会丢失。 refreshobject参数指定是否从地址簿中重新载入属性缓存 因此,如果想要更新集合中每一项 AddressEntry,在它们的显示名称后添加“(Wrox)”, 应使用下面的代码 For Each objAddEntry In colAddEntries objAddEntry Name objAddEntry Name&.(Wrox). objAddEntry. Update(makePermanent: =True) 5. Address Entry Filter对象 在浏览 Addressentries集合的属性时曾提到 Filter属性,它能设置或返回一个 Address Entry Filter对象。下面介绍这个对象,并分析它如何对 Addressentries集合产生影响 AddressEntry Filter对象用来指定一个信息,用它来过滤一个 Address Entries集合。例如 它能只显示有远程消息地址的 AddressEntry对象。 其属性及说明如表23-18所示
第2 3章 A S P、C D O与Exchange Serv e r计计693 下载 A d d r e s s E n t r y对象包括消息系统需要的所有地址信息。大多情况下,它与一个人或投递消 息的分发列表相对应。其属性及说明如表 2 3 - 1 7所示。 表23-17 AddressEntry 对象的属性及说明 属 性 说 明 A d d r e s s A d d r e s s E n t r y的完整消息地址 D i s p l a y Ty p e 返回A d d r e s s E n t r y的显示类型 M a n a g e r 返回与当前的A d d r e s s E n t r y对象对应的用户的管理员的 A d d r e s s E n t r y对象 I D 返回M A P I生成的A d d r e s s E n t r y的唯一的I D M e m b e r s 返回一个分发列表的全部成员的 A d d r e s s E n t r i e s集合。如果当前 A d d r e s s E n t r y不是一个分发列表,返回 N o t h i n g N a m e 返回和设置A d d r e s s E n t r y对象的显示名称 Ty p e 返回和设置地址类型。如S M T P、X 4 0 0等 A d d r e s s E n t r y对象有五个方法: • Delete。 • Details。 • GetFreeBusy。 • IsSameAs。 • Update。 这个D e l e t e方法与其他D e l e t e方法一样,从A d d r e s s E n t r i e s集合中删除当前的A d d r e s s E n t r y对 象。G e t F r e e B u s y和I s S a m e A s方法与R e c i p i e n t对象中的相应方法的工作方式一样。 如果不作为一个 A S P应用程序运行, D e t a i l s 方法将显示一个对话框,表明当前 A d d r e s s E n t r y对象的详细情况。在A S P应用程序中,不使用此方法。 另一方面,U p d a t e方法是一个能在我们的应用程序中使用的方法。这个方法用来提交一 个A d d r e s s E n t r y对象的变化。语法如下: 此方法中的两个参数都是可选的,说明如下: • m a k e P e r m a n e n t参数指定是否将改变保存到地址簿。如果没有保存这些改变,它们就只 供当前的A d d r e s s E n t r i e s集合使用。当更新或释放集合时,改变就会丢失。 • refreshObject参数指定是否从地址簿中重新载入属性缓存。 因此,如果想要更新集合中每一项 A d d r e s s E n t r y,在它们的显示名称后添加“ ( Wr o x )”, 应使用下面的代码: 5. AddressEntryFilter对象 在浏览 A d d r e s s E n t r i e s 集合的属性时曾提到 F i l t e r 属性,它能设置或返回一个 A d d r e s s E n t r y F i l t e r对象。下面介绍这个对象,并分析它如何对 A d d r e s s E n t r i e s集合产生影响。 A d d r e s s E n t r y F i l t e r对象用来指定一个信息,用它来过滤一个 A d d r e s s E n t r i e s集合。例如, 它能只显示有远程消息地址的 A d d r e s s E n t r y对象。 其属性及说明如表2 3 - 1 8所示