这是一个用winsock发送的列子,没有身份认证,不能发送附件,参考一下
Private Enum SMTP_State
    MAIL_CONNECT
    MAIL_HELO
    MAIL_FROM
    MAIL_RCPTTO
    MAIL_DATA
    MAIL_DOT
    MAIL_QUIT
End EnumPrivate m_State As SMTP_State
'Private Sub cmdClose_Click()    Unload Me
    
End SubPrivate Sub cmdNew_Click()    txtRecipient = ""
    txtSubject = ""
    txtMessage = ""
    
End SubPrivate Sub cmdSend_Click()    Winsock1.Connect Trim$(txtHost), 25
    m_State = MAIL_CONNECT
    
End SubPrivate Sub Form_Load()
    '
    'clear all textboxes
    '
    For Each ctl In Me.Controls
        If TypeOf ctl Is TextBox Then
            ctl.Text = ""
        End If
    Next
    '
End SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long)    Dim strServerResponse   As String
    Dim strResponseCode     As String
    Dim strDataToSend       As String
    '
    'Retrive data from winsock buffer
    '
    Winsock1.GetData strServerResponse
    '
    Debug.Print strServerResponse
    '
    'Get server response code (first three symbols)
    '
    strResponseCode = Left(strServerResponse, 3)
    '
    'Only these three codes tell us that previous
    'command accepted successfully and we can go on
    '
    If strResponseCode = "250" Or _
       strResponseCode = "220" Or _
       strResponseCode = "354" Then
       
        Select Case m_State
            Case MAIL_CONNECT
                'Change current state of the session
                m_State = MAIL_HELO
                '
                'Remove blank spaces
                strDataToSend = Trim$(txtSender)
                '
                'Retrieve mailbox name from e-mail address
                strDataToSend = Left$(strDataToSend, _
                                InStr(1, strDataToSend, "@") - 1)
                'Send HELO command to the server
                Winsock1.SendData "HELO " & strDataToSend & vbCrLf
                '
                Debug.Print "HELO " & strDataToSend
                '
            Case MAIL_HELO
                '
                'Change current state of the session
                m_State = MAIL_FROM
                '
                'Send MAIL FROM command to the server
                Winsock1.SendData "MAIL FROM:" & Trim$(txtSender) & vbCrLf
                '
                Debug.Print "MAIL FROM:" & Trim$(txtSender)
                '
            Case MAIL_FROM
                '
                'Change current state of the session
                m_State = MAIL_RCPTTO
                '
                'Send RCPT TO command to the server
                Winsock1.SendData "RCPT TO:" & Trim$(txtRecipient) & vbCrLf
                '
                Debug.Print "RCPT TO:" & Trim$(txtRecipient)
                '
            Case MAIL_RCPTTO
                '
                'Change current state of the session
                m_State = MAIL_DATA
                '
                'Send DATA command to the server
                Winsock1.SendData "DATA" & vbCrLf
                '
                Debug.Print "DATA"
                '
            Case MAIL_DATA
                '
                'Change current state of the session
                m_State = MAIL_DOT
                '
                'So now we are sending a message body
                'Each line of text must be completed with
                'linefeed symbol (Chr$(10) or vbLf) not with vbCrLf
                '
                'Send Subject line
                Winsock1.SendData "Subject:" & txtSubject & vbLf
                '
                Debug.Print "Subject:" & txtSubject
                '
                Dim varLines    As Variant
                Dim varLine     As Variant
                '
                'Parse message to get lines (for VB6 only)
                varLines = Split(txtMessage, vbCrLf)
                '
                'Send each line of the message
                For Each varLine In varLines
                    Winsock1.SendData CStr(varLine) & vbLf
                    '
                    Debug.Print CStr(varLine)
                Next
                '
                'Send a dot symbol to inform server
                'that sending of message comleted
                Winsock1.SendData "." & vbCrLf
                '
                Debug.Print "."
                '
            Case MAIL_DOT
                'Change current state of the session
                m_State = MAIL_QUIT
                '
                'Send QUIT command to the server
                Winsock1.SendData "QUIT" & vbCrLf
                '
                Debug.Print "QUIT"
            Case MAIL_QUIT
                '
                'Close connection
                Winsock1.Close
                '
        End Select
       
    Else
        '
        'If we are here server replied with
        'unacceptable respose code therefore we need
        'close connection and inform user about problem
        '
        Winsock1.Close
        '
        If Not m_State = MAIL_QUIT Then
            MsgBox "SMTP Error: " & strServerResponse, _
                    vbInformation, "SMTP Error"
        Else
            MsgBox "Message sent successfuly.", vbInformation
        End If
        '
    End If
    
End SubPrivate Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)    MsgBox "Winsock Error number " & Number & vbCrLf & _
            Description, vbExclamation, "Winsock Error"End Sub

解决方案 »

  1.   

    zqfleaf(啊风) ,谢谢你的回复,不过还是有些问题
    1.为什么返回OK之后,我还是没有收到邮件?
      DEBUG里面的返回信息确实是正确的,可就是没有收到邮件
    2.我希望能够发送附件
      

  2.   

    刚才看到一个人有个dll,可以实现你想要得功能
      

  3.   

    http://www.csdn.net/develop/Read_Article.asp?Id=14574应该合适你
      

  4.   

    分值加到200,我来回答
    其实用winsock谁都知道,关键是发送怎么样的数据呢?
    先来试一下手工发送和接受信件的方式  receive mail:
    telnet pop.xxx.com 110
    user myaccount
    pass mypassword
    list(显示邮箱信息)
    retr 1(显示第一封邮件的内容)
    de1e 1(删除第一封邮件,好像是)
    quit (退出)
      send mail:
    telnet smtp.xxx.com 25
    helo name
    mail from:[email protected]
    rept to:[email protected]
    data
    MIME-Version: 1.0(不能少)
    (此处必须空一行)
    内容
    .
    quit
    缺一不可,很多人在用winsock发送的时候因为没有邮件编码版本,所以发送错误,如果你要跟详细的源代码,我给你[email protected]写完接分