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

Como enviar e-mail no formato HTML utilizando o Outlook ?

Discussão em 'Progress 4GL' iniciado por weiss_sbs, Novembro 16, 2015.

  1. weiss_sbs

    weiss_sbs Membro Participativo

    Como enviar e-mail no formato HTML utilizando o Outlook ?
  2. klebaum

    klebaum Membro Participativo

    Weiss,

    É via produto Datasul?
    A UTAPI019 é bem completa para o envio de e-mail, tem boa documentação também.

    Att.,
  3. joelscampos

    joelscampos Membro Participativo

    Segue os trechos importantes.

    Código:
                
    
    ASSIGN ds-body-aux = "<html><body>Teste</body></html>".
    
                /*------------------------- Executa a procedure de envio ----------------------*/
                RUN send-mail (INPUT ds-subject-aux,                    /* assunto*/
                               INPUT ds-mail-destinatario-aux,          /* destinatário*/
                               INPUT "",                                /* anexo*/
                               INPUT ds-body-aux,                       /* corpo do email*/
                               INPUT ds-mail-copia-aux,                 /* destinatário Cópia (Cc)*/
                               INPUT "",                                /* destinatário Cópia Oculta (Cco)*/
                               INPUT nm-remetente-par).                 /* remetente*/
    


    Código:
    /*------------------------- PROCEDURE QUE ENVIA EMAILS ------------------------*/
    PROCEDURE send-mail:
    
    
        DEF INPUT PARAMETER ds-assunto-par                  AS CHAR                 NO-UNDO.
        DEF INPUT PARAMETER ds-mail-destinatario-par        AS CHAR                 NO-UNDO.
        DEF INPUT PARAMETER ds-anexo-par                    AS CHAR                 NO-UNDO.
        DEF INPUT PARAMETER ds-body-par                     AS LONGCHAR             NO-UNDO.
        DEF INPUT PARAMETER ds-mail-destinatario-cc-par     AS CHAR                 NO-UNDO.
        DEF INPUT PARAMETER ds-mail-destinatario-cco-par    AS CHAR                 NO-UNDO.
        DEF INPUT PARAMETER nm-remetente-par                AS CHAR                 NO-UNDO.
       
        DEF VAR chNameSpace                                 AS COM-HANDLE           NO-UNDO.
        DEF VAR chOutlook                                   AS COM-HANDLE           NO-UNDO.
        DEF VAR chFolder                                    AS COM-HANDLE           NO-UNDO.
        DEF VAR chMailItem                                  AS COM-HANDLE           NO-UNDO.
        DEF VAR chMailAttachments                           AS COM-HANDLE           NO-UNDO.
        DEF VAR i                                           AS INT                  NO-UNDO.
       
        CREATE "Outlook.application" chOutlook.
    
    
       
    
    
        ASSIGN
            chNameSpace = chOutlook:GetNameSpace("MAPI":U)
            chFolder    = chNameSpace:GetDefaultFolder(6). /*6 - The Inbox folder. (https://msdn.microsoft.com/EN-US/library/office/ff861868.aspx)*/
       
        DO ON ERROR UNDO, RETRY:
    
           
            /* Seta propriedades do email a ser enviado */
            ASSIGN
                chMailItem          = chFolder:Items:ADD()
                chMailItem:TO       = ds-mail-destinatario-par
                chMailItem:CC       = ds-mail-destinatario-cc-par
                chMailItem:BCC      = ds-mail-destinatario-cco-par
                chMailItem:Subject  = ds-assunto-par
                chMailItem:HTMLBody = ds-body-par NO-ERROR. /*'HTMLBody-->Para enviar no formato HTML*/
    
            IF ERROR-STATUS:ERROR THEN DO:
                MESSAGE
                    "chMailItem:HTMLBody: " chMailItem:HTMLBody SKIP
                    VIEW-AS ALERT-BOX TITLE "Erro na procedure de envio(send-mail) !".
            END.
           
           
            /* Se precisar enviar anexo, este é o comando.
            assign chMailAttachments = chMailItem:Attachments:Add(ds-anexo-par,1,1,"Mat0413.log":U).*/
           
    
            /* Se for especificado um remetente, selecionaremos a conta dele. */
            IF nm-remetente-par <> ""
            THEN DO:
    
                DO i = 1 TO chOutlook:Session:Accounts:COUNT:
           
                    IF  chOutlook:Session:Accounts:ITEM(i):SmtpAddress    = nm-remetente-par
                    THEN
                        ASSIGN chMailItem:SendUsingAccount  = chOutlook:Session:Accounts:ITEM(i).
                   
                       
                END. /* DO i = 1 TO */
            END. /* IF nm-remetente-par <> "" */
           
       
    
    
            /* Comando que efetua o envio */
            chMailItem:SEND().
    
           
        END. /* DO ON ERROR */
    
        RETURN "OK".
    
        FINALLY:
       
            RELEASE OBJECT chMailItem           NO-ERROR.
            RELEASE OBJECT chMailAttachments    NO-ERROR.
            RELEASE OBJECT chFolder             NO-ERROR.
            RELEASE OBJECT chNameSpace          NO-ERROR.
            RELEASE OBJECT chOutlook            NO-ERROR.
        END FINALLY.
    
    END PROCEDURE. /*send-mail*/
    

    Com a função abaixo você pega as contas com as quais o usuário pode enviar email:

    Código:
    /*----------------
    * Esta funcao retorna uma lista de enderecos que poderao ser usados como remetentes.
    * A lista é formada com as contas de email cadastradas no Outlook do usuário que está executando este programa.
    ------------------------------------------------------*/
    FUNCTION fn-getContasOutlook RETURNS CHAR ():
    
    
        /*------ Variaveis locais --------------------------------------------*/
        DEF VAR ds-lista-end-email-aux      AS CHAR                                         NO-UNDO.
        DEF VAR chOutlook                   AS COM-HANDLE                                   NO-UNDO.
        DEF VAR i                           AS INT                                          NO-UNDO.
    
    
       
        DO ON ERROR UNDO, RETRY:
    
            /* acessa o outlook do usuario*/
            CREATE "Outlook.application" chOutlook.
    
    
            /* Percorre as contas. Da última para a primeira, pois geralmente a conta secundária é a "faturamento@unimedfesp.coop.br", por exemplo. */
            DO i = chOutlook:SESSION:Accounts:COUNT TO 1 BY -1:
    
                IF ds-lista-end-email-aux   = ""
                THEN
                    ds-lista-end-email-aux  = chOutlook:SESSION:Accounts:ITEM(i):SmtpAddress.
                ELSE
                    ds-lista-end-email-aux  = ds-lista-end-email-aux + "," + chOutlook:SESSION:Accounts:ITEM(i):SmtpAddress.
               
            END. /* DO i = 1 TO */
    
            FINALLY:
                RELEASE OBJECT chOutlook            NO-ERROR.
            END FINALLY.
        END.
    
        RETURN ds-lista-end-email-aux.
    END FUNCTION. /* fn-getContasOutlook */
    
  4. weiss_sbs

    weiss_sbs Membro Participativo

  5. Felipe Amaral de Souza

    Felipe Amaral de Souza Membro Participativo

    Klebaum, estou utilizando o código de envio de e-mails mas estou tendo um erro de concatenamento superando 32 bytes no corpo do e-mail. Estou com um HTML grande distribuídos dentro da tt-mensagem e na hora de preencher a variável chMailItem:HTMLBody está dando este erro e cortando o e-mail. Sabes como posso resolver isso?

    Obrigado!
  6. valdir_fantin

    valdir_fantin Membro Participativo

    Pessoal como faz para incluir assinatura no corpo do e-mail ?

    Grato

Compartilhe esta Página