一個吸引人的功能完備的網站往往具有以下特征一是內容充實實用吸引對該類內容干興趣的浏覽者二是頁面設置合理頁面設計精美三是網站互動性強用戶和網站或者用戶與用戶之間交流方便高效四是網站內容更新及時並且可以第一時間通知用戶以上這些特點可能對於一些大型的門戶網站而言不是特別適合因為門戶網站的特點用戶流量往往不是內容的區別而是用戶習慣歷史原因和地域區別(比如廣東地區的浏覽者喜歡網易北京的喜歡新浪)而對於一般個人網站或者企業網站而言以上特點就顯得特別重要因為這類網站內容更新不是很快浏覽者來這些網站往往具有特定目的性(比如尋找特定領域的資料或者產品信息)當網站內容吸引到用戶以後網站的更新信息或者網站最新新聞就有必要及時通知浏覽者以此來緊緊抓住浏覽者培養浏覽者的浏覽忠誠度這就是網站郵件列表的作用
一郵件列表作用和工作方式
郵件列表是什麼呢?郵件列表就是網站或者機構為了及時通知信息給相關用戶將這些用戶的電子郵件保存並且在有信息需要發送的時候將信息分別發送給所有用戶表面上郵件列表和發送電子郵件的時候使用的附送密送差不多基本沒什麼差別其實它們還是有差別的()郵件列表具有明確的發行目的發送郵件列表就是為了發送特定信息給特定用戶()郵件列表接受人不能取得其他接受人的資料這一點是郵件列表和電子郵件附送的最大區別我們知道當我們收到一些電子郵件的時候發現在郵件的附送欄有很多其他用戶的郵件地址這就是通過附送方式將郵件發送給一系列用戶而通過郵件列表發送的郵件用戶感覺就是發送人單獨發送給用戶的不能看見其他用戶的信息當然實質也是這樣發送的這樣我們就可以知道郵件列表的工作方式其實是將每個用戶的電子郵件取出然後逐個發送相同的信息
郵件列表既然是單獨逐個發送信息那麼肯定我們不能通過手工一個個發送只能通過軟件來發送現在郵件列表的發送以下幾種方式一是通過專門的郵件群發軟件來實現這些軟件將所有電子郵件地址讀入然後逐個發送這些軟件的優點是可以針對具體用戶改變郵件主題信息或者發送人郵箱缺點是往往這些軟件需要注冊費用二是通過專門的郵件列表服務提供網站實現這些網站通過程序幫助郵件列表發行者將信息發送給訂閱者這是個人用戶使用最多的一種方式這種方式的優點是簡單免費缺點是往往這些服務提供網站性能不是很穩定郵件延遲情況時常發生三是通過自己的網站設計一個郵件列表程序自己管理這樣的優點是發送信息高效管理方便缺點是技術實現稍微優點困難不是很適合一般用戶我們在這裡就介紹通過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就可以隨意我們最好不要隨意發送
三總結
以上我們用一個具體的實例介紹了完整郵件列表的設計該程序完全根據實際需要設計具有較大的實用性在程序實現中我們同時使用了數據庫郵件和文件操作涉及內容較多有興趣的朋友可以根據自己的實際要求適當修改使程序功能更加全面
From:http://tw.wingwit.com/Article/program/net/201311/13558.html