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:
Quando lo compilo mi da un errore 40020 e mi porta sul questo rigo del codice: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
-----
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.

Rispondi quotando