
| 出版日期:1999-09-06 总期号:855 本年期号:65 |
|
用asp发送电子邮件
陈泽人 越来越多的人设计的网站需要从web服务器自动发送e-mail以响应因特网上的各种事件,例如: 1. 用户填好了一个表单(form),你欲将表单内容通过e-mail发送给其他人。 2. 来访者对你的产品或服务提出了反馈意见或咨询请求,你必须立即向他发一个e-mail,告诉他,你已经收到了他的意见或请求,正在处理他的请求,请他耐心等待你的回复。 3. 你要自动处理一个邮件列表。 4. 你要在你的主页中开发一个友情点歌或点贺卡的栏目,让用户点好歌曲或贺卡后,给他的朋友发送一个e-mail,请他的朋友来取歌或贺卡。 目前,多数web服务器的操作系统是unix,采用perl语言编写发送e-mail的程序是比较成熟的技术,perl语言程序只须调用unix的sendmail命令即可。本文将讨论操作系统是windows nt的情形。 在nt中安装smtp service iis(internet information server)是微软捆绑在nt中的一个拳头产品,被广泛用于构建web服务器。iis的标准产品只提供www、ftp和gopher服务,没有邮件服务。在任选软件包nt4 option pack中,微软提供了发送e-mail的一个简单方案:iis smtp service。只有安装了iis smtp service之后,才能在nt中用编程方法发送e-mail。 smtp是simple mail transfer protocol(简单邮件传输协议)的缩写。顾名思义,smtp是个简单的、易懂易用的东西。 在iis中安装了iis smtp service之后,在默认的inetpub文件夹下自动建立了一系列文件夹,用于存放邮件的一系列文件。smtp service在后台运行,并监控这些文件夹。pickup文件夹用于存放要发送的邮件,smtp service从这里取走邮件并发送到指定的邮件服务器(以下简称邮局)中去。如果它无法立即发送成功,就转到queue文件夹中,等待以后多次尝试再发送,尝试的次数和时间间隔可以设置。至于drop文件夹,用于存放从外部接收来的邮件,不是本文所关心的。 设置smtp service 下面让我们看看如何设置iis smtp service: 先从nt选单中进入windows nt 4.0 option pack→microsoft internet information server→internet service manager,即出现图1所示的microsoft management console窗口。 然后在default smtp site处点击鼠标右键→选中properties,即出现default smtp site属性窗口,接着选页框的第4页delivery,如图2所示。 让我们来设置delivery的各个属性: 1. maximum retries和retry interval:这里分为local queue和remote queue,其中remote queue只有在建立了remote domain时才起作用,一般我们只要有默认的local domain就行了。这里maximum retries和retry interval就是前面提到的无法立即发送成功后的重新尝试次数和时间间隔(分钟)。重新尝试超过设置的次数,就会把信件退回原地址。 2. maximum hop count:该属性用于限制一封信同时发往多个邮局的个数。超过设置的个数,就会把信件退回原地址。 3. masquerade domain:伪装的domain,用于替代信封上的发信人地址(from)。 4. fully qualified domain name:该属性用于标识发送信件的服务器的域名,默认为你的服务器的域名。 5. smart host:直译为“巧妙的主机”,默认值为空。大多数169 web站点没有访问internet上邮局的权限,如果你的服务器是这种站点,那么就把该项设成“hotmail.yn.cninfo.net”或其它类似的smtp服务器。 default smtp site的其它属性一般采用默认值即可。 smtp service的cdonts构件 iis smtp service提供了一系列称为cdonts(collaborative data objects for nt server)的构件,可供asp等编程语言调用,以实现与邮件服务相连接的应用。cdonts构件中最简单的是newmail构件,也是本文惟一感兴趣的构件。该构件为每一封信的信封和信的内容提供一整套属性,并在pickup文件夹中生成一个扩展名为eml的文本文件,用以记录这些属性,供smtp service取走。 事实上,我们可以用asp或其它语言程序生成上述eml文件,并把它放入pickup文件夹中。但是,用cdonts.newmail构件做这件事更简单且不易出错。 作为一个例子,我们利用下列asp(vbscript代码)调用cdonts.newmail构件,来发送一条信息。 set objmail = server.createobject(″cdonts.newmail″) objmail.to = ″you@yoursite.com″ ′设置收信人地址 objmail.from = ″me@mysite.com″ ′设置发信人地址 objmail.value(″reply-to″) = ″me@mysite.com″ ′设置回复地址 objmail.subject = ″您好!″ ′设置主题 objmail.body = ″这是一个试验。″ ′设置信的内容 objmail.send ′发送 set objmail = nothing 其中第四行:objmail.value(″reply-to″) = ″me@mysite.com″是额外增加的信息,许多邮件收发器都承认″reply-to″(回复地址)这一信息。上述这些代码产生的eml文本文件内容如下: x-receiver: you@yoursite.com x-sender: me@mysite.com reply-to: 〈me@mysite.com〉 from: 〈me@mysite.com〉 to: 〈you@yoursite.com〉 subject: 您好! date: tue, 7 jul 1999 13:38:12 +0100 x-mimeole: produced by microsoft mimeole v4.72.2106.4 这是一个试验。 一个实例 这是一个简单的示例。首先,我们要做一个网页,用来让用户输入信的有关信息。下面是这个网页源代码的表单部分: … 〈form action=″send.asp″ method=″post″〉 〈big〉〈p〉收信人地址:〈/big〉 〈input type=″text″ size=″21″ name=″msgto″〉〈br〉 〈big〉发信人地址:〈/big〉 〈input type=″text″ size=″21″ name=″msgfrom″〉〈br〉 〈big〉主题:〈/big〉〈input type=″text″ size=″48″ name=″msgsubj″〉〈br〉 〈big〉正文:〈/big〉〈br〉 〈textarea rows=″4″ name=″msgbody″ cols=″54″〉〈/textarea〉〈/p〉〈hr〉 〈p〉〈input type=″reset″ value=″清除″ name=″b2″〉 〈input type=″submit″ value=″发送″ name=″b1″〉〈/p〉 〈/form〉 …
图1 microsoft management console窗口
图2 default smtp site的delivery窗口
图3 发送e-mail示例 这个网页如图3所示。 用户点击“发送”按钮后,将执行一个文件名为send.asp的asp程序,该程序在pickup文件夹中生成一个扩展名为eml的文本文件,让smtp service取走,发往目标邮局。下面是send.asp的部分源代码: … 〈% set objmail = server.createobject(″cdonts.newmail″) objmail.to = request.form(″msgto″) objmail.from = request.form(″msgfrom″) objmail.subject = request.form(″msgsubj″) objmail.body = request.form(″msgbody″) objmail.send set objmail = nothing %〉 … 以上源代码中的request.form函数用来获取表单返回的相应信息,如:request.form(″msgto″)获取收信人地址,其余类推。 |
|||||||||||||||||