<SCRIPT language=VB RUNAT="server"> Sub SendMail(Obj As Object, E As EventArgs) lbmsg.Text=""
Dim mailObj AS new MailMessage Dim smtp AS new SmtpMail '定义SMTP服务器的名称 Smtp.smtpserver="127.0.0.1" '定义邮件的发送地址 mailObj.From=sendmailbox.value '定义邮件的接收地址 Dim conn AS OleDbConnection conn=connectdb("data/mail.mdb") conn.open() Dim reader As oledbdatareader reader=readdb(conn,"select * from mail")
while (reader.read()) try mailObj.To=reader("mail")
mailObj.Subject =subject.value mailObj.Body =content.value '默认发送邮件格式为纯文本TEXT,如果选择HTML格式,设置为HTML格式 if mode.value="HTML" then mailObj.BodyFormat=MailFormat.Html end if '设置邮件发送级别为高 mailObj.Priority = MailPriority.High
Smtp.Send(mailObj)
lbmsg.text=lbmsg.text+reader("mail")+"OK!Time:"+Now().ToString()+"<br>" catch er as Exception lbmsg.text=lbmsg.text+er.message+"<br>" finally
End Try End While reader.close() Dim strwriterobj As StreamWriter try strwriterobj= File.CreateText(Server.MapPath("log/")+subject.value+".htm") strwriterobj.Write("<HTML><head><meta http-equiv='Content-Language' content='zh-cn'><meta http-equiv='Content-Type' content='text/html; charset=gb2312'></head><BODY>"+lbmsg.text+"</BODY></HTML>") catch er as Exception lbmsg.text=lbmsg.text+er.message+"<br>" finally strwriterobj.close lbmsg.text=lbmsg.text+"日志保存成功!保存目录:<br>"+Server.MapPath("log/")+subject.value+".htm" End Try
End Sub
'链接数据库 Function ConnectDB(txtdatabase AS String) As Oledbconnection Dim conn AS OledbConnection Dim connstr As String connstr="Provider=Microsoft.Jet.OLEDB.4.0; Persist Security Info=False; Data Source=" +Server.MapPath(txtdatabase) connectdb=New OledbConnection(connstr) End Function
'读取一条记录 Function readdb(conn As Oledbconnection,txtsql As String) As OledbDataReader Dim cmd As OledbCommand cmd=new oledbcommand(txtsql,conn) readdb=cmd.executereader() End Function </SCRIPT>
在以上的程序中,我们将一些比较常见的功能设置成为函数,在主体程序中直接调用这些函数,这样,程序看起来比较简洁,修改也很简单。在这里,我们简单介绍一下这些函数,一是连接数据库的ConnectDB(txtdatabase AS String),这个函数使用Access数据库的相对位置作为函数参数,返回数据库连接OleDbConnection;函数readdb(conn As Oledbconnection,txtsql As String)可以直接执行一条SQL语句,返回OledbDataReader。在程序中,我们将每一个邮件发送的结果保存并且最好生成一个HTML格式的日志文件。因为程序中我们用到了数据库、电子邮件和文件操作,以此,在引入名字空间的时候,我们需要将“System.Data.OleDb”、“System.Web.Mail”和“System.IO”引入。 在使用以上邮件列表程序的时候,我们需要注意几个问题,第一是Smtp服务器的设置,我们知道,Smtp服务器是邮件发送服务器,而现在一些免费邮件提供商是不再提供针对所有邮件提供Smtp服务,在发送邮件的时候,需要验证用户信息,而我们看到,在以上的程序中甚至整个ASP.NET的邮件部分,根本没有考虑Smtp用户验证问题,以此,我们不能随便使用一个Smtp服务器,而必须使用完全免费的Smtp服务器,这样的服务器现在已经很少了。所以,如果有条件,最好我们自己设置计算机为Smtp服务器,怎样实现,我们可以下载EasyMail等软件。第二是邮件发送速度问题,如果Smtp服务器在本地计算机,发送速度很快的,基本上不用担心,如果不是本地服务器,那么发送的时候最好不要以此太多,一是速度问题,二是以此发送太多邮件,Smtp服务器可能认为是垃圾邮件而拒绝服务,这一点我们可以自己试验;第三是邮件发送发送人的设定问题,通过这个程序或者说通过使用ASP.NET的邮件功能,我们完全可以在邮件发送人随意写,这样,很容易别有用心的人就可以通过这个功能来发送垃圾邮件,当然,这些邮件追查来源很简单,直接查IP就可以,随意,我们最好不要随意发送。