在編寫網上應用程序時,經常碰到需要在線發送郵件的問題,郵件內容是由程序動態決定的,如果你采用的是ASP方式來編寫網上應用程序,如何簡單、快捷地實現這一功能呢? 筆者在實踐中利用ASP的com組件功能,在vb中實現了一個發郵件的小組件,在ASP中只通過輕松調用,就可以實現該功能。所有郵件處理機制都被封裝在這個組件中,使用起來極為方便。下面將詳細介紹該組件的基本開發原理以及在ASP中的應用。 1. 利用Winsock控件與發送郵件的smtp聯系 和smtp的聯系包括握手、發送數據以及關閉等全過程,主要程序如下: 建立一個frmsendmail 的窗體,其中包含一個winsock控件,有以下幾個公共變量: public mstmp as string //發送郵件的stmp public mfrom as string //from 地址 public mto as string //到達地址 public msubject as string //郵件主題 public mtext as string //郵件正文 sock.connect mstmp, 25 //和發送郵件的stmp建立聯系 private sub sock_connect() sflag = sfconn //連接成功后設置參數 end sub private sub sock_dataarrival(byval bytestotal as long) on error goto daerr dim s as string sock.getdata s select case sflag case sfstart case sfconn sflag = sfhelo //發出握手信息hello case sfhelo sflag = sffrom send "mail from:" && getreal(mfrom) case sffrom if left(s, 3) 〈〉 "250" then goto srverr //如果成功發送接收郵件地址 sflag = sfrcpt send "rcpt to:" && getreal(mto) case sfrcpt if left(s, 3) 〈〉 "250" then goto srverr //如果成功開始發送數據 sflag = sfdata send "data" case sfdata if left(s, 3) 〈〉 "354" then goto srverr sflag = sfsendover //數據包括4項,最后以 . 結束 send "from: " && mfrom send "to: " && mto send "subject: " && msubject && vbcrlf send mtext send "." case sfsendover if left(s, 3) 〈〉 "250" then goto srverr sflag = sfstart sendok = true send "quit" end select exit sub end sub 由于ASP能使用的組件中不能存在控件,所以要通過類模塊來封裝上述窗體。首先在類初始化時建立一窗體: private sub class_initialize() set frm = new frmsendmail end sub 把窗體的公共變量作為屬性封裝在類模塊中。 該窗體的函數接口為: public sub send() frm.sendstart end sub 3. 注冊該組件 將上述工程編譯成dll文件,通過vb注冊或手工注冊都可以。 4. 在ASP中的應用 調用方法如下: set smail=server.createobject("sendmailx.mail") smail.stmp="166.166.1.1" smail.logfile="e:\logs\mail.log" smail.mfrom = mfromname && " 〈" && mfromaddr && "〉" smail.mto = mtoname && " 〈" && mtoaddr && "〉" smail.msubject = msubject smail.mtext = mtext smail.send 其中變量可以通過賦值,也可以來自上一個request頁面。 |
溫馨提示:喜歡本站的話,請收藏一下本站!