用ASP建立郵件清單
最後更新:2017-02-28
來源:互聯網
上載者:User
說起發送Email,我們總是想起郵件用戶端軟體,比如Outlook Express、Foxmail(最新版3.0 beta1已於 4月30號發布,請到http://www.aerofox.com/下載)等。如果在Web上發送Email,大家肯定又會想起一些免費的電子郵箱,比如大名鼎鼎的www.163.net等,那麼如何?在Web上發送Email呢?大家可能會想到首先安裝郵件伺服器,比如Exchange,其實NT Server4.0加IIS4.0就可以了,本文就是想以執行個體來說明技術上的實現方法。
郵件清單(Maillist)在Internet上應用比較廣泛。使用郵件清單可以與訪問者保持積極的聯絡,快捷、簡便、低成本地發送資訊,也可以提高網站的知名度。擴充後的郵件清單也可以用於創立電子雜誌(像索易:http://www.soim.online.sh.cn/)。探討郵件清單的建立是非常有意義的,我們的執行個體就是建立一個郵件清單。
一、電子郵件發送原理
郵件傳遞過程的實現是從一個如Microsoft Outlook Express這樣的用戶端軟體將一份郵件發送給一個SMTP伺服器開始的,然後SMTP伺服器負責決定如何處置該郵件。
如果電子郵件的目的域是伺服器的本地區(比如將電子郵件發送給harrizon@domain.com,而且SMTP伺服器是smtp.domain.com),那麼該郵件被儲存在這個伺服器上,否則將該郵件轉寄給另一個合適的伺服器。
網路上所有的SMTP伺服器都可以通過一種“語言”互相通訊,這個通用語言就是SMTP協議。但是,伺服器如何決定傳遞郵件的目的地呢?可以通過它的網域名稱解析系統(DNS)來尋找域。
NT Server是目前使用比較廣泛的網路伺服器,而且前景看好,IIS(Internet Information Server4.0,Internet資訊服務器)是網路檔案和應用程式伺服器,它們使用HTTP、Gopher以及FTP,通過Internet或Intranet來提供服務。
IIS SMTP服務僅提供郵件傳遞功能,它不能對內送郵件提供服務。Microsoft在IIS中加入了一個特殊的組件—Collaboration Data Objects for Microsoft Windows NT Server,也稱為CDO for NTS Library,它提供郵件對象,可以在ASP(Active Server Pages)指令碼中使用這些對象來訪問和處理髮送給特定使用者的電子郵件。
郵件清單就是在網上收集訪問者的Email,從而在需要的時候定期向該訂閱者發送一定的資訊。需要的工作是收集Email、發送Email。下面我們可以看到如何來完成這些工作。
二、 從Web頁面寄送電子郵件
利用IIS SMTP和CDO for IIS,可以從一個ASP指令碼直接向Internet上的任何人寄送電子郵件。
首先要安裝Microsoft NT Ser-ver4.0,然後再安裝IIS4.0,務必注意是否安裝了SMTP服務,預設是安裝的。安裝完畢後不妨看看在winnt\system32目錄下是否有一個檔案cdonts.dll。如果存在這個檔案,那麼安裝過程宣告成功。
程式1是最簡單的寄送電子郵件程式,它將一封主題為subject、內容為test的郵件從郵箱harrizon@163.net發送到ivan@188.net。
<%
Dim MailObject
Set MailObject = Server.CreateObject("CDONTS.NewMail")
MailObject.Send "harrizon@163.net"," ivan@188.net", "subject", "test"
%>
這樣的程式雖然可以快速測試是否成功,但是實用價值並不高。我們將其最佳化一下,根據郵件清單的特點,編出一個有實用價值的程式。
首先請用Access建立一個資料庫mail.mdb,用於儲存email地址;然後需要建立一個表,表的名字為mail,包含一個欄位email(欄位名email,資料類型:文本,欄位長度:50)即可,另外可以有一個id(欄位名:id,資料類型:自動編號,本欄位可以不要)。設定ODBC ,在控制台中雙擊ODBC表徵圖,設立dsn,其名為mail。
至此設定部分已經完成,現在編寫程式。
將程式2加入到你的首頁的合適位置。程式2的目的是為了收集訪問者的Email。
<form method="POST" action="addmail.asp">
<p>您的Email:<input type="text" name="email" size="20"><input type="submit"
value="訂閱" name="B1"><input type="reset" value="重寫" name="B2"></p>
</form>
用瀏覽器開啟程式2得到結果如圖1,填入一個合法的email地址,單擊“訂閱”。伺服器自動調用程式3,輸入的email將自動入庫,你不妨用Access直接開啟資料庫mail.mdb看看剛剛入庫的Email是否儲存了。
(圖注ASP-1) 圖1
<%
email=trim(request("email"))
Set Connection=Server.Create-Object("ADODB.Connection")
Connection.Open "mail","",""
SQL="INSERT INTO mail(email) VALUES('"+email+"')"
Set RS=Connection.Execute(sql)
response.write email%>,多謝您加入!
程式3的目的是將email儲存到資料庫mail.mdb裡去。
Email入庫意味著有了訂閱者,現在我們可以進入下一個步驟—發送郵件給訂閱者了。
這裡我們用兩個程式(sendmail. asp,mail.asp)來完成這部分工作,sendmail.asp的作用是產生一個介面(見圖2),在這裡我們可以選擇發送的對象(全部或部分),填寫發送的主題和內容,也可以粘貼附件,填寫完畢後就單擊“發送郵件”,此時對於管理員來說,一切工作是結束了,但如何發送郵件呢?我們就需要調用程式5了。
程式5為發送郵件處置程式mail. asp。其作用就是發送郵件,當然是根據程式4的選擇和輸入來處理郵件的。程式5的完整原始碼參見《電子與電腦》的網站www.pccomputing.com.cn。
程式4為線上寄送電子郵件sendmail.asp。程式運行結果如圖2所示。
(圖注ASP-2) 圖2
(程式4)
<% Set Connection=Server.CreateObject("ADODB.Connection")
Connection.Open "mail","",""
sql="select * from mail"
Set RS=Connection.Execute(sql)
sql1="select count(*) from mail"
Set RS1=Connection.Execute(sql1)
%>
<form method="POST" action="mail.asp">
<table border="1" width="100%">
<tr bgColor="#abcdef">
<td align="middle">適占耍喝*<%=rs1(0)%>位訂閱者<inputtype=
"checkbox" name="all" value="1" checked><hr><%do while not
rs.eof%>
<font size="3">
<input type="checkbox" name="shou" value="<%=rs(0)%>">
<%=RS(1)%>
<%
rs.movenext
loop
%> </td> </tr>
<tr bgColor="#eeddff">
<td width="7%">
郵件主題:<input type="text" name="subject" size="53"><br>
郵件內容:<br>
<textarea rows="9" name="body" cols="59"></textarea><br>
您的mail:<input type="text" name="usemail" size="50" value="harrizon@21cn.com">
<br>附件:<input type="file" maxlength="50" name="attfile" size="20" value="">附件名稱:<input type="text" name="fname" size="10" value=""><br></p>
<input type="submit" value="發送郵件" name="B1"><input type="reset" value="重寫" name="B2"></p> </td>
</tr>
</table>
</form>
(程式5)
<% SHOU=trim(request("SHOU")) '取得在程式四選擇和輸入的內容
subject=trim(request("subject"))
body=trim(request("body"))
att_file=trim(request("attfile"))
fname=trim(request("fname"))
usemail=trim(request("usemail"))
ckall=request("all")
if ckall=1 then '是否是給所有訂閱者發送郵件
Set Conn2=Server.CreateObject("ADODB.Connection")
conn2.open "MAIL","","" '開啟資料庫
sql2="select * from mail"
Set RS2=Conn2.Execute(SQL2) '從資料庫讀出所有的郵件地址
do while not rs2.eof
item=rs2(0)
Set Conn=Server.CreateObject("ADODB.Connection")
conn.open "MAIL","",""
sql="select * from mail where id="+cstr(item)+""
Set RS=Conn.Execute(SQL)
Set MailObject = Server.CreateObject("CDONTS.NewMail")
if att_file="" then '附件為空白
MailObject.Send usemail,rs(1),subject,body
response.write "無附件web郵件發送成功!"
%><hr><%else
f_name=fname
MailObject.From=gzer@163.net '發件郵址
MailObject.To=rs(1) '收件者
MailObject.Subject=subject
MailObject.Body=body
MailObject.AttachFile att_file,f_name
MailObject.Send '發送郵件
response.write "含附件web郵件發送成功!" '發送成功
end if
response.write "收信地址:"+rs(1)+"<p>"
response.write "主題:"+ subject +"<br>"
response.write "內容:"+ body +"<br>"
%><hr><% rs2.movenext
loop
else
for each item in request("shou")
Set Conn=Server.CreateObject("ADODB.Connection")
conn.open "MAIL","",""
sql="select * from mail where id="+cstr(item)+""
Set RS=Conn.Execute(SQL)
Set MailObject = Server.CreateObject("CDONTS.NewMail")
if att_file="" then
MailObject.Send usemail,rs(1),subject,body
response.write "無附件web郵件發送成功!"
%><hr><%else '
f_name=fname
MailObject.From="gzer@163.net" '發件郵址
response.write rs(1) +"<br>"
MailObject.To=rs(1) '收件者
MailObject.Subject=subject
MailObject.Body=body
MailObject.AttachFile att_file,f_name
MailObject.Send
response.write "含附件web郵件發送成功!"
end if
%><hr><% next '下一封郵件
end if
%>
三、 後記
1. 由於篇幅的原因,這裡省去了一些代碼,請讀者理解。
2. 如果發送郵件時加一個接收電子郵件地址的輸入欄,那麼你可以給任何一個合法的地址寄送電子郵件,應用也就更為廣泛了。
3. 使用本程式可以發送匿名郵件,但注意請勿亂用!
4. 若是使用POP3組件,就可以內送郵件了。
5. 本程式的附件發送不支援中文路徑,有心者不妨編寫更好的組件來支援中文路徑。