Árvore de páginas

Como inserir uma imagem no corpo de um e-mail com a classe TMailMessage()?

Produto:

Protheus ADVPL

Versões:

P12.1.17

Ocorrência:

Quando necessária a inclusão de uma imagem no corpo de um e-mail

Ambiente:

P12.1.17

Passo a passo:

Quando desejado efetuar a inserção de uma imagem no corpo de um e-mail, é necessário que na tag <img> seja passado o caminho completo do arquivo e não o caminho relativo (root patch).


CAMINHO COMPLETO (CORRETO)
sText := "<h1 style='color: blue;'>Teste de envio de e-mail com a classe TMailManager</h1>"
sText += "<img src='c:\totvs\protheus\protheus_data\images\totvs_logo.png' alt='totvs_logo' height='100' width='100'>"

oMessage:cBody := sText
CAMINHO RELATIVO (INCORRETO)
sText := "<h1 style='color: blue;'>Teste de envio de e-mail com a classe TMailManager</h1>"
sText += "<img src='\images\totvs_logo.png' alt='totvs_logo' height='100' width='100'>"

oMessage:cBody := sText



AVISO (LINUX)

Em caso de ambientes Linux, a sintaxe do caminho deve respeitar a regra de case sensitive.



Segue abaixo um exemplo de fonte para envio de e-mail com anexo de imagem:

T37SNDMAIL.prw
#Include "totvs.ch"
#Include "parmtype.ch"

User Function T37SNDMAIL()
    Local oServer     := NIL
    Local oMessage    := NIL
    Local lRet        := .T.
    Local sText       := ""
    Local sMailSMTP   := ""
    Local sMailUser   := ""
    Local sMailPasswd := ""

    // TOTVS_LOGO.PNG DISPONÍVEL NO LINK: https://bit.ly/2JObJ03

    // PREPARA AMBIENTE SEM ABERTURA DE TELA
    RPCSetEnv("99", "01", "Administrador", " ")
        sMailSMTP   := SuperGetMV("MV_MSMTP",   .F.) // VALOR ARMAZENADO POR SEGURANÇA
        sMailUser   := SuperGetMV("MV_MUSER",   .F.) // VALOR ARMAZENADO POR SEGURANÇA
        sMailPasswd := SuperGetMV("MV_MPASSWD", .F.) // VALOR ARMAZENADO POR SEGURANÇA

        oServer := TMailManager():New()
        oServer:Init("", sMailSMTP, sMailUser, sMailPasswd, 0, 25)

        If (oServer:SetSMTPTimeOut(60) != 0)
            ConOut(Repl("-", 80))
            ConOut(PadC("Falha ao configurar o timeout", 80))
            ConOut(Repl("-", 80))

            lRet := .F.
        EndIf

        If (oServer:SMTPConnect() != 0)
            ConOut(Repl("-", 80))
            ConOut(PadC("Falha ao realizar a conexão SMTP", 80))
            ConOut(Repl("-", 80))

            lRet := .F.
        EndIf

        oMessage := TMailMessage():New()
        oMessage:Clear()
        
        // INSERE IMAGEM NO CORPO DA MENSAGEM
        sText := "<h1 style='color: blue;'>Teste de envio de e-mail com a classe TMailManager</h1>"
        sText += "<img src='C:\TOTVS\PROTHEUS_1217A\X32A\protheus_data\images\TOTVS_LOGO.png' alt='TOTVS_LOGO' height='100' width='100'>"

        oMessage:cFrom    := sMailUser + "@totvs.com.br"
        oMessage:cTo      := sMailUser + "@totvs.com.br"
        oMessage:cSubject := "E-mail com imagem em anexo"
        oMessage:cBody    := sText

        If (oMessage:Send(oServer) != 0)
            ConOut(Repl("-", 80))
            ConOut(PadC("Erro ao enviar o e-mail", 80))
            ConOut(Repl("-", 80))

            lRet := .F.
        EndIf

        If (oServer:SMTPDisconnect() != 0)
            ConOut(Repl("-", 80))
            ConOut(PadC("Erro ao disconectar do servidor SMTP", 80))
            ConOut(Repl("-", 80))

            lRet := .F.
        EndIf

        If (lRet == .T.)
            ConOut(Repl("-", 80))
            ConOut(PadC("E-mail enviado com sucesso!", 80))
            ConOut(Repl("-", 80))
        EndIf

    RPCClearEnv()
Return NIL

Observações:

• Ocorrência analisada, atendida e solucionada no ticket: 2756394

• Classe TMailMessage(): http://tdn.totvs.com/display/tec/Classe+TMailMessage

• Classe TMailManager(): http://tdn.totvs.com/display/tec/Classe+TMailManager