首 页 网站运营 网络编程 网页制作 图象媒体 数据库 建站资源 网管专区 下载专区 最新资讯
IT学堂|红色黑客联盟
设为首页
加入收藏
联系站长
您所在的位置:首页>网络编程>ASP>文章内容
用ASP建立邮件列表
来源: 作者: 发布时间:2007-04-12

说起发送Email,我们总是想起邮件客户端软件,比如Outlook Express、Foxmail(最新版3.0 beta1已于 4月30号发布,请到http://www.aerofox.com/下载)等。如果在Web上发送Email,大家肯定又会想起一些免费的电子邮箱,比如大名鼎鼎的www.163.net等,那么如何实现在Web上发送Email呢?大家可能会想到首先安装邮件服务器,比如Exchange,其实NT Server4.0加IIS4.0就可以了,本文就是想以实例来说明技术上的实现方法。

  邮件列表(Maillist)在Internet上应用比较广泛。使用邮件列表可以与访问者保持积极的联系,快捷、简便、低成本地发送信息,也可以提高网站的知名度。扩展后的邮件列表也可以用于创立电子杂志(像索易:http://www.soim.online.sh.cn/)。探讨邮件列表的建立是非常有意义的,我们的实例就是建立一个邮件列表。

  一、电子邮件发送原理

  邮件传递过程的实现是从一个如Microsoft Outlook Express这样的客户端软件将一份邮件发送给一个SMTP服务器开始的,然后SMTP服务器负责决定如何处置该邮件。

  如果电子邮件的目的域是服务器的本地域(比如将电子邮件发送给harrizon@domain.com,而且SMTP服务器是smtp.domain.com),那么该邮件被存储在这个服务器上,否则将该邮件转发给另一个合适的服务器。



  网络上所有的SMTP服务器都可以通过一种“语言”互相通信,这个通用语言就是SMTP协议。但是,服务器如何决定传递邮件的目的地呢?可以通过它的域名解析系统(DNS)来查找域。

  NT Server是目前使用比较广泛的网络服务器,而且前景看好,IIS(Internet Information Server4.0,Internet信息服务器)是网络文件和应用程序服务器,它们使用HTTP、Gopher以及FTP,通过Internet或Intranet来提供服务。

  IIS SMTP服务仅提供邮件传递功能,它不能对接收邮件提供服务。Microsoft在IIS中加入了一个特殊的组件—Collaboration Data Objects for Microsoft Windows NT Server,也称为CDO for NTS Library,它提供邮件对象,可以在ASP(Active Server Pages)脚本中使用这些对象来访问和处理发送给特定用户的电子邮件。

  邮件列表就是在网上收集访问者的Email,从而在需要的时候定期向该订阅者发送一定的信息。需要的工作是收集Email、发送Email。下面我们可以看到如何来完成这些工作。

  二、 从Web页面发送电子邮件

  利用IIS SMTP和CDO for IIS,可以从一个ASP脚本直接向Internet上的任何人发送电子邮件。

  首先要安装Microsoft NT Ser-ver4.0,然后再安装IIS4.0,务必注意是否安装了SMTP服务,默认方式是安装的。安装完毕后不妨看看在winnt\system32目录下是否有一个文件cdonts.dll。如果存在这个文件,那么安装过程宣告成功。


  程序1是最简单的发送电子邮件程序,它将一封主题为subject、内容为test的邮件从邮箱harrizon@163.net发送到ivan@188.net。

  <%

  Dim MailObject

  Set MailObject = Server.CreateObject("CDONTS.NewMail")

  MailObject.Send "harrizon@163.net"," ivan@188.net", "subject", "test"

  %>

  

  这样的程序虽然可以快速测试是否成功,但是实用价值并不高。我们将其优化一下,根据邮件列表的特点,编出一个有实用价值的程序。

  首先请用Access建立一个数据库mail.mdb,用于保存email地址;然后需要建立一个表,表的名字为mail,包含一个字段email(字段名email,数据类型:文本,字段长度:50)即可,另外可以有一个id(字段名:id,数据类型:自动编号,本字段可以不要)。设置ODBC ,在控制面板中双击ODBC图标,设立dsn,其名为mail。

  至此设置部分已经完成,现在编写程序。

  将程序2加入到你的主页的合适位置。程序2的目的是为了收集访问者的Email。

  <form method="POST" action="addmail.asp">

   <p>您的Email:<input type="text" name="email" size="20"><input type="submit"



   value="订阅" name="B1"><input type="reset" value="重写" name="B2"></p>

  </form>

  用浏览器打开程序2得到结果如图1,填入一个合法的email地址,单击“订阅”。服务器自动调用程序3,输入的email将自动入库,你不妨用Access直接打开数据库mail.mdb看看刚刚入库的Email是否保存了。

  (图注ASP-1) 图1

  <%

  email=trim(request("email"))

  Set Connection=Server.Create-Object("ADODB.Connection")

  Connection.Open "mail","",""

  SQL="INSERT INTO mail(email) VALUES('"+email+"')"

  Set RS=Connection.Execute(sql)

  response.write email%>,多谢您加入!

  程序3的目的是将email保存到数据库mail.mdb里去。

  Email入库意味着有了订阅者,现在我们可以进入下一个步骤—发送邮件给订阅者了。

  这里我们用两个程序(sendmail. asp,mail.asp)来完成这部分工作,sendmail.asp的作用是生成一个界面(见图2),在这里我们可以选择发送的对象(全部或部分),填写发送的主题和内容,也可以粘贴附件,填写完毕后就单击“发送邮件”,此时对于管理员来说,一切工作是结束了,但如何发送邮件呢?我们就需要调用程序5了。

  程序5为发送邮件处置程序mail. asp。其作用就是发送邮件,当然是根据程序4的选择和输入来处理邮件的。程序5的完整源代码参见《电子与电脑》的网站www.pccomputing.com.cn。

  程序4为在线发送电子邮件sendmail.asp。程序运行结果如图2所示。

  (图注ASP-2) 图2

  (程序4)

  <% Set Connection=Server.CreateObject("ADODB.Connection")

  Connection.Open "mail","",""

  sql="select * from mail"

  Set RS=Connection.Execute(sql)

  sql1="select count(*) from mail"

  Set RS1=Connection.Execute(sql1)

  %>

  <form method="POST" action="mail.asp">

  <table border="1" width="100%">

   <tr bgColor="#abcdef">

   <td align="middle">适占耍喝*<%=rs1(0)%>位订阅者<inputtype=

   "checkbox" name="all" value="1" checked><hr><%do while not

   rs.eof%>

   <font size="3">

   <input type="checkbox" name="shou" value="<%=rs(0)%>">

  <%=RS(1)%>

  <%

   rs.movenext

   loop

  %> </td> </tr>

   <tr bgColor="#eeddff">

   <td width="7%">

   邮件主题:<input type="text" name="subject" size="53"><br>

   邮件内容:<br>

   <textarea rows="9" name="body" cols="59"></textarea><br>

   您的mail:<input type="text" name="usemail" size="50" value="harrizon@21cn.com">

   <br>附件:<input type="file" maxlength="50" name="attfile" size="20" value="">附件名称:<input type="text" name="fname" size="10" value=""><br></p>

   <input type="submit" value="发送邮件" name="B1"><input type="reset" value="重写" name="B2"></p> </td>

  </tr>

  </table>

  </form>

  

  (程序5)

  <% SHOU=trim(request("SHOU")) '取得在程序四选择和输入的内容

   subject=trim(request("subject"))

   body=trim(request("body"))

   att_file=trim(request("attfile"))

   fname=trim(request("fname"))

   usemail=trim(request("usemail"))

   ckall=request("all")

  if ckall=1 then '是否是给所有订阅者发送邮件

  Set Conn2=Server.CreateObject("ADODB.Connection")

  conn2.open "MAIL","","" '打开数据库

  sql2="select * from mail"

  Set RS2=Conn2.Execute(SQL2) '从数据库读出所有的邮件地址

   do while not rs2.eof

  item=rs2(0)

  Set Conn=Server.CreateObject("ADODB.Connection")

  conn.open "MAIL","",""

  sql="select * from mail where id="+cstr(item)+""

  Set RS=Conn.Execute(SQL)

  Set MailObject = Server.CreateObject("CDONTS.NewMail")

  if att_file="" then '附件为空

  MailObject.Send usemail,rs(1),subject,body

  response.write "无附件web邮件发送成功!"

  %><hr><%else



  f_name=fname

  MailObject.From=gzer@163.net '发件邮址

  MailObject.To=rs(1) '收件人

  MailObject.Subject=subject

  MailObject.Body=body

  MailObject.AttachFile att_file,f_name

  MailObject.Send '发送邮件

  response.write "含附件web邮件发送成功!" '发送成功

  end if

  response.write "收信地址:"+rs(1)+"<p>"

  response.write "主题:"+ subject +"<br>"

  response.write "内容:"+ body +"<br>"

  %><hr><% rs2.movenext

   loop

  else

  for each item in request("shou")

  Set Conn=Server.CreateObject("ADODB.Connection")

  conn.open "MAIL","",""

  sql="select * from mail where id="+cstr(item)+""

  Set RS=Conn.Execute(SQL)

  Set MailObject = Server.CreateObject("CDONTS.NewMail")

  if att_file="" then

  MailObject.Send usemail,rs(1),subject,body

  response.write "无附件web邮件发送成功!"


  %><hr><%else '

  f_name=fname

  MailObject.From="gzer@163.net" '发件邮址

  response.write rs(1) +"<br>"

  MailObject.To=rs(1) '收件人

  MailObject.Subject=subject

  MailObject.Body=body

  MailObject.AttachFile att_file,f_name

  MailObject.Send

  response.write "含附件web邮件发送成功!"

  end if

  %><hr><% next '下一封邮件

  end if

  %>

  

  三、 后记

  1. 由于篇幅的原因,这里省去了一些代码,请读者理解。

  2. 如果发送邮件时加一个接收电子邮件地址的输入栏,那么你可以给任何一个合法的地址发送电子邮件,应用也就更为广泛了。

  3. 使用本程序可以发送匿名邮件,但注意请勿乱用!

  4. 若是使用POP3组件,就可以接收邮件了。

  5. 本程序的附件发送不支持中文路径,有心者不妨编写更好的组件来支持中文路径。



[推荐] [返回顶部] [打印本页] [关闭窗口]
热点文章
·ASP如何获取客户端真实IP地址
·ASP实现可显示和隐藏的树型菜单
·用ASP动态生成JS的表单验证代码
·ASP:用Asp编程实现QQ的在线情况查询
·ASP:用ASP打造一个小型的网页BBS系统
·ASP:用ASP编程实现网络内容快速查找
·ASP:利用ASP把图片上传到数据库
·ASP无法更新ACCESS数据库解决方法
·如何对ASP.NET进行性能优化
·入门:防范SQL注入攻击的新办法
相关文章
·编写数据库脚本
·用ASP统计用户在站点的停留时间
·aspemail组件的应用
·用ASP技术编制隐藏用户密码程序
·用DataList控件开发一个简单的留言本
·用ASP实现对MP3曲目信息的操作
·ASP实现播放Flash的例子
·文件的读出 编辑 管理
·用户注册及跟踪代码(三)
·跟我学做最强功能的网站统计
文章检索
Google
相关文章
·编写数据库脚本
·用ASP统计用户在站点的
·aspemail组件的应用
·用ASP技术编制隐藏用户
·用DataList控件开发一个
·用ASP实现对MP3曲目信息
·ASP实现播放Flash的例子
·文件的读出 编辑 管理
·用户注册及跟踪代码(三
·跟我学做最强功能的网站
·用户注册及跟踪代码(二
·用ASP、VB和XML建立互联
·简单ASP论坛DIY
·利用CDONTS发送邮件的AS
·用户注册及跟踪代码(一