一个吸引人的功能完备的网站往往具有以下特征一是内容充实实用吸引对该类内容干兴趣的浏览者二是页面设置合理页面设计精美三是网站互动性强用户和网站或者用户与用户之间交流方便高效四是网站内容更新及时并且可以第一时间通知用户以上这些特点可能对于一些大型的门户网站而言不是特别适合因为门户网站的特点用户流量往往不是内容的区别而是用户习惯历史原因和地域区别(比如广东地区的浏览者喜欢网易北京的喜欢新浪)而对于一般个人网站或者企业网站而言以上特点就显得特别重要因为这类网站内容更新不是很快浏览者来这些网站往往具有特定目的性(比如寻找特定领域的资料或者产品信息)当网站内容吸引到用户以后网站的更新信息或者网站最新新闻就有必要及时通知浏览者以此来紧紧抓住浏览者培养浏览者的浏览忠诚度这就是网站邮件列表的作用
一邮件列表作用和工作方式邮件列表是什么呢?邮件列表就是网站或者机构为了及时通知信息给相关用户将这些用户的电子邮件保存并且在有信息需要发送的时候将信息分别发送给所有用户表面上邮件列表和发送电子邮件的时候使用的附送密送差不多基本没什么差别其实它们还是有差别的()邮件列表具有明确的发行目的发送邮件列表就是为了发送特定信息给特定用户()邮件列表接受人不能取得其他接受人的资料这一点是邮件列表和电子邮件附送的最大区别我们知道当我们收到一些电子邮件的时候发现在邮件的附送栏有很多其他用户的邮件地址这就是通过附送方式将邮件发送给一系列用户而通过邮件列表发送的邮件用户感觉就是发送人单独发送给用户的不能看见其他用户的信息当然实质也是这样发送的这样我们就可以知道邮件列表的工作方式其实是将每个用户的电子邮件取出然后逐个发送相同的信息
邮件列表既然是单独逐个发送信息那么肯定我们不能通过手工一个个发送只能通过软件来发送现在邮件列表的发送以下几种方式一是通过专门的邮件群发软件来实现这些软件将所有电子邮件地址读入然后逐个发送这些软件的优点是可以针对具体用户改变邮件主题信息或者发送人邮箱缺点是往往这些软件需要注册费用二是通过专门的邮件列表服务提供网站实现这些网站通过程序帮助邮件列表发行者将信息发送给订阅者这是个人用户使用最多的一种方式这种方式的优点是简单免费缺点是往往这些服务提供网站性能不是很稳定邮件延迟情况时常发生三是通过自己的网站设计一个邮件列表程序自己管理这样的优点是发送信息高效管理方便缺点是技术实现稍微优点困难不是很适合一般用户我们在这里就介绍通过ASPNET编程实现一个功能完备的邮件列表
二邮件列表的设计在设计之前我们必须知道一点邮件列表的所有电子邮件地址必须保存成为一个文件这里我们将所有电子邮件地址保存在Access数据库中这样可以很方便的对邮件地址进行增加修改删除等操作在这里我们的数据库名为mailmdb位于data目录下数据表名为mail只有一个字段mail用于保存电子邮件地址
作为一个长期的网站功能我们当然要求没发送以此邮件都必须有详细的发送记录和每个邮件的发送情况这里我们在程序中会自动在log目录使用发送邮件的主题为文件名生产一个HTML格式的Log日志文件
现在我们已经基本了解了程序的功能和文件结构我们来看程序代码<%@ Page Language=VB Debug=True Explicit=True%> <%@ Import Namespace=SystemData %> <%@ Import Namespace=SystemDataOleDb %> <%@ Import Namespace=SystemWebMail %> <%@ Import Namespace=SystemIO %>
<html>
<head> <meta httpequiv=ContentLanguage content=zhcn> <meta httpequiv=ContentType content=text/html charset=gb> <title>邮件列表</title>
<style> <!——alink{color#FFtextdecorationnonefontsize pt} avisited{color#textdecorationnonefontsize pt} aactived{color#FFfontsize pt} ahover{color#FFfontsize pt} table{fontsize pt}——> </style>
</head>
<body>
<SCRIPT language=VB RUNAT=server> Sub SendMail(Obj As Object E As EventArgs)
lbmsgText=
Dim mailObj AS new MailMessage Dim smtp AS new SmtpMail 定义SMTP服务器的名称Smtpsmtpserver= 定义邮件的发送地址mailObjFrom=sendmailboxvalue 定义邮件的接收地址Dim conn AS OleDbConnection conn=connectdb(data\mailmdb)
connopen()
Dim reader As oledbdatareader reader=readdb(connselect * from mail)
while (readerread())
try mailObjTo=reader(mail)
mailObjSubject =subjectvalue mailObjBody =contentvalue 默认发送邮件格式为纯文本TEXT如果选择HTML格式设置为HTML格式if modevalue=HTML then mailObjBodyFormat=MailFormatHtml end if 设置邮件发送级别为高mailObjPriority = MailPriorityHigh
SmtpSend(mailObj)
lbmsgtext=lbmsgtext+reader(mail)+OK!Time+Now()ToString()+<br> catch er as Exception lbmsgtext=lbmsgtext+ssage+<br> finally
End Try End While readerclose()
Dim strwriterobj As StreamWriter try strwriterobj= FileCreateText(ServerMapPath(log\)+subjectvalue+)
strwriterobjWrite(<HTML><head><meta httpequiv=ContentLanguage content=zhcn><meta httpequiv=ContentType content=text/html charset=gb></head><BODY>+lbmsgtext+</BODY></HTML>)
catch er as Exception lbmsgtext=lbmsgtext+ssage+<br> finally strwriterobjclose lbmsgtext=lbmsgtext+日志保存成功!保存目录<br>+ServerMapPath(log\)+subjectvalue+ End Try
End Sub
链接数据库 Function ConnectDB(txtdatabase AS String) As Oledbconnection Dim conn AS OledbConnection Dim connstr As String connstr=Provider=MicrosoftJetOLEDB Persist Security Info=False Data Source= +ServerMapPath(txtdatabase)
connectdb=New OledbConnection(connstr)
End Function
读取一条记录Function readdb(conn As Oledbconnectiontxtsql As String) As OledbDataReader Dim cmd As OledbCommand cmd=new oledbcommand(txtsqlconn)
readdb=cmdexecutereader()
End Function </SCRIPT>
<p align=center><font size= face=楷体_GB>邮件列表</font></p> <hr width=% size=> <div align=center> <center> <table border= width=> <tr> <td width=%> <form method=POST runat=Server> <table border= width=% height=> <tr> <td width=% align=right height=> 发送邮箱 </td> <td width=% height=><input type=text name=sendmailbox id=sendmailbox size= runat=Server/></td> </tr> <tr> <td width=% align=right height=> 标题 </td> <td width=% height=><input type=text name=subject id=subject size= runat=Server/></td> </tr> <tr> <td width=% align=right height=>内容</td> <td width=% height=><textarea rows= name=content cols= id=content runat=Server/></textarea></td> </tr> <tr> <td width=% align=right height=>方式</td> <td width=% height=><select size= name=mode id=mode runat=Server> <option value=Text selected>Text</option> <option value=HTML>HTML</option> </select></td> </tr> </table> <p align=center><input type=button value= 提 交 name=ok onserverclick=sendmail runat=Server/></p> </form> <ASPLabel id=lbmsg runat=Server/> <p> </td> </tr> <tr> <td width=%></td> </tr> </table> </center> </div>
</body>
</html>
程序运行界面如下(图一)
在以上的程序中我们将一些比较常见的功能设置成为函数在主体程序中直接调用这些函数这样程序看起来比较简洁修改也很简单在这里我们简单介绍一下这些函数一是连接数据库的ConnectDB(txtdatabase AS String)这个函数使用Access数据库的相对位置作为函数参数返回数据库连接OleDbConnection函数readdb(conn As Oledbconnectiontxtsql As String)可以直接执行一条SQL语句返回OledbDataReader在程序中我们将每一个邮件发送的结果保存并且最好生成一个HTML格式的日志文件因为程序中我们用到了数据库电子邮件和文件操作以此在引入名字空间的时候我们需要将SystemDataOleDbSystemWebMail和SystemIO引入
在使用以上邮件列表程序的时候我们需要注意几个问题第一是Smtp服务器的设置我们知道Smtp服务器是邮件发送服务器而现在一些免费邮件提供商是不再提供针对所有邮件提供Smtp服务在发送邮件的时候需要验证用户信息而我们看到在以上的程序中甚至整个ASPNET的邮件部分根本没有考虑Smtp用户验证问题以此我们不能随便使用一个Smtp服务器而必须使用完全免费的Smtp服务器这样的服务器现在已经很少了所以如果有条件最好我们自己设置计算机为Smtp服务器怎样实现我们可以下载EasyMail等软件第二是邮件发送速度问题如果Smtp服务器在本地计算机发送速度很快的基本上不用担心如果不是本地服务器那么发送的时候最好不要以此太多一是速度问题二是以此发送太多邮件Smtp服务器可能认为是垃圾邮件而拒绝服务这一点我们可以自己试验第三是邮件发送发送人的设定问题通过这个程序或者说通过使用ASPNET的邮件功能我们完全可以在邮件发送人随意写这样很容易别有用心的人就可以通过这个功能来发送垃圾邮件当然这些邮件追查来源很简单直接查IP就可以随意我们最好不要随意发送
三总结以上我们用一个具体的实例介绍了完整邮件列表的设计该程序完全根据实际需要设计具有较大的实用性在程序实现中我们同时使用了数据库邮件和文件操作涉及内容较多有兴趣的朋友可以根据自己的实际要求适当修改使程序功能更加全面