筆者在實踐中利用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:/Logs/mail.log"
sMail.mFrom = mFromName && " 〈" && mFromAddr && "〉"
sMail.mTo = mToName && " 〈" && mToAddr && "〉"
sMail.mSubject = mSubject
sMail.mText = mText
sMail.Send
其中變數可以通過賦值,也可以來自上一個request頁面。
由於版面所限,不能詳細敘述,需要此組件的朋友可以到http://flyfly.533.net的軟體編程欄目上下載。