Enviar email

Discussão em 'Progress 4GL' iniciado por asbahr, Março 29, 2010.

  1. asbahr

    asbahr Membro Participativo

    boa Tarde

    Se alguem puder me ajudar, existe algum meio de anexar arquivo, com linha de codigo? Preciso enviar um email com anexo, o codigo para enviar e-mail estou utilizando um que peguei aqui mesmo no 4each.

    Outra duvida estou usando o codigo, engraçado que ele so funciona em uma maquina rede. Nas demais maquinas ate em servidores nao é enviado o email, o codigo e executado sem erro... mas o email nao chega em minha caixa de entrada. So qdo envio apartir de minha maquina mesmo, consigo enviar para outras pessoas. Mas em outra maquina nao envia o email. O q seria necessario para este codigo funcionar em qualquer maquina?

    Estou usando deste codigo.
    Código:
    DEFINE var vFrom      AS CHARACTER  no-undo initial "xxx@xxxxxxxx.com.br".
    DEFINE var vTo        AS CHARACTER  no-undo initial "xxxx@xxxx.com.br".
    DEFINE var vSubject   AS CHARACTER  no-undo initial "teste de e-mail".
    DEFINE var vBody      AS CHARACTER  no-undo initial "teste de 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.
    
    Obrigado,
  2. jonas

    jonas Membro Participativo

    Você utiliza o EMS?

    Se utiliza pode usar uma API da Datasul (UTAPI019).
  3. asbahr

    asbahr Membro Participativo

    bom dia eu utilizo EMS. Mas em todas as pastas e nao encontrei este api, quem que solicitar para datasul? embora so utilize EMS505.
  4. jonas

    jonas Membro Participativo

    Seria interessante você verificar com a Datasul se esta API pode ser utilizada no EMS5.

    Caso você precise da documentação dela posso te enviar.

Compartilhe esta Página