• Viernes 3 de Mayo de 2024, 04:04

Autor Tema:  Bucle De Envio De Correos  (Leído 1603 veces)

Vate

  • Miembro activo
  • **
  • Mensajes: 44
    • Ver Perfil
Bucle De Envio De Correos
« en: Sábado 13 de Enero de 2007, 01:35 »
0
Hola a todos, estoy haciendo una aplicacion que manda correos, la aplicacion funciona perfectamente para un solo destinatario de correo, pero necesito mandar el mismo correo a varias personas. Utilizo un winsock Aqui muestro parte de mi codigo. La funcion a continuacion tiene como parametros el winsock , el servidor SMTP (txtHost),el remitente(txtSender) ,el destinatario(txtRecipient),El titulo del correo(txtSubject) y el cuerpo del mensaje(txtMessage)


Public Sub Envia_Mail(Winsock1 As Winsock, txtHost As String, txtSender As String, txtRecipient As String, txtSubject As String, txtMessage As String)
'Funcion para enviar correos
 Winsock1.Connect Trim$(txtHost), 25
 m_State = MAIL_CONNECT
End Sub


El evento que utilizo del winsock es el data arrival

Private 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 Sub

Como dije anteriormente, el programa funciona perfectamente para un solo destinatario de correo , pero no para varios. Si alguien sabe como hacerlo, le agradeceria me informe

Gracias

El vate

Epa

  • Miembro MUY activo
  • ***
  • Mensajes: 242
  • Nacionalidad: ar
    • Ver Perfil
Re: Bucle De Envio De Correos
« Respuesta #1 en: Sábado 13 de Enero de 2007, 02:41 »
0
Buenas.

No  le puse mucha atencion al codigo ya q es largo y estoy cansado  :P
Pero por lo que veo no hay ningun bucle ahi. Quisas no lo vi xD
Otra cosa es que el servidor smtp puede tener un tiempo de espera entre mail y mail para evitar spam, como lo que quieres hacer =P intenta usar otro servidor

Busca separar los destinatarios y mandar por separado, ya que muchos clientes o servidores toman los mails que van dirigidos a multiples usuarios como spam. Ademas si te llega un mail de alguien que no conoces que esta dirigido a muchos usuarios, ni lo lees (por lo menos yo y mucha gente q conosco)

Bueno, creo q no fui de gran ayuda. Pero quisas ppara algo sirva ^^

Saludos
The sweet smell of a great sorrow lies over the land.