Sono disperatissimo, non ci riesco a far ciò che voglio.

Ho un database Access con vari email dentro.
Dovrei recuperare tutte email e inviarle con WinSock

Questo è il codice che ho scritto:
codice:
Option Explicit
    Dim rs As ADODB.Recordset
    Dim curentMail As String
    Dim y As Integer
    Private WinsockState As WinsockControlState
    Dim strServerResponse   As String
    Dim strResponseCode     As String
    Dim strDataToSend       As String
    Private Enum WinsockControlState
        MAIL_CONNECT
        MAIL_HELO
        MAIL_FROM
        MAIL_RCPTTO
        MAIL_DATA
        MAIL_HEADER
        MAIL_DOT
        MAIL_QUIT
    End Enum

Private Sub Form_Load()
    WinSock.Protocol = sckTCPProtocol
    y = 0
    Set rs = New ADODB.Recordset
    rs.Open "SELECT Indirizzo FROM Email", "driver={Microsoft Access Driver (*.mdb)};dbq=C:\email.mdb", 1
    While rs.EOF = False
        y = y + 1
        WinSock.Connect Trim(txtEmailServer.Text), Val(Trim(txtEmailServerPort.Text))
        WinsockState = MAIL_CONNECT
        rs.MoveNext
        curentMail = LCase(rs("Indirizzo"))
        txtToEmailAddress.Text = "nome" & y & " <" & curentMail & ">"
    Wend
    rs.Close
End Sub

Private Sub WinSock_DataArrival(ByVal bytesTotal As Long)
    WinSock.GetData strServerResponse
    txtServerReplies.Text = txtServerReplies.Text & strServerResponse
    strResponseCode = Left(strServerResponse, 3)
    If strResponseCode = "250" Or strResponseCode = "220" Or strResponseCode = "354" Then
        Select Case WinsockState
            Case MAIL_CONNECT
                WinsockState = MAIL_HELO
                strDataToSend = Trim$(txtFromEmailAddress.Text)
                strDataToSend = Mid(strDataToSend, 1 + InStr(1, strDataToSend, "<"))
                strDataToSend = Left$(strDataToSend, InStr(1, strDataToSend, "@") - 1)
                WinSock.SendData "HELO " & strDataToSend & vbCrLf
            Case MAIL_HELO
                WinsockState = MAIL_FROM
                WinSock.SendData "MAIL FROM: " & Mid(txtFromEmailAddress.Text, InStr(1, txtFromEmailAddress.Text, "<")) & vbCrLf
            Case MAIL_FROM
                WinsockState = MAIL_RCPTTO
                WinSock.SendData "RCPT TO: " & Mid(txtToEmailAddress.Text, InStr(1, txtToEmailAddress.Text, "<")) & vbCrLf
            Case MAIL_RCPTTO
                WinsockState = MAIL_DATA
                WinSock.SendData "DATA" & vbCrLf
            Case MAIL_DATA
                WinsockState = MAIL_DOT
                WinSock.SendData "Return-Path: <" & txtFromEmailAddress.Text & ">" & vbCrLf & _
                "Content-type: text/plain" & vbCrLf & _
                "Priority: normal" & vbCrLf & _
                "To: " & txtToEmailAddress.Text & vbCrLf & _
                "From: " & txtFromEmailAddress.Text & vbCrLf & _
                "Subject:" & txtEmailSubject.Text & vbLf & vbCrLf
                Dim varLines    As Variant
                Dim varLine     As Variant
                Dim strMessage  As String
                strMessage = txtMessage.Text & vbCrLf & vbCrLf
                varLines = Split(strMessage, vbCrLf)
                strMessage = ""
                For Each varLine In varLines
                    WinSock.SendData CStr(varLine) & vbLf
                Next
                WinSock.SendData "." & vbCrLf
            Case MAIL_DOT
                WinsockState = MAIL_QUIT
                WinSock.SendData "QUIT" & vbCrLf
            Case MAIL_QUIT
                WinSock.Close
        End Select
    Else
        WinSock.Close
        If Not WinsockState = MAIL_QUIT Then
            If Left$(strServerResponse, 3) = 421 Then
                MsgBox "The from email address is invalid for this mail server.  Please check it and try again"
            Else
                MsgBox "Error: " & strServerResponse, vbCritical, "Error"
            End If
        Else
            MsgBox "Message sent!", vbOKOnly + vbInformation, App.Title
        End If
    End If
    WinSock.Close
End Sub
Quando lo compilo mi da un errore 40020 e mi porta sul questo rigo del codice:
-----
WinSock.Connect Trim(txtEmailServer.Text), Val(Trim(txtEmailServerPort.Text))
-----
1) Ho provato a eseguire solo il ciclo While che recupera le email dal db e mi funziona.
2) Provato a eseguire solo invio di un email con WinSock e mi funziona

Appena metto invio del email dentro il ciclo non me la invia più, si ferma al secondo giro del ciclo while.



Qualcuno per favore mi aiuti.