用ASP.NET設計高效郵件列表
出處:動態網站製作指南 作者:動態網站製作指南 時間:2006-3-20 12:40:00
一個吸引人的、功能完備的網站往往具有以下特徵:一是內容充實、實用,吸引對該類內容幹興趣的瀏覽者;二是頁面設定合理,頁面設計精美;三是網站互動性強,使用者和網站或者使用者與使用者之間交流方便高效;四是網站內容更新及時並且可以第一時間通知使用者。以上這些特點可能對於一些大型的入口網站而言,不是特別適合,因為入口網站的特點,使用者流量往往不是內容的區別而是使用者習慣、歷史原因和地域區別(比如廣東地區的瀏覽者喜歡網易、北京的喜歡新浪)。而對於一般個人網站或者企業網站而言,以上特點就顯得特別重要,因為這類網站內容更新不是很快,瀏覽者來這些網站往往具有特定目的性(比如尋找特定領域的資料或者產品資訊),當網站內容吸引到使用者以後,網站的更新資訊或者網站最新新聞就有必要及時通知瀏覽者,以此來緊緊抓住瀏覽者,培養瀏覽者的“瀏覽忠誠度”。這就是網站郵件列表的作用。
一、郵件列表作用和工作方式
郵件列表是什麼呢?郵件列表就是網站或者機構為了及時通知資訊給相關使用者,將這些使用者的電子郵件儲存並且在有資訊需要傳送的時候將資訊分別傳送給所有使用者。表面上,郵件列表和傳送電子郵件的時候使用的“附送”“密送”差不多,基本沒什麼差別,其實,它們還是有差別的:
(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
'連結資料庫
'www.knowsky.com
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就可以,隨意,我們最好不要隨意傳送。
三、總結
以上我們用一個具體的例項介紹了完整郵件列表的設計,該程式完全根據實際需要設計,具有較大的實用性。在程式實現中,我們同時使用了資料庫、郵件和檔案操作,涉及內容較多,有興趣的朋友可以根據自己的實際要求適當修改,使程式功能更加全面。
相關文章
- .net 獲取郵箱郵件列表和內容
- 郵件營銷用純文字郵件還是html郵件HTML
- ASP.NET之郵件傳送ASP.NET
- 可怕的ASP.NET郵件元件ASP.NET元件
- asp.net傳送郵件程式ASP.NET
- 如何訂閱jakarta的郵件列表?
- .Net Core應用搭建的分散式郵件系統設計分散式
- 用Oracle發郵件Oracle
- eMarketer:對於郵件營銷人員,郵件列表細分是最重要的事情
- ASP.net傳送郵件的例項ASP.NET
- 歡迎加入【億能測試快訊】郵件列表!
- asp.net 郵件傳送提醒功能(接收方包括QQ郵箱等)ASP.NET
- asp.net定時傳送郵件總結ASP.NET
- 程式設計師常收到的四種郵件程式設計師
- win10郵件怎麼用qq郵箱 win10郵件如何使用qq郵箱Win10
- Java網路程式設計:QQ郵件傳送客戶端程式設計Java程式設計客戶端
- ASP.NET:郵件伺服器與客戶端ASP.NET伺服器客戶端
- 用 Android Intent 發郵件AndroidIntent
- 電子營銷郵件設計工具;Direct Mail for MacAIMac
- kettle 郵件傳送設定
- 自制Pop3郵件接收系統(二):利用TcpClient得到Pop3的郵件列表資料 (轉)TCPclient
- win10系統中自帶郵件如何設定接收網易郵箱郵件Win10
- iOS12系統應用傳送普通郵件構建郵件iOS
- 郵件開發:接收解析郵件
- 【陳晨】ASP.NET 2.0中傳送電子郵件ASP.NET
- ASP.NET自動傳送郵件功能的實現ASP.NET
- 在ASP.NET中使用SMTPMail傳送郵件的方法ASP.NETAI
- 用oracle傳送電子郵件Oracle
- 用Perl實現郵件傳送
- 用ASP發電子郵件 (轉)
- 用Oracle傳送郵件procedure (zt)Oracle
- 在VC中呼叫預設的電子郵件程式傳送郵件 (轉)
- 反垃圾郵件和資訊審計
- Android開發呼叫第三方郵件應用傳送郵件Android
- ASP.NET 2.0中傳送電子郵件剖析之一ASP.NET
- ASP.NET 2.0傳送電子郵件全面剖析之二ASP.NET
- 學習營銷郵件的設計技巧,掌握7大技巧
- 蘋果郵件蘋果