1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

  2. Anuncie Aqui ! Entre em contato fdantas@4each.com.br

Enviar e-mail

Discussão em 'Progress 4GL' iniciado por erickles, Agosto 13, 2009.

  1. erickles

    erickles Membro Participativo

    Olá Pessoal,

    Tenho um probleminha aqui...

    Tenho uma aplicação que envia e-mail a um determinado número de usuários. O problema é que o e-mail é enviado individualmente para cada um. Apesar de eu colocar no campo de destinatario varios e-mail (fulano@mail.com.br; cicrano@mail.com.br), o e-mail é enviado individualmente por usuário, sem aparecer no campo "Para:" os usuários que receberam o e-mail...A versão do outlook que usamos é a de 2007...

    Alguem tem uma solução ?
  2. Cobra.cne

    Cobra.cne Equipe de Suporte Moderador

    Olá,

    Se puder, posta o código para tentarmos ajudar.
    Outra solução seria utilizar SMTP, pelo menos nunca tive este tipo de problema.

    Att.
  3. erickles

    erickles Membro Participativo

    Bem, o codigo que uso é este aqui...

    Código:
    DEFINE var vFrom      AS CHARACTER  no-undo initial "sac@tortuga.com.br".
    DEFINE var vTo        AS CHARACTER  no-undo initial "fulano@mail.com.br; cicrano@mail.com.br".
    DEFINE var vSubject   AS CHARACTER  no-undo initial "Ignore este e-mail".
    DEFINE var vBody      AS CHARACTER  no-undo initial "Ignore este e-mail, é apenas um teste...".
    
    DEFINE var l-ok       AS LOGICAL    NO-UNDO.
                             
    DEFINE VARIABLE vSmtpServer AS CHARACTER NO-UNDO INITIAL "mail.tortuga.com.br".
    DEFINE VARIABLE vdebugmode  AS LOGICAL   NO-UNDO.
    DEFINE VARIABLE vToAux      AS CHARACTER  NO-UNDO.
    DEFINE VARIABLE iCont       AS INTEGER    NO-UNDO.
    
    DEFINE VARIABLE vbuffer AS MEMPTR  NO-UNDO.
    DEFINE VARIABLE hSocket AS HANDLE  NO-UNDO.
    DEFINE VARIABLE vstatus AS LOGICAL NO-UNDO.
    DEFINE VARIABLE vState  AS INTEGER NO-UNDO.
    
    /*
      Status:
            0 - No Connection to the server
            1 - Waiting for 220 connection to SMTP server
            2 - Waiting for 250 OK status to start sending email
            3 - Waiting for 250 OK status for sender
            4 - Waiting for 250 OK status for recipient
            5 - Waiting for 354 OK status to send data
            6 - Waiting for 250 OK status for message received
            7 - Quiting
    */
    
    FIND FIRST param-global NO-LOCK NO-ERROR.
    IF AVAIL param-global THEN
       vSmtpServer = param-global.serv-mail.
    
    ASSIGN vToAux = vTo
           vToAux = REPLACE(vToAux,',',';').
    
    DO iCont = 1 TO NUM-ENTRIES(vToAux,';'):
       vTo = ENTRY(iCont,vToAux,';').
       RUN sendmail.
    END.
    
    PROCEDURE cleanup:
        hSocket:DISCONNECT() NO-ERROR.
        DELETE OBJECT hSocket NO-ERROR.
    END.
    
    PROCEDURE sendmail:
        CREATE SOCKET hSocket.
        hSocket:SET-READ-RESPONSE-PROCEDURE("readHandler", THIS-PROCEDURE).
        vstatus = hSocket:CONNECT("-S 25 -H " + vSmtpServer) NO-ERROR.
        IF NOT vstatus THEN 
            DO:
                /*MESSAGE "Server is unavailable".  */
                RETURN.
            END.
        vstate = 1.
        REPEAT ON STOP UNDO, LEAVE ON QUIT UNDO, LEAVE:
            IF vstate < 0 OR vstate = 7 THEN 
                LEAVE.
            WAIT-FOR READ-RESPONSE OF hSocket.
        END.
        RUN cleanup.
    END PROCEDURE.
    
    PROCEDURE newState:
        DEFINE INPUT PARAMETER newState AS INTEGER.
        DEFINE INPUT PARAMETER pstring  AS CHARACTER.
    
        /*IF vdebugmode THEN 
            MESSAGE "newState: " newState " pstring: " pstring VIEW-AS ALERT-BOX.*/
            vState = newState.
            IF pstring = "" THEN 
                RETURN.
            SET-SIZE(vbuffer) = LENGTH(pstring) + 1.
            PUT-STRING(vbuffer,1) = pstring.
            hSocket:WRITE(vbuffer, 1, LENGTH(pstring)).
            SET-SIZE(vbuffer) = 0.
    END PROCEDURE.
    
    PROCEDURE readHandler:
        DEFINE VARIABLE vlength AS INTEGER NO-UNDO.
        DEFINE VARIABLE str AS CHARACTER NO-UNDO.
        DEFINE VARIABLE v AS INTEGER NO-UNDO.
    
        vlength = hSocket:GET-BYTES-AVAILABLE().
        IF vlength > 0 THEN
            DO:
                SET-SIZE(vbuffer) = vlength + 1.
                hSocket:READ(vbuffer, 1, vlength, 1).
                str = GET-STRING(vbuffer,1).
                /*IF vdebugmode THEN 
                    MESSAGE "server:" str VIEW-AS ALERT-BOX.*/
                SET-SIZE(vbuffer) = 0.
                v = INTEGER(ENTRY(1, str," ")).
                CASE vState:
                    WHEN 1 THEN 
                        IF v = 220 THEN
                            RUN newState(2, "HELO ~r~n").
                        ELSE 
                            vState = -1.
                    WHEN 2 THEN DO:
                        IF v = 250 THEN
                            RUN newState(3, "MAIL From: " + vFrom + "~r~n").
                        ELSE 
                            vState = -1.                    
                    END.
                        
                    WHEN 3 THEN DO:
                        IF v = 250 THEN
                            RUN newState(4, "RCPT TO: " + vTo + "~r~n").
                        ELSE 
                            vState = -1.                    
                    END.
                        
                    WHEN 4 THEN DO:
                        IF v = 250 THEN
                            RUN newState(5, "DATA ~r~n").
                        ELSE 
                            vState = -1.                   
                    END.
                        
                    WHEN 5 THEN DO:
                        IF v = 354 THEN
                            RUN newState(6, "From: " + vFrom + "~r~n" + 
                                        "To: " + vTo + " ~r~n" +
                                  "Subject: " + vSubject + 
                                   " ~r~n~r~n" + 
                                   vBody + "~r~n" + 
                                   ".~r~n").
                        ELSE 
                            vState = -1.                    
                    END.
                        
                    WHEN 6 THEN  DO:
                        IF v = 250 THEN
                            RUN newState(7,"QUIT~r~n").
                        ELSE 
                            vState = -1.                    
                    END.
                        
                END CASE.
            END.
            IF vState = 7 AND vdebugmode THEN 
                MESSAGE "Email enviado com sucesso.".
            IF vState < 0 AND vdebugmode THEN 
                MESSAGE "Email nao pode ser enviado".
            IF vState = 7 THEN l-ok = TRUE.
    
    END PROCEDURE.
    Pelos meus testes, ele só envia um e-mail por destinatario, mesmo forçando ele a enviar para 2 destinos ao mesmo tempo, o email nao é enviado...
  4. Cobra.cne

    Cobra.cne Equipe de Suporte Moderador

    Caro Erick,

    O problema esta no código abaixo, que esta dividindo a quantidade de pessos na variavel vTo, pela quantidade de entradas separadas por vírgula/ponto e vírgula.
    Código:
    ASSIGN vToAux = vTo
           vToAux = REPLACE(vToAux,',',';').
    
    DO iCont = 1 TO NUM-ENTRIES(vToAux,';'):
       vTo = ENTRY(iCont,vToAux,';').
       RUN sendmail.
    END.
    
    
    Tenta usar somente assim, sem a divisão:

    Código:
    
    RUN sendmail.
    
    
    Att.
  5. erickles

    erickles Membro Participativo

    Pois é cara, já tentei fazer isso, mas não enviou nem pra um nem pra outro... :| , estranho...
  6. Cobra.cne

    Cobra.cne Equipe de Suporte Moderador

    Efetuei o teste aqui no meu ambiente e detectei a seguinte situação:
    Código:
    DEFINE var vTo        AS CHARACTER  no-undo initial "fulano@mail.com.br; cicrano@mail.com.br".
    
    Aqui tive problema com o espaço após o ponto e vírgula, tenta assim:
    Código:
    DEFINE var vTo        AS CHARACTER  no-undo initial "fulano@mail.com.br;cicrano@mail.com.br".
    
    Alias funcionou sem o espaço, utilizando tanto vírgula como ponto e vírgula.

    Att.

Compartilhe esta Página