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</TITLE> trHIML a strHTML strhIML strHTML strHTML strhtml c t a <sTRONG>Wonderful</STRONG> day!</P> 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 &"<HEAD> trHTML strHTML&"<TITLE>Greetings</TITLE>" trHTML </HEAD>' strHTM strhTML '<BODY> strHTML e strHTML '<P>What a NG>Wonderful</STRONG> day!</P> 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:<John@Anywhere.com> 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: <003ab5530021789GMailsvr How have you been? 可以看出包含在消息中的信息比包含在消息主体中的的信息多得多。阅读消息时有许多 邮件报头没有显示出来。大部分报头消息都基于 NewMail对象属性的设置值或作为Send方法 的参数,邮件服务器在处理消息时在报头中产生其他信息 Received: from mail pickup service by MailSvr with Microsoft sMTPSvC; Tue 可以使用 NewMail对象的 Value集合来设置自己的报头值,并为将要发送的消息创建报头, 这样做的一个原因是,不是所有的消息服务器都能够解释一些不是通过 New Mail对象自动产 生的报头。另一方面,也可能有些服务器不能解释定制的报头,这种情况下,服务器将忽略 不能解释的报头 对于这些报头的更多信息,例如 Keywords、 References和 Reply-To报头,可在 http://www.cis.ohio-state.edu/htbin/rfc/rfc733.html看到ARPA互联网文本消息的格式 标准(STD011) 下面的程序就添加了一个 Keywords报头 Set objSendMail Createobject("CDONTS NewMail") bjSendMail. Value("Keywords")="Greetings nd JohnaAnywhere com Jeanie@lisas Greetings, How have you been? Set objSendMail NOTHING 当再来看消信息的源码时,可以看到已经添加了一个 Keywords报头 Received: from mail pickup service by Mailsvr with Microsoft SMTPSVC; Tue,5oct199918:05:29-0700 From:<John@Anywhere.com> To:<Jean⊥ea1isas> 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 高级编程 下载