VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 网站开发 > ASPnet >
  • asp.net教程之用ASP编写邮件列表

邮件列表(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,数据类型:自动编号,本字段可以不要)s建立一个数据库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. 由于篇幅的原因,这里省去了一些代码,请读者理解。 

3组件,就可以接收邮件了。 

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

相关教程