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文件 这个语法考虑到了Fle、UUID、Ⅴ ersion和LCID属性,UUID对此类型库是全局 唯一的,但是在多个安装间是一致的。 旦在 global. asp中添加了这个META标记,就能在ASP页面中使用 CDONTS常量。它们 能够减轻你记忆一些特定值的工作量。因此,不必记住 Cdohigh等于2,在ASP程序中可以只 使用 CdoHigh常量。 另一个有用的小技巧是在所有的ASP文件的顶端包含。然 后,假如要使用一个未声明的常量,在执行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文件的顶端包含 。然 后,假如要使用一个未声明的常量,在执行 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 下载
65253高级程 NewMail对象允许为消息指定其TO、CC和BCC收件人,例如: objSendMail.To=Jeanie@RightHere.com objsendmail.Cc=jEaniesboss@righthere.com' objSendMail. BCC ="steveeRightHere com 使用这些属性,消息将被发送到Jeanie@RightHere.com,JeaniesBoss@RightHere.com将 得到消息的副本,Steve@RightHere.com将得到消息的隐蔽副本 BCC行上的任何收件人都得不到其他收件人的信息,同理,任何TO或CC收件人 清单上的收件人也不知道消息副本发送给了BCC收件人。在有多个BCC收件人的情 况下,BCC收件人不会察觉到其他的收件人 可以给TO、CC和BCC属性指定多个名字(地址)。发送一个消息给多个收件人,只需用分 号隔开各个地址就行了 ob]SendMailTo=.Johnewherecom;Jack@where.com;Tina@where.com' 个消息只能有一个发送者,故From属性永远不需要一个以上的地址。 2. Importance.属性 NewMan对象有一个 Importance属性,允许设置邮件消息的优先级(重要性),优先级有三 个不同的值,它们中的每一个都在 CDONTS DLL库中有一个常量与之相对应 高: CdoHigh或者2 正常: Conormal或1 低: Cdolow或0 消息缺省的优先级为正常。要设置消息的优先级为高或低,只需要分别设 Importance属性 为 Cdohigh或 Cdolow: obj sendmail Importance CdoHigh Send方法也允许指定消息中的主要信息。在第一个例子中,没有指明其优先级,它是 个任选参数,可用下面的方式来指明 objsendMail.SendJohn@Anywhere.com,.Jeanie@RigthHerecom", Greetings","How have you been 消息优先级的设置可能在其传送中不能起到任何作用,这一点非常重要。虽然一些服务 器也有加速分发优先级最高的消息的功能,但不是所有的在传递线路上的服务器都有这种功 能。类似,收件人的邮件客户也可能不能区分重要性不同的消息 虽然有很多邮件客户能基于优先级来区分,但这不是普遍的,不能保证所有的 收件人都有一个支持此功能的邮件客户。 3.邮件消息的主体 Body属性指明消息的主体内容,它可能是普通文本或HTML。例如,可以创建一个普通 文本的主体,如下 objSendMail. Body -"How have you been? 在缺省情况下,所有的消息都是格式化后的普通文本。 另外,可以发送有HTML格式主体的消息。要做到这一点,首先需要设置New Body Format属性为 Cdobody FormatHTML,然后设置Body属性为一个HTML格式的字符串 Dim strHTML
N e w M a i l对象允许为消息指定其TO、C C和B C C收件人,例如: 使用这些属性,消息将被发送到 J e a n i e @ R i g h t H e r e . c o m,J e a n i e s B o s s @ R i g h t H e r e . c o m将 得到消息的副本,S t e v e @ R i g h t H e r e . c o m将得到消息的隐蔽副本。 B C C行上的任何收件人都得不到其他收件人的信息,同理,任何 TO或C C收件人 清单上的收件人也不知道消息副本发送给了 B C C收件人。在有多个 B C C收件人的情 况下,B C C收件人不会察觉到其他的收件人。 可以给TO、C C和B C C属性指定多个名字(地址)。发送一个消息给多个收件人,只需用分 号隔开各个地址就行了。 一个消息只能有一个发送者,故 F r o m属性永远不需要一个以上的地址。 2. Importance属性 N e w M a i l对象有一个I m p o r t a n c e属性,允许设置邮件消息的优先级 (重要性),优先级有三 个不同的值,它们中的每一个都在 C D O N T S . D L L库中有一个常量与之相对应: • 高:C d o H i g h或者2 • 正常:C d o N o r m a l或1 • 低:C d o L o w或0 消息缺省的优先级为正常。要设置消息的优先级为高或低,只需要分别设 I m p o r t a n c e属性 为C d o H i g h或C d o L o w: S e n d方法也允许指定消息中的主要信息。在第一个例子中,没有指明其优先级,它是一 个任选参数,可用下面的方式来指明: 消息优先级的设置可能在其传送中不能起到任何作用,这一点非常重要。虽然一些服务 器也有加速分发优先级最高的消息的功能,但不是所有的在传递线路上的服务器都有这种功 能。类似,收件人的邮件客户也可能不能区分重要性不同的消息。 虽然有很多邮件客户能基于优先级来区分,但这不是普遍的,不能保证所有的 收件人都有一个支持此功能的邮件客户。 3. 邮件消息的主体 B o d y属性指明消息的主体内容,它可能是普通文本或 H T M L。例如,可以创建一个普通 文本的主体,如下: 在缺省情况下,所有的消息都是格式化后的普通文本。 另外,可以发送有H T M L格式主体的消息。要做到这一点,首先需要设置 N e w M a i l对象的 B o d y F o r m a t属性为C d o B o d y F o r m a t H T M L,然后设置B o d y属性为一个H T M L格式的字符串: 652计计ASP 3 高级编程 下载
chinapub coM 28 ASP BIH FNT s B MCD0 653 载 strHTML =cHMM?' strhTML strhtM c strhfML strhTMl s C>Greetings trHIML a strHTML strhIML strHTML strHTML strhtml c t a Wonderful day! strhTMI s strhiMl c strhTML strhTML chTML> Set obj SendMail Createobject(CDONTS NewMail) With ob] sendAi com To ="Jeanie@RightHere. Co Cdobody FormatHIML strHTML End with Mail Nothing 如果想在HTML消息的主体中包含多个URL,可以使用 Contentlocation和 Content base属 性。将它们放在一起,这些属性为包含在HTML消息主体内所有的URL提供了一个绝对路径 它不仅包括与主体关联的URL,而且包括任何可能包含在主体的HTML标记中的URL: Contentlocation属性允许为包含在HTML消息主体内的所有URL指定一绝对或相对路 Content base属性允许为所有包含在消息主体内的URL指定一个基本路径。 当 ContentLocation属性为非空(不等于””)时,消息主体内的所有URL作为相对路径来解 释,相对于在 Contentlocation属性中指定的路径。当 Contentbase属性也为非空时 ContentLocation路径被作为相对路径来解释,它相对于在 Content base属性中指定的路径。 这可能有点混淆不清,用一个例子来分清这两种情况 Dim strHTML crHTML s strHTML &" trHTML strHTML&"Greetings" trHTML ' strHTM strhTML ' strHTML e strHTML 'What a NG>Wonderful day! strHTML &.<IMG SRC= strHTML & "</BODY strHTML &"<HTML Set objSendMail Createobject("CDONTS NewMail") with objsendMai From=.John@Anywhere.com Body Format CdoBody FormatHTML ContentS http://www.anYwhere.com ContentLocation ='pictures Send End with Set objsendmail Nothing
如果想在H T M L消息的主体中包含多个 U R L,可以使用C o n t e n t L o c a t i o n和C o n t e n t B a s e属 性。将它们放在一起,这些属性为包含在 H T M L消息主体内所有的U R L提供了一个绝对路径, 它不仅包括与主体关联的U R L,而且包括任何可能包含在主体的 H T M L标记中的U R L: • C o n t e n t L o c a t i o n属性允许为包含在 H T M L消息主体内的所有 U R L指定一绝对或相对路 径。 • ContentBase属性允许为所有包含在消息主体内的 U R L指定一个基本路径。 当C o n t e n t L o c a t i o n属性为非空(不等于””)时,消息主体内的所有 U R L作为相对路径来解 释,相对于在 C o n t e n t L o c a t i o n属性中指定的路径。当 C o n t e n t B a s e属性也为非空时, C o n t e n t L o c a t i o n路径被作为相对路径来解释,它相对于在 C o n t e n t B a s e属性中指定的路径。 这可能有点混淆不清,用一个例子来分清这两种情况: 第2 2章 A S P和用于N T服务器的C D O计计653 下载
654A5p高程 Cha° ub. coM 下载 当浏览器显示 Great Day jpg文件时,它将把 Content Base和 ContentLocation属性值作为路径 的前缀。在这种情况下,浏览器将显示的文件是http://www.anywherecom/pictures Great Day jpg 在局域网设置中可能碰到过另一种情形。比如,一些公司设置一个不是web服务器的文 档服务器,使用hp格式的路径不能访问这个服务器,但 Content Base和 Contentlocation属性 允许使用UNC路径,例如 objsendMail. ContentBase =.\\The Server\ objSendMail. ContentLocation documents\ 4.附件 NewMail对象有一个允许往消息里添加附件的方法,这个方法称为 Attach File,其语法描 述如下,参数及说明如表22-1所示 objNewMail. AttachFile(Source [ FileName] [ EncodingMethod] 表221 AttachFile方法的参数及说明 必须有,作为附件的文件的完全限定路径 选,在邮件客户浏览时在附件下显示这个标题 Encoding Method 可选,附件编码的方法,缺省的方法是 UUENCODE,可能的编码格式还 有 CdoEncodinglUen Code和 Cdo Encoding Base64 要发送一个带附件的消息,可以用如下程序: Set obj sendMail Createobject("CDONTS NewMail) With objSendMail From =JohneAnywhere com To -JeanieeRightHere com" Subject ="Inventory. Body ="Here is the inventory report that you had requested AttachFile(c: \InventoryListing. xls,"Inventory Report End with Set objsendMail Nothing AttachFile方法把文件C: AInventory Listing. xls作为一个附件添加到消息中,附件的标题就 是 Inventory Report,没有指定编码格式,因此附件将使用 UUENCODE编码。所有附件都缺省 用 UUENCODE来编码,除非改变了 MailFormat属性或在 AttachFile方法调用中指定了编码格 式 5. MailFormat属性 用 NewMail对象创建的消息的缺省邮件格式是普通文本。 Mailformat属性允许在 MIME( Multipurpose Internet Mail Extension,多用途的网际邮件扩充)和普通文本格式中选择 个。普通格式文本( CdomailFormattext)使用RFC822和 UUENCODE格式化消息,MIME格 式( CdoMail MIME)将邮件格式化为MIME格式 MIME格式为在混合网络和消息环境传递大量的消息内容而设计。 要改变使用的格式为MIME格式,可以这样设置 MailFormat属性
当浏览器显示G r e a t D a y. j p g文件时,它将把C o n t e n t B a s e和C o n t e n t L o c a t i o n属性值作为路径 的前缀。在这种情况下,浏览器将显示的文件是 h t t p : / / w w w. a n y w h e r e . c o m / p i c t u r e s / G r e a t D a y. j p g。 在局域网设置中可能碰到过另一种情形。比如,一些公司设置一个不是 We b服务器的文 档服务器,使用 h t t p格式的路径不能访问这个服务器,但 C o n t e n t B a s e和C o n t e n t L o c a t i o n属性 允许使用U N C路径,例如: 4. 附件 N e w M a i l对象有一个允许往消息里添加附件的方法,这个方法称为 A t t a c h F i l e,其语法描 述如下,参数及说明如表2 2 - 1所示。 表22-1 AttachFile 方法的参数及说明 参 数 说 明 s o u r c e 必须有,作为附件的文件的完全限定路径 F i l e N a m e 可选,在邮件客户浏览时在附件下显示这个标题 E n c o d i n g M e t h o d 可选,附件编码的方法,缺省的方法是 U U E N C O D E,可能的编码格式还 有C d o E n c o d i n g U U e n C o d e和C d o E n c o d i n g B a s e 6 4 要发送一个带附件的消息,可以用如下程序: A t t a c h F i l e方法把文件C : \ I n v e n t o r y L i s t i n g . x l s作为一个附件添加到消息中,附件的标题就 是Inventory Report,没有指定编码格式,因此附件将使用 U U E N C O D E编码。所有附件都缺省 用U U E N C O D E来编码,除非改变了 M a i l F o r m a t属性或在A t t a c h F i l e方法调用中指定了编码格 式。 5. MailFormat属性 用N e w M a i l对象创建的消息的缺省邮件格式是普通文本。 M a i l F o r m a t属性允许在 MIME(Multipurpose Internet Mail Extension,多用途的网际邮件扩充 )和普通文本格式中选择 一个。普通格式文本 ( C d o M a i l F o r m a t Te x t )使用R F C 8 2 2和U U E N C O D E格式化消息,M I M E格 式( C d o M a i l F o r m a t M I M E )将邮件格式化为M I M E格式。 M I M E格式为在混合网络和消息环境传递大量的消息内容而设计。 要改变使用的格式为M I M E格式,可以这样设置M a i l F o r m a t属性: 654计计ASP 3 高级编程 下载
chinapub.coM m2 8 AS B NTR S 3aCD0 655 下载 obj SendMail. MailFormat CdoMailFormatMIME 也可以再把 MailFormat改回为 CdoMailFormattext 邮件格式的任何变化都只能适用于当前的 NewMail对象,这些变化不影响在将来 被实例化的任何 NewMail对象的缺省邮件格式,缺省邮件格式将一直是普通文本 改变 MailFormat属性也会影响消息的缺省编码格式。对于普通文本格式的消息,附件使 用 UUENCODE格式来编码:对于MIME格式的消息,附件使用Base64来编码 同样,假如指定使用Base64格式来编码一个附件,那么与之相应的消息的格式将是 CDOMailFormatMIme。 6.格式选项 因为有许多编码和格式化的可能方式,因此,不得不判断哪一个是最适合的。答案除了 取决于发送消息的目的外,还取决于消息收件人的身份。下面有一些选择格式的原则: ·当使用 CDONTS仅仅发送简单的管理邮件或信息邮件到一个小组或用户自己时,关心消 息的内容而不是它的格式。将消息格式化为HTML格式将多做些工作,这种情况下,得 不到任何益处。无论消息是HTML格式还是普通文本格式,得到的都是同一信息。所以 仅需使普通文本格式 假如想使用 CDONTS编排并发送邮件到邮件清单或订阅者之类的大组,那么格式就可 相对很重要。这种情况下,可能要额外花时间来创建一些能更好地显示发送者想法的 HTML,可以使用 Visual InterDev、 FrontPage和其他HTML制作工具来创建HTML并把 它粘贴到ASP页面中。 ·考虑消息的大小。一般来说,普通文本格式的消息相对较小。当使用HTML格式时,大 量的标记和其它文本加入到消息中,这可能极大地增大了消息的大小,这些很大的邮件 可能使收件人花费很长的时间去下载。虽然现在网络在加速,但那些相当大的文档(带 有大量图片或附件)仍可能花费大量时间和上网 应该考虑发件人的邮件客户,虽然很多的邮件客户都有处理MIME消息的能力,但仍有 许多用户的邮件客户并不支持MIME。假如不能确定收件人的邮件客户的能力,就应该 使用最通用的格式,对e-mai来说,这应是普通文本 7.修改消息的报头 NewMail对象除了能提供一个从ASP页面又快又简捷地发送邮件的方法外,它还有一些更 高级的功能。在第一个例子中,你看到了如何用三行代码来发送一条消息 Set objSendMail Createobject( CDONTS. NewMaii') objSendMailSend"John@Anywhere.com","Jeanieelisas' Greetings," How have you been? Set objsendMail- Nothing 在 Microsoft outlook中打开这一条消息 OReo /Red A wo 如图22-2所示。 大多数邮件客户允许浏览消息的全部源 在 Outlook2000打开消息,可以单击mm ViewlOptions来浏览 Internet Headers列表栏中 的所有消息报头,消息的实际源码如下所示。 图222 Microsoft outlook中显示的消息
也可以再把M a i l F o r m a t改回为C d o M a i l F o r m a t Te x t。 邮件格式的任何变化都只能适用于当前的 N e w M a i l对象,这些变化不影响在将来 被实例化的任何N e w M a i l对象的缺省邮件格式,缺省邮件格式将一直是普通文本。 改变M a i l F o r m a t属性也会影响消息的缺省编码格式。对于普通文本格式的消息,附件使 用U U E N C O D E格式来编码;对于M I M E格式的消息,附件使用B a s e 6 4来编码。 同样,假如指定使用 B a s e 6 4格式来编码一个附件,那么与之相应的消息的格式将是 C D O M a i l F o r m a t M I M E。 6. 格式选项 因为有许多编码和格式化的可能方式,因此,不得不判断哪一个是最适合的。答案除了 取决于发送消息的目的外,还取决于消息收件人的身份。下面有一些选择格式的原则: • 当使用C D O N T S仅仅发送简单的管理邮件或信息邮件到一个小组或用户自己时,关心消 息的内容而不是它的格式。将消息格式化为 H T M L格式将多做些工作,这种情况下,得 不到任何益处。无论消息是 H T M L格式还是普通文本格式,得到的都是同一信息。所以 仅需使普通文本格式。 • 假如想使用C D O N T S编排并发送邮件到邮件清单或订阅者之类的大组,那么格式就可能 相对很重要。这种情况下,可能要额外花时间来创建一些能更好地显示发送者想法的 H T M L,可以使用Visual InterDev、F r o n t P a g e和其他H T M L制作工具来创建 H T M L并把 它粘贴到A S P页面中。 • 考虑消息的大小。一般来说,普通文本格式的消息相对较小。当使用 H T M L格式时,大 量的标记和其它文本加入到消息中,这可能极大地增大了消息的大小,这些很大的邮件 可能使收件人花费很长的时间去下载。虽然现在网络在加速,但那些相当大的文档 (带 有大量图片或附件)仍可能花费大量时间和上网。 • 应该考虑发件人的邮件客户,虽然很多的邮件客户都有处理 M I M E消息的能力,但仍有 许多用户的邮件客户并不支持 M I M E。假如不能确定收件人的邮件客户的能力,就应该 使用最通用的格式,对e - m a i l来说,这应是普通文本。 7. 修改消息的报头 N e w M a i l对象除了能提供一个从A S P页面又快又简捷地发送邮件的方法外,它还有一些更 高级的功能。在第一个例子中,你看到了如何用三行代码来发送一条消息: 在Microsoft Outlook中打开这一条消息, 如图2 2 - 2所示。 大多数邮件客户允许浏览消息的全部源 码。在 Outlook 2000 中打开消息,可以单击 Vi e w | O p t i o n s来浏览Internet Headers列表栏中 的所有消息报头,消息的实际源码如下所示。 第2 2章 A S P和用于N T服务器的C D O计计655 下载 图22-2 Microsoft OutLook 中显示的消息
656A5p3高程 China°bo 下载 Received: from mail pickup service by Mailsvr with Microsoft SMTPsvC Tue,5oct199918:05:29-0700 From: Subject: Greeting Date:Tue,5oct199918:05:29-0700 X-MSMail-Priority: Normal Importance: Normal X-MimeOLE: Produced By Microsoft MimeOLE V5 00. 2314.1300 Message-ID: To: Subject: Greetings Date:Te,5oct199918:05:29-0700 Keywords: Greetings -Priority: 3 X-MSMail-Priority: Normal X-MimeoLE: Produced By Microsoft MimeOLE V5002314.1300 sage-ID:<003ab5530021789Ma How have you been? NewMail对象缺省的属性是 Value集合,所以下面的代码可起到同样的效果 Set objSendMail Createobject("CDONTS NewMail)
可以看出包含在消息中的信息比包含在消息主体中的的信息多得多。阅读消息时有许多 邮件报头没有显示出来。大部分报头消息都基于 N e w M a i l对象属性的设置值或作为 S e n d方法 的参数,邮件服务器在处理消息时在报头中产生其他信息: 可以使用N e w M a i l对象的Va l u e集合来设置自己的报头值,并为将要发送的消息创建报头, 这样做的一个原因是,不是所有的消息服务器都能够解释一些不是通过 N e w M a i l对象自动产 生的报头。另一方面,也可能有些服务器不能解释定制的报头,这种情况下,服务器将忽略 不能解释的报头。 对于这些报头的更多信息,例如 K e y w o r d s、R e f e r e n c e s和R e p l y - To报头,可在 h t t p : / / w w w.cis.ohio-state.edu/htbin/rfc/rfc733.html 看到A R PA互联网文本消息的格式 标准( S T D 0 11 )。 下面的程序就添加了一个K e y w o r d s报头: 当再来看消信息的源码时,可以看到已经添加了一个 K e y w o r d s报头: N e w M a i l对象缺省的属性是Va l u e集合,所以下面的代码可起到同样的效果: 656计计ASP 3 高级编程 下载