使用控件有: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.   

    到http://www.planet-source-code.com的VB版搜索EMAIL,你会找到相当多的例子,有些例子还是相当好的。
      

  2.   

    Private Function SendMail() As Boolean
    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
      

  3.   

    Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)    Dim strServerResponse   As String
        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