使用控件有:Winsock控件,CommandButton 控件,TextBox 控件
编程步骤如下:
1.声明变量
2.把如下代码加到Command1的Command1_Click事件:
Private Sub Command1_Click()
Winsock1.LocalPort = 0 '设置本地使用的端口
Winsock1.Protocol = sckTCPProtocol '设置Winsock控件使用的协议,TCP或UDP。
Winsock1.RemoteHost="smtp.21cn.com" '设置发送Email的服务器
Winsock1.RemotePort = 25 '设置要连接的远程端口号
Winsock1.Connect '返回与远程计算机的连接。
End Sub
这里要注意的是:Winsock1.RemotePort的值,80为HTTP,21为FTP,25为SMTP。3.把如下代码加到Winsock1的Connect事件:
Private Sub Winsock1_Connect() ''当一个 Connect 操作完成时发生
first = "mail from:" + Chr(32) + "[email protected]" + vbCrLf '发信人地址
Second = "rcpt to:" + Chr(32) + "[email protected]" + vbCrLf '收信人地址
DateNow = Format(Date, "Ddd") & ", " & Format(Date, "dd Mmm YYYY") & " " & Format(Time, "hh:mm:ss") & "" & " -0600"
Third = "Date:" + Chr(32) + DateNow + vbCrLf '开始发信时间
Fourth = "From:" + Chr(32) + "天龙在线" + vbCrLf '发信人姓名
Fifth = "To:" + Chr(32) + "Jimven"+ vbCrLf '收信人姓名
Sixth = "Subject:" + Chr(32) +"天龙在线更新通知" + vbCrLf '发信的主题
Seventh = "VB 小园已经更新" + vbCrLf '发信的内容
Ninth = "X-Mailer: EBT Reporter v 2.x" + vbCrLf
Eighth = Fourth + Third + Ninth + Fifth + Sixth
Winsock1.SendData ("HELO www.21cn.com" + vbCrLf) '开始发送
Winsock1.SendData (first)
Winsock1.SendData (Second)
Winsock1.SendData ("data" + vbCrLf)
Winsock1.SendData (Eighth + vbCrLf)
Winsock1.SendData (Seventh + vbCrLf)
Winsock1.SendData ("." + vbCrLf)
Winsock1.SendData ("quit" + vbCrLf)
End Sub4.把如下代码加到Winsock1的DataAmival事件:
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) '接受数据时产生
On Error Resume Next '在错误处理程序结束后,恢复原有的运行
Dim webData As String
Winsock1.GetData webData, vbString '取得发信后的反馈信息,可以检查是否错误
Text1.Text = Text1.Text + webData
'Debug.Print Text1.Text
End Sub
编程步骤如下:
1.声明变量
2.把如下代码加到Command1的Command1_Click事件:
Private Sub Command1_Click()
Winsock1.LocalPort = 0 '设置本地使用的端口
Winsock1.Protocol = sckTCPProtocol '设置Winsock控件使用的协议,TCP或UDP。
Winsock1.RemoteHost="smtp.21cn.com" '设置发送Email的服务器
Winsock1.RemotePort = 25 '设置要连接的远程端口号
Winsock1.Connect '返回与远程计算机的连接。
End Sub
这里要注意的是:Winsock1.RemotePort的值,80为HTTP,21为FTP,25为SMTP。3.把如下代码加到Winsock1的Connect事件:
Private Sub Winsock1_Connect() ''当一个 Connect 操作完成时发生
first = "mail from:" + Chr(32) + "[email protected]" + vbCrLf '发信人地址
Second = "rcpt to:" + Chr(32) + "[email protected]" + vbCrLf '收信人地址
DateNow = Format(Date, "Ddd") & ", " & Format(Date, "dd Mmm YYYY") & " " & Format(Time, "hh:mm:ss") & "" & " -0600"
Third = "Date:" + Chr(32) + DateNow + vbCrLf '开始发信时间
Fourth = "From:" + Chr(32) + "天龙在线" + vbCrLf '发信人姓名
Fifth = "To:" + Chr(32) + "Jimven"+ vbCrLf '收信人姓名
Sixth = "Subject:" + Chr(32) +"天龙在线更新通知" + vbCrLf '发信的主题
Seventh = "VB 小园已经更新" + vbCrLf '发信的内容
Ninth = "X-Mailer: EBT Reporter v 2.x" + vbCrLf
Eighth = Fourth + Third + Ninth + Fifth + Sixth
Winsock1.SendData ("HELO www.21cn.com" + vbCrLf) '开始发送
Winsock1.SendData (first)
Winsock1.SendData (Second)
Winsock1.SendData ("data" + vbCrLf)
Winsock1.SendData (Eighth + vbCrLf)
Winsock1.SendData (Seventh + vbCrLf)
Winsock1.SendData ("." + vbCrLf)
Winsock1.SendData ("quit" + vbCrLf)
End Sub4.把如下代码加到Winsock1的DataAmival事件:
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) '接受数据时产生
On Error Resume Next '在错误处理程序结束后,恢复原有的运行
Dim webData As String
Winsock1.GetData webData, vbString '取得发信后的反馈信息,可以检查是否错误
Text1.Text = Text1.Text + webData
'Debug.Print Text1.Text
End Sub
Dim strhtml As String
Dim strserver As StringOn Error GoTo Err_Handle
SendMail = False
Winsock1.Close
Winsock1.LocalPort = 0
strserver = "smtp.neusoft.com" 'smtp server
ColonPos = InStr(strserver, ":")
If ColonPos = 0 Then
Winsock1.Connect strserver, 25
Else
lngPort = CLng(Right$(strserver, Len(strserver) - ColonPos))
strserver = Left$(strserver, ColonPos - 1)
Winsock1.Connect strserver, lngPort
End If
m_State = MAIL_CONNECT
SendMail = True
Exit Function
Err_Handle:
End Function
Dim strResponseCode As String
Dim strDataToSend As String '
strMailfrom = ""
struser = ""
strpwd = ""
straddress = ""
strSubject = ""
strtoname = ""
Const RandString As String = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_"
Dim Globalstr As String
For jd = 1 To 24
uniquey = Int(Rnd * Len(RandString)) + 1
Globalstr = Globalstr + Mid(RandString, uniquey, 1)
Next jd
'temp
'strime = "text/plain" + vbCrLf ' E-mail message body
'MULTI-PART Edit
strime = "------=_NextPart_" + Globalstr + vbCrLf + "Content-type: text/HTML; charset=x-sjis" + vbCrLf + vbCrLf + MailBody + vbCrLf + vbCrLf
strime = strime + "------=_NextPart_" + Globalstr + "--" + vbCrLf
strime1 = "Subject:" + Chr(32) + strSubject + vbCrLf ' Subject of E-Mail
strime1 = strime1 + "MIME-Version: 1.0" + vbCrLf + "Content-Type: multipart/alternative; " + vbCrLf + Chr(9) + "boundary=""----=_NextPart_" + Globalstr + """" + vbCrLf + vbCrLf + "This mail is In MIME format. Your mail interface does Not appear To support this format." + vbCrLf + vbCrLf
strime2 = "X-Mailer:TSManager1.0" + vbCrLf ' What program sent the e-mail, customize this
strimeall = strime2 + strime1
Winsock1.GetData strServerResponse
strResponseCode = Left(strServerResponse, 3)
If strResponseCode = "250" Or _
strResponseCode = "220" Or _
strResponseCode = "354" Or _
strResponseCode = "334" Or _
strResponseCode = "235" Then
Select Case m_State
Case MAIL_CONNECT
m_State = MAIL_HELO
strDataToSend = Trim$(strMailfrom)
'strDataToSend = Left$(strDataToSend, _
InStr(1, strDataToSend, "@") - 1)
Winsock1.SendData "HELO " & strDataToSend & vbCrLf
Case MAIL_HELO
m_State = MAIL_USER
Winsock1.SendData "AUTH LOGIN" & vbCrLf Case MAIL_USER
m_State = MAIL_PASS
Winsock1.SendData (Base64_Encode(Trim(struser))) & vbCrLf
Case MAIL_PASS
m_State = mail_login
Winsock1.SendData (Base64_Encode(strpwd)) & vbCrLf
Case mail_login
m_State = MAIL_from
Winsock1.SendData "MAIL FROM:" & Trim$(strMailfrom) & vbCrLf
Case MAIL_from
m_State = MAIL_RCPTTO
Winsock1.SendData "RCPT TO:" & Trim$(straddress) & vbCrLf
Case MAIL_RCPTTO
m_State = MAIL_DATA
Winsock1.SendData "DATA" & vbCrLf
Case MAIL_DATA
m_State = MAIL_DOT
Winsock1.SendData "From:" & struser & " <" & strMailfrom & ">" & vbCrLf
Winsock1.SendData "To:" & strtoname & " <" & straddress & ">" & vbCrLf
Winsock1.SendData strimeall & vbCrLf
Winsock1.SendData strime & vbCrLf
Winsock1.SendData "." & vbCrLf
Case MAIL_DOT
m_State = MAIL_QUIT
Winsock1.SendData "QUIT" & vbCrLf
Case MAIL_QUIT
Winsock1.Close
End Select
Else
Winsock1.Close
End If
Debug.Print strServerResponse
End Sub