see
Valid Email Addresses
http://www.codeproject.com/useritems/Valid_Email_Addresses.asp

解决方案 »

  1.   

    我的代码发现如下问题,谁能帮我解释一下吗?
        Private Function Check_Response(ByVal s As Net.Sockets.Socket, ByVal response_expected As SMTPResponse) As Boolean
            Dim sResponse As String
            Dim response As Integer
            Dim bytes(1024) As Byte
            While (s.Available = 0)
                System.Threading.Thread.Sleep(100)
            End While
            s.Receive(bytes, 0, s.Available, Net.Sockets.SocketFlags.None)
            sResponse = System.Text.Encoding.ASCII.GetString(bytes)
            response = Convert.ToInt32(sResponse.Substring(0, 3))
            If (response <> CInt(response_expected)) Then
                Return False
            Else
                Return True
            End If
        End Function    Private Sub Senddata(ByVal s As Net.Sockets.Socket, ByVal msg As String)
            Dim _msg() As Byte = System.Text.Encoding.ASCII.GetBytes(msg)
            s.Send(_msg, 0, _msg.Length, Net.Sockets.SocketFlags.None)
        End Sub    Private Enum SMTPResponse : int
            CONNECT_SUCCESS = 220
            GENERIC_SUCCESS = 250
            DATA_SUCCESS = 354
            QUIT_SUCCESS = 221
        End Enum    Private Sub sendmail()
            Dim tosmtpserver As String = "[email protected]"        Dim host() As String = Split(tosmtpserver, "@")
            Dim hostname As String = host(1)
            Trace.Warn("hostname", hostname)        Dim iphst As New System.Net.IPHostEntry()
            Dim dns As System.Net.Dns
            iphst = dns.Resolve(hostname)
            Dim endpt As New System.Net.IPEndPoint(iphst.AddressList(0), 25)        Dim s As New System.Net.Sockets.Socket(endpt.AddressFamily, Net.Sockets.SocketType.Stream, Net.Sockets.ProtocolType.Tcp)
            s.Connect(endpt)
            If (Not Check_Response(s, SMTPResponse.CONNECT_SUCCESS)) Then
                s.Close()
                Label1.Text = "connect error1"
                Exit Sub
            End If        'HELO server
            Senddata(s, String.Format("HELO {0}\r\n", dns.GetHostName()))
            If (Not Check_Response(s, SMTPResponse.GENERIC_SUCCESS)) Then
                s.Close()
                Label1.Text = "connect error2"
                Exit Sub
            End If        'Identify yourself
            'Servers may resolve your domain and check whether you are listed in BlackLists etc.
            Senddata(s, String.Format("MAIL From: {0}\r\n", "[email protected]"))
            If (Not Check_Response(s, SMTPResponse.GENERIC_SUCCESS)) Then
                s.Close()
                Label1.Text = "connect error3"
                Exit Sub
            End If        'Attempt Delivery (I can use VRFY, but most SMTP servers only disable it for security reasons)
            Senddata(s, tosmtpserver)
            If (Not Check_Response(s, SMTPResponse.GENERIC_SUCCESS)) Then
                s.Close()
                Label1.Text = "connect error4"
                Exit Sub
            End If
     ......
        End Sub
    =================================
    这段代码在进行第2次测试连接的时候,即
            'HELO server
            Senddata(s, String.Format("HELO {0}\r\n", dns.GetHostName()))
            If (Not Check_Response(s, SMTPResponse.GENERIC_SUCCESS)) Then
                s.Close()
                Label1.Text = "connect error2"
                Exit Sub
            End If就会在
            While (s.Available = 0)
                System.Threading.Thread.Sleep(100)
            End While
    造成死循环,s.available始终是0,不知道是那里出了问题。请高手指教