top
Loading...
實現ASP文件在線發郵件
在編寫網上應用程序時,筆者經常碰到需要在線發送郵件的問題,郵件內容是由程序動態決定的,如果你采用的是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

send "helo " && mmyname

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

2.將上述功能封裝在一個類中

由于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:ogsmail.log"

smail.mfrom = mfromname && "〈" && mfromaddr && "〉"

smail.mto = mtoname && "〈" && mtoaddr && "〉"

smail.msubject = msubject

smail.mtext = mtext

smail.send

其中變量可以通過賦值,也可以來自上一個request頁面。

北斗有巢氏 有巢氏北斗