自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

ASP.NET郵件列表設(shè)計(jì)及實(shí)現(xiàn)淺析

開發(fā) 后端
本文主要用一個(gè)具體的實(shí)例介紹了ASP.NET郵件列表作用和工作方式 、郵件列表的設(shè)計(jì)兩大特性。

一個(gè)吸引人的、功能完備的網(wǎng)站往往具有以下特征:一是內(nèi)容充實(shí)、實(shí)用,吸引對(duì)該類內(nèi)容干興趣的瀏覽者;二是頁(yè)面設(shè)置合理,頁(yè)面設(shè)計(jì)精美;三是網(wǎng)站互動(dòng)性強(qiáng),用戶和網(wǎng)站或者用戶與用戶之間交流方便高效;四是網(wǎng)站內(nèi)容更新及時(shí)并且可以第一時(shí)間通知用戶。以上這些特點(diǎn)可能對(duì)于一些大型的門戶網(wǎng)站而言,不是特別適合,因?yàn)殚T戶網(wǎng)站的特點(diǎn),用戶流量往往不是內(nèi)容的區(qū)別而是用戶習(xí)慣、歷史原因和地域區(qū)別(比如廣東地區(qū)的瀏覽者喜歡網(wǎng)易、北京的喜歡新浪)。而對(duì)于一般個(gè)人網(wǎng)站或者企業(yè)網(wǎng)站而言,以上特點(diǎn)就顯得特別重要,因?yàn)檫@類網(wǎng)站內(nèi)容更新不是很快,瀏覽者來(lái)這些網(wǎng)站往往具有特定目的性(比如尋找特定領(lǐng)域的資料或者產(chǎn)品信息),當(dāng)網(wǎng)站內(nèi)容吸引到用戶以后,網(wǎng)站的更新信息或者網(wǎng)站最新新聞就有必要及時(shí)通知瀏覽者,以此來(lái)緊緊抓住瀏覽者,培養(yǎng)瀏覽者的“瀏覽忠誠(chéng)度”。這就是網(wǎng)站郵件列表的作用。

一、ASP.NET郵件列表作用和工作方式

郵件列表是什么呢?郵件列表就是網(wǎng)站或者機(jī)構(gòu)為了及時(shí)通知信息給相關(guān)用戶,將這些用戶的電子郵件保存并且在有信息需要發(fā)送的時(shí)候?qū)⑿畔⒎謩e發(fā)送給所有用戶。表面上,郵件列表和發(fā)送電子郵件的時(shí)候使用的“附送”“密送”差不多,基本沒(méi)什么差別,其實(shí),它們還是有差別的:

(1)郵件列表具有明確的發(fā)行目的,發(fā)送郵件列表就是為了發(fā)送特定信息給特定用戶;

(2)郵件列表接受人不能取得其他接受人的資料,這一點(diǎn)是郵件列表和電子郵件附送的最大區(qū)別。

我們知道,當(dāng)我們收到一些電子郵件的時(shí)候,發(fā)現(xiàn)在郵件的“附送”欄有很多其他用戶的郵件地址,這就是通過(guò)“附送”方式將郵件發(fā)送給一系列用戶;而通過(guò)郵件列表發(fā)送的郵件,用戶感覺(jué)就是發(fā)送人單獨(dú)發(fā)送給用戶的,不能看見(jiàn)其他用戶的信息,當(dāng)然,實(shí)質(zhì)也是這樣發(fā)送的。這樣,我們就可以知道郵件列表的工作方式其實(shí)是將每個(gè)用戶的電子郵件取出,然后逐個(gè)發(fā)送相同的信息。

郵件列表既然是單獨(dú)逐個(gè)發(fā)送信息,那么,肯定我們不能通過(guò)手工一個(gè)個(gè)發(fā)送,只能通過(guò)軟件來(lái)發(fā)送?,F(xiàn)在,郵件列表的發(fā)送以下幾種方式,一是通過(guò)專門的郵件群發(fā)軟件來(lái)實(shí)現(xiàn),這些軟件將所有電子郵件地址讀入,然后逐個(gè)發(fā)送,這些軟件的優(yōu)點(diǎn)是可以針對(duì)具體用戶改變郵件主題信息或者發(fā)送人郵箱;缺點(diǎn)是往往這些軟件需要注冊(cè)費(fèi)用;二是通過(guò)專門的郵件列表服務(wù)提供網(wǎng)站實(shí)現(xiàn),這些網(wǎng)站通過(guò)程序幫助郵件列表發(fā)行者將信息發(fā)送給訂閱者,這是個(gè)人用戶使用最多的一種方式,這種方式的優(yōu)點(diǎn)是簡(jiǎn)單、免費(fèi),缺點(diǎn)是往往這些服務(wù)提供網(wǎng)站性能不是很穩(wěn)定,郵件延遲情況時(shí)常發(fā)生;三是通過(guò)自己的網(wǎng)站設(shè)計(jì)一個(gè)郵件列表程序,自己管理,這樣的優(yōu)點(diǎn)是發(fā)送信息高效、管理方便,缺點(diǎn)是技術(shù)實(shí)現(xiàn)稍微優(yōu)點(diǎn)困難,不是很適合一般用戶。我們?cè)谶@里就介紹通過(guò)ASP.NET編程實(shí)現(xiàn)一個(gè)功能完備的郵件列表。

二、ASP.NET郵件列表的設(shè)計(jì)

在設(shè)計(jì)之前我們必須知道一點(diǎn),郵件列表的所有電子郵件地址必須保存成為一個(gè)文件,這里,我們將所有電子郵件地址保存在Access數(shù)據(jù)庫(kù)中,這樣可以很方便的對(duì)郵件地址進(jìn)行增加、修改、刪除等操作。在這里,我們的數(shù)據(jù)庫(kù)名為mail.mdb,位于data目錄下。數(shù)據(jù)表名為mail,只有一個(gè)字段“mail”,用于保存電子郵件地址。

作為一個(gè)長(zhǎng)期的網(wǎng)站功能,我們當(dāng)然要求沒(méi)發(fā)送以此郵件都必須有詳細(xì)的發(fā)送記錄和每個(gè)郵件的發(fā)送情況。這里,我們?cè)诔绦蛑袝?huì)自動(dòng)在log目錄使用發(fā)送郵件的主題為文件名生產(chǎn)一個(gè)HTML格式的Log日志文件。
現(xiàn)在,我們已經(jīng)基本了解了程序的功能和文件結(jié)構(gòu),我們來(lái)看程序代碼:

 

  1. 〈 %@ Page Language="VB" Debug="True"   
  2. Explicit="True"% 〉   
  3. 〈 %@ Import Namespace="System.Data" % 〉   
  4. 〈 %@ Import Namespace="System.Data.OleDb" % 〉   
  5. 〈 %@ Import Namespace="System.Web.Mail" % 〉   
  6. 〈 %@ Import Namespace="System.IO" % 〉   
  7.  
  8. 〈 html 〉   
  9. 〈 head 〉   
  10. 〈 meta http-equiv="Content-Language"   
  11. content="zh-cn" 〉   
  12. 〈 meta http-equiv="Content-Type"   
  13. content="text/html; charset=gb2312" 〉   
  14. 〈 title 〉郵件列表〈 /title 〉   
  15.  
  16. 〈 style 〉   
  17. 〈 !--   
  18. a:link{color:#0066FF;text-decoration:none;  
  19. font-size:"9 pt"}   
  20. a:visited{color:#000066;text-decoration:none;  
  21. font-size:"9 pt"}   
  22. a:actived{color:#FF0000;font-size:"9 pt"}   
  23. a:hover{color:#FF0000;font-size:"9 pt"}   
  24. table{font-size:"11 pt"}   
  25. -- 〉   
  26. 〈 /style 〉   
  27. 〈 /head 〉   
  28. 〈 body 〉   
  29. 〈 SCRIPT language=VB RUNAT="server" 〉   
  30. Sub SendMail(Obj As Object, E As EventArgs)   
  31. lbmsg.Text=""   
  32.  
  33. Dim mailObj AS new MailMessage   
  34. Dim smtp AS new SmtpMail   
  35. '定義SMTP服務(wù)器的名稱   
  36. Smtp.smtpserver="127.0.0.1"   
  37. '定義郵件的發(fā)送地址   
  38. mailObj.From=sendmailbox.value   
  39. '定義郵件的接收地址   
  40. Dim conn AS OleDbConnection   
  41. conn=connectdb("data\mail.mdb")   
  42. conn.open()   
  43. Dim reader As oledbdatareader   
  44. reader=readdb(conn,"select * from mail")   
  45.  
  46. while (reader.read())   
  47. try   
  48. mailObj.To=reader("mail")   
  49.  
  50. mailObj.Subject =subject.value   
  51. mailObj.Body =content.value   
  52. '默認(rèn)發(fā)送郵件格式為純文本TEXT,  
  53. 如果選擇HTML格式,設(shè)置為HTML格式   
  54. if mode.value="HTML" then   
  55. mailObj.BodyFormat=MailFormat.Html   
  56. end if   
  57. '設(shè)置郵件發(fā)送級(jí)別為高   
  58. mailObj.Priority = MailPriority.High   
  59.  
  60. Smtp.Send(mailObj)   
  61.  
  62. lbmsg.text=lbmsg.text+reader("mail")  
  63. +"OK!Time:"+Now().ToString()+"〈 br 〉"   
  64. catch er as Exception   
  65. lbmsg.text=lbmsg.text+er.message+"〈 br 〉"   
  66. finally   
  67. End Try   
  68. End While   
  69. reader.close()   
  70. Dim strwriterobj As StreamWriter   
  71. try   
  72. strwriterobj= File.CreateText  
  73. (Server.MapPath("log\")+subject.value+".htm")   
  74. strwriterobj.Write("〈 HTML 〉〈 head 〉  
  75. 〈 meta http-equiv='Content-Language'   
  76. content='zh-cn' 〉  
  77. 〈 meta http-equiv='Content-Type'   
  78. content='text/html; charset=gb2312' 〉  
  79. 〈 /head 〉〈 BODY 〉"+lbmsg.text+" 
  80. 〈 /BODY 〉〈 /HTML 〉")   
  81. catch er as Exception   
  82. lbmsg.text=lbmsg.text+er.message+"〈 br 〉"   
  83. finally   
  84. strwriterobj.close   
  85. lbmsg.text=lbmsg.text+"日志保存成功!保存目錄:  
  86. 〈 br 〉"+Server.MapPath("log\")+subject.value+".htm"   
  87. End Try   
  88. End Sub   
  89.  
  90. '鏈接數(shù)據(jù)庫(kù)   
  91. 'www.knowsky.com   
  92. Function ConnectDB(txtdatabase AS String)   
  93. As Oledbconnection   
  94. Dim conn AS OledbConnection   
  95. Dim connstr As String   
  96. connstr="Provider=Microsoft.Jet.OLEDB.4.0;   
  97. Persist Security Info=False; Data Source="   
  98. +Server.MapPath(txtdatabase)   
  99. connectdb=New OledbConnection(connstr)   
  100. End Function   
  101.  
  102. '讀取一條記錄   
  103. Function readdb(conn As Oledbconnection,  
  104. txtsql As String) As OledbDataReader   
  105. Dim cmd As OledbCommand   
  106. cmd=new oledbcommand(txtsql,conn)   
  107. readdb=cmd.executereader()   
  108. End Function   
  109. 〈 /SCRIPT 〉   
  110.  
  111. 〈 p align="center" 〉〈 font size="5"   
  112. face="楷體_GB2312" 〉郵件列表〈 /font 〉〈 /p 〉   
  113. 〈 hr width="60%" size="1" 〉   
  114. 〈 div align="center" 〉   
  115. 〈 center 〉   
  116. 〈 table border="0" width="770" 〉   
  117. 〈 tr 〉   
  118. 〈 td width="100%" 〉   
  119. 〈 form method="POST" runat="Server" 〉   
  120. 〈 table border="0" width="100%" height="125" 〉   
  121. 〈 tr 〉   
  122. 〈 td width="15%" align="right" height="24" 〉   
  123. 發(fā)送郵箱: 〈 /td 〉   
  124. 〈 td width="85%" height="24" 〉〈 input type="text"   
  125. name="sendmailbox" id="sendmailbox"   
  126. size="50" runat="Server"/ 〉〈 /td 〉   
  127. 〈 /tr 〉   
  128. 〈 tr 〉   
  129. 〈 td width="15%" align="right" height="24" 〉   
  130. 標(biāo)題: 〈 /td 〉   
  131. 〈 td width="85%" height="24" 〉〈 input type="text"   
  132. name="subject" id="subject" size="50"   
  133. runat="Server"/ 〉〈 /td 〉   
  134. 〈 /tr 〉   
  135. 〈 tr 〉   
  136. 〈 td width="15%" align="right" height="60" 〉  
  137. 內(nèi)容:〈 /td 〉   
  138. 〈 td width="85%" height="60" 〉〈 textarea rows="6"   
  139. name="content" cols="80" id="content" runat="Server"/ 〉  
  140. 〈 /textarea 〉〈 /td 〉   
  141. 〈 /tr 〉   
  142. 〈 tr 〉   
  143. 〈 td width="15%" align="right" height="23" 〉方式:〈 /td 〉   
  144. 〈 td width="85%" height="23" 〉〈 select size="1"   
  145. name="mode" id="mode" runat="Server" 〉   
  146. 〈 option value="Text" selected 〉Text〈 /option 〉   
  147. 〈 option value="HTML" 〉HTML〈 /option 〉   
  148. 〈 /select 〉〈 /td 〉   
  149. 〈 /tr 〉   
  150. 〈 /table 〉   
  151. 〈 p align="center" 〉〈 input type="button"   
  152. value=" 提 交 " name="ok" onserverclick="sendmail"   
  153. runat="Server"/ 〉〈 /p 〉   
  154. 〈 /form 〉   
  155. 〈 ASP:Label id="lbmsg" runat="Server"/ 〉   
  156. 〈 p 〉   
  157. 〈 /td 〉   
  158. 〈 /tr 〉   
  159. 〈 tr 〉   
  160. 〈 td width="100%" 〉〈 /td 〉   
  161. 〈 /tr 〉   
  162. 〈 /table 〉   
  163. 〈 /center 〉   
  164. 〈 /div 〉   
  165. 〈 /body 〉   
  166. 〈 /html 〉 

程序運(yùn)行界面如下(圖一):

 

在以上的程序中,我們將一些比較常見(jiàn)的功能設(shè)置成為函數(shù),在主體程序中直接調(diào)用這些函數(shù),這樣,程序看起來(lái)比較簡(jiǎn)潔,修改也很簡(jiǎn)單。在這里,我們簡(jiǎn)單介紹一下這些函數(shù),一是連接數(shù)據(jù)庫(kù)的ConnectDB(txtdatabase AS String),這個(gè)函數(shù)使用Access數(shù)據(jù)庫(kù)的相對(duì)位置作為函數(shù)參數(shù),返回?cái)?shù)據(jù)庫(kù)連接OleDbConnection;函數(shù)readdb(conn As Oledbconnection,txtsql As String)可以直接執(zhí)行一條SQL語(yǔ)句,返回OledbDataReader。在程序中,我們將每一個(gè)郵件發(fā)送的結(jié)果保存并且最好生成一個(gè)HTML格式的日志文件。因?yàn)槌绦蛑形覀冇玫搅藬?shù)據(jù)庫(kù)、電子郵件和文件操作,以此,在引入名字空間的時(shí)候,我們需要將“System.Data.OleDb”、“System.Web.Mail”和“System.IO”引入。

在使用以上ASP.NET郵件列表程序的時(shí)候,我們需要注意幾個(gè)問(wèn)題,第一是Smtp服務(wù)器的設(shè)置,我們知道,Smtp服務(wù)器是郵件發(fā)送服務(wù)器,而現(xiàn)在一些免費(fèi)郵件提供商是不再提供針對(duì)所有郵件提供Smtp服務(wù),在發(fā)送郵件的時(shí)候,需要驗(yàn)證用戶信息,而我們看到,在以上的程序中甚至整個(gè)ASP.NET的郵件部分,根本沒(méi)有考慮Smtp用戶驗(yàn)證問(wèn)題,以此,我們不能隨便使用一個(gè)Smtp服務(wù)器,而必須使用完全免費(fèi)的Smtp服務(wù)器,這樣的服務(wù)器現(xiàn)在已經(jīng)很少了。所以,如果有條件,最好我們自己設(shè)置計(jì)算機(jī)為Smtp服務(wù)器,怎樣實(shí)現(xiàn),我們可以下載EasyMail等軟件。第二是郵件發(fā)送速度問(wèn)題,如果Smtp服務(wù)器在本地計(jì)算機(jī),發(fā)送速度很快的,基本上不用擔(dān)心,如果不是本地服務(wù)器,那么發(fā)送的時(shí)候最好不要以此太多,一是速度問(wèn)題,二是以此發(fā)送太多郵件,Smtp服務(wù)器可能認(rèn)為是垃圾郵件而拒絕服務(wù),這一點(diǎn)我們可以自己試驗(yàn);第三是郵件發(fā)送發(fā)送人的設(shè)定問(wèn)題,通過(guò)這個(gè)程序或者說(shuō)通過(guò)使用ASP.NET的郵件功能,我們完全可以在郵件發(fā)送人隨意寫,這樣,很容易別有用心的人就可以通過(guò)這個(gè)功能來(lái)發(fā)送垃圾郵件,當(dāng)然,這些郵件追查來(lái)源很簡(jiǎn)單,直接查IP就可以,隨意,我們最好不要隨意發(fā)送。

三、總結(jié)

以上我們用一個(gè)具體的實(shí)例介紹了完整ASP.NET郵件列表的設(shè)計(jì),該程序完全根據(jù)實(shí)際需要設(shè)計(jì),具有較大的實(shí)用性。在程序?qū)崿F(xiàn)中,我們同時(shí)使用了數(shù)據(jù)庫(kù)、郵件和文件操作,涉及內(nèi)容較多,有興趣的朋友可以根據(jù)自己的實(shí)際要求適當(dāng)修改,使程序功能更加全面。

【編輯推薦】

  1. ASP.NET Cache支持的三種類型
  2. ASP.NET多語(yǔ)言支持組件簡(jiǎn)介
  3. ASP.NET服務(wù)器控件編程淺析
  4. ASP.NET移動(dòng)開發(fā)入門基礎(chǔ)(1)
  5. ASP.NET SqlDataSource控件入門
責(zé)任編輯:冰荷 來(lái)源: yesky
相關(guān)推薦

2009-08-05 16:59:55

ASP.NET組件設(shè)計(jì)

2009-08-05 16:53:14

ASP.NET組件設(shè)計(jì)

2009-08-10 13:32:15

ASP.NET TimASP.NET組件設(shè)計(jì)

2009-08-07 17:49:44

控件設(shè)計(jì)器

2009-08-07 17:17:43

ASP.NET控件設(shè)計(jì)

2009-07-28 10:01:16

ASP.NET Exc

2009-07-24 13:41:15

ASP.NET AJA

2009-08-05 18:36:12

ASP.NET Che

2009-07-24 10:53:51

ASP.NET實(shí)現(xiàn)靜態(tài)

2009-08-07 16:32:52

ASP.NET控件設(shè)計(jì)時(shí)支

2009-08-07 17:59:35

控件設(shè)計(jì)器

2009-07-31 12:43:59

ASP.NET MVC

2009-08-05 15:50:13

ASP.NET優(yōu)點(diǎn)

2009-08-10 14:38:29

ASP.NET組件設(shè)計(jì)

2009-08-04 10:02:36

中國(guó)站長(zhǎng)站

2009-08-03 13:38:18

ASP.NET編程模型

2009-08-04 17:16:16

ASP.NET代碼優(yōu)化

2009-08-05 16:50:09

ASP.NET For

2009-07-24 18:02:46

ASP.NET編程

2009-07-27 15:34:11

MembershipASP.NET
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)