<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就可以,隨意,我們最好不要隨意發送。