用ASP.NET設計高效郵件清單

來源:互聯網
上載者:User
asp.net|設計|郵件清單 一個迷人的、功能完備的網站往往具有以下特徵:一是內容充實、實用,吸引對該類內容幹興趣的瀏覽者;二是版面設定合理,頁面設計精美;三是網站互動性強,使用者和網站或者使用者與使用者之間交流方便高效;四是網站內容更新及時並且可以第一時間通知使用者。以上這些特點可能對於一些大型的門戶網站而言,不是特別適合,因為門戶網站的特點,使用者流量往往不是內容的區別而是使用者習慣、曆史原因和地區區別(比如廣東地區的瀏覽者喜歡網易、北京的喜歡新浪)。而對於一般個人網站或者企業網站而言,以上特點就顯得特別重要,因為這類網站內容更新不是很快,瀏覽者來這些網站往往具有特定目的性(比如尋找特定領域的資料或者產品資訊),當網站內容吸引到使用者以後,網站的更新資訊或者網站最新新聞就有必要及時通知瀏覽者,以此來緊緊抓住瀏覽者,培養瀏覽者的“瀏覽忠誠度”。這就是網站郵件清單的作用。

一、郵件清單作用和工作方式
郵件清單是什麼呢?郵件清單就是網站或者機構為了及時通知資訊給相關使用者,將這些使用者的電子郵件儲存並且在有資訊需要發送的時候將資訊分別發送給所有使用者。表面上,郵件清單和寄送電子郵件的時候使用的“附送”“密送”差不多,基本沒什麼差別,其實,它們還是有差別的:(1)郵件清單具有明確的發行目的,發送郵件清單就是為了發送特定資訊給特定使用者;(2)郵件清單接受人不能取得其他接受人的資料,這一點是郵件清單和電子郵件附送的最大區別。我們知道,當我們收到一些電子郵件的時候,發現在郵件的“附送”欄有很多其他使用者的郵件地址,這就是通過“附送”方式將郵件發送給一系列使用者;而通過郵件清單發送的郵件,使用者感覺就是發送人單獨發送給使用者的,不能看見其他使用者的資訊,當然,實質也是這樣發送的。這樣,我們就可以知道郵件清單的工作方式其實是將每個使用者的電子郵件取出,然後逐個發送相同的資訊。
郵件清單既然是單獨逐個發送資訊,那麼,肯定我們不能通過手工一個個發送,只能通過軟體來發送。現在,郵件清單的發送以下幾種方式,一是通過專門的郵件群發軟體來實現,這些軟體將所有電子郵件地址讀入,然後逐個發送,這些軟體的優點是可以針對具體使用者改變郵件主題資訊或者發送人郵箱;缺點是往往這些軟體需要註冊費用;二是通過專門的郵件清單服務提供網站實現,這些網站通過程式協助郵件清單發行者將資訊發送給訂閱者,這是個人使用者使用最多的一種方式,這種方式的優點是簡單、免費,缺點是往往這些服務提供網站效能不是很穩定,郵件延遲情況時常發生;三是通過自己的網站設計一個郵件清單程式,自己管理,這樣的優點是發送資訊高效、管理方便,缺點是技術實現稍微優點困難,不是很適合一般使用者。我們在這裡就介紹通過ASP.NET編程實現一個功能完備的郵件清單。

二、郵件清單的設計
在設計之前我們必須知道一點,郵件清單的所有電子郵件地址必須儲存成為一個檔案,這裡,我們將所有電子郵件地址儲存在Access資料庫中,這樣可以很方便的對郵件地址進行增加、修改、刪除等操作。在這裡,我們的資料庫名為mail.mdb,位於data目錄下。資料表名為mail,只有一個欄位“mail”,用於儲存電子郵件地址。
作為一個長期的網站功能,我們當然要求沒發送以此郵件都必須有詳細的發送記錄和每個郵件的發送情況。這裡,我們在程式中會自動在log目錄使用發送郵件的主題為檔案名稱生產一個HTML格式的Log記錄檔。
現在,我們已經基本瞭解了程式的功能和檔案結構,我們來看程式碼:
<%@ Page Language="VB" Debug="True" Explicit="True"%>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>
<%@ Import Namespace="System.Web.Mail" %>
<%@ Import Namespace="System.IO" %>

<html>

<head>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>郵件清單</title>

<style>
<!--
a:link{color:#0066FF;text-decoration:none;font-size:"9 pt"}  
a:visited{color:#000066;text-decoration:none;font-size:"9 pt"}  
a:actived{color:#FF0000;font-size:"9 pt"}
a:hover{color:#FF0000;font-size:"9 pt"}  
table{font-size:"11 pt"}
-->
</style>

</head>

<body>

<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>


<p align="center"><font size="5" face="楷體_GB2312">郵件清單</font></p>
<hr width="60%" size="1">
<div align="center">
<center>
<table border="0" width="770">
<tr>
<td width="100%">
<form method="POST" runat="Server">
<table border="0" width="100%" height="125">
<tr>
<td width="15%" align="right" height="24"> 發送郵箱: </td>
<td width="85%" height="24"><input type="text" name="sendmailbox" id="sendmailbox" size="50" runat="Server"/></td>
</tr>
<tr>
<td width="15%" align="right" height="24"> 標題: </td>
<td width="85%" height="24"><input type="text" name="subject" id="subject" size="50" runat="Server"/></td>
</tr>
<tr>
<td width="15%" align="right" height="60">內容:</td>
<td width="85%" height="60"><textarea rows="6" name="content" cols="80" id="content" runat="Server"/></textarea></td>
</tr>
<tr>
<td width="15%" align="right" height="23">方式:</td>
<td width="85%" height="23"><select size="1" 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>
<ASP:Label id="lbmsg" runat="Server"/>
<p> 
</td>
</tr>
<tr>
<td width="100%"></td>
</tr>
</table>
</center>
</div>

</body>

</html>
程式運行介面如下(圖一):


在以上的程式中,我們將一些比較常見的功能設定成為函數,在主體程式中直接調用這些函數,這樣,程式看起來比較簡潔,修改也很簡單。在這裡,我們簡單介紹一下這些函數,一是串連資料庫的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就可以,隨意,我們最好不要隨意發送。

三、總結
以上我們用一個具體的執行個體介紹了完整郵件清單的設計,該程式完全根據實際需要設計,具有較大的實用性。在程式實現中,我們同時使用了資料庫、郵件和檔案操作,涉及內容較多,有興趣的朋友可以根據自己的實際要求適當修改,使程式功能更加全面。



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.