Caracteres especiais em html

Galera boa Noite!

Estou com o seguinte problema estou montando uma rotina que ira disparar e-mail até aqui beleza isso já consegui fácil porem estou me deparando com problemas no corpo do e-mail que está no html convertendo de forma errônea colocando caracteres especiais onde já tentei altera o formato do cabeçalho para trata de forma correta mas não rola alguém sabe como resolver abaixo mando o fonte utilizado e os caractere que esta me ferrando.

Exemplo de como o email esta chegando : Caro cliente, visando melhor atendê-los, segue abaixo o(s) tìtulo(s) que estÃúo com vencimentos próximos .

ABAIXO O FONTE......

//Bibliotecas

#Include "Protheus.ch"



User Function zEnvMail(cPara, cAssunto, cCorpo, aAnexos, lMostraLog, lUsaTLS)
    Local aArea        := GetArea()
    Local nAtual       := 0
    Local lRet         := .T.
    Local oMsg         := Nil
    Local oSrv, oMessage         := Nil
    Local nRet         := 0
    Local cFrom        := Alltrim(GetMV("MV_RELACNT"))
   // Local cUser        := SubStr(cFrom, 1, At('@', cFrom)-1)
    Local cPass        := Alltrim(GetMV("MV_RELPSW"))
    Local cSrvFull     := Alltrim(GetMV("MV_RELSERV"))
    Local cServer      := Iif(':' $ cSrvFull, SubStr(cSrvFull, 1, At(':', cSrvFull)-1), cSrvFull)
    Local nPort        := Iif(':' $ cSrvFull, Val(SubStr(cSrvFull, At(':', cSrvFull)+1, Len(cSrvFull))), 587)
    Local nTimeOut     := GetMV("MV_RELTIME")
    Local cLog         := ""
    Default cPara      := "ROLIVEIRA@MI.COM.BR"
    Default cAssunto   := "COBRANCA "
    Default cCorpo     := corp()
    Default aAnexos    := {}
    Default lMostraLog := .F.
    Default lUsaTLS    := .T.

    //Se tiver em branco o destinatário, o assunto ou o corpo do email
    If Empty(cPara) .Or. Empty(cAssunto) .Or. Empty(cCorpo)
        cLog += "Boletos  cobrançA!" + CRLF
        lRet := .F.
    EndIf

    If lRet
        //Cria a nova mensagem
        oMsg := TMailMessage():New()
        oMsg:Clear()

        //Define os atributos da mensagem
        oMsg:cFrom    := cFrom
        oMsg:cTo      := cPara
        oMsg:cSubject := cAssunto
        oMsg:cBody    := cCorpo

        aAnexos := {}
        aAdd(aAnexos, "\atualiza\ORCFAT.zip")


        //Percorre os anexos
        For nAtual := 1 To Len(aAnexos)
            //Se o arquivo existir
            If File(aAnexos[nAtual])

                //Anexa o arquivo na mensagem de e-Mail
                nRet := oMsg:AttachFile(aAnexos[nAtual])
                If nRet < 0
                    cLog += "002 - Nao foi possivel anexar o arquivo '"+aAnexos[nAtual]+"'!" + CRLF
                EndIf

            //Senao, acrescenta no log
            Else
                cLog += "003 - Arquivo '"+aAnexos[nAtual]+"' nao encontrado!" + CRLF
            EndIf
        Next

        //Cria servidor para disparo do e-Mail
        oSrv := tMailManager():New()

        //Define se irá utilizar o TLS
        If lUsaTLS
            oSrv:SetUseTLS(.T.)
        EndIf

        //Inicializa conexão
        //nRet := oSrv:Init("", cServer, cUser, cPass, 0, nPort)
        nRet := oSrv:Init("", cServer, cFrom, cPass, 0, nPort)
        If nRet != 0
            cLog += "004 - Nao foi possivel inicializar o servidor SMTP: " + oSrv:GetErrorString(nRet) + CRLF
            lRet := .F.
        EndIf

        If lRet
            //Define o time out
            nRet := oSrv:SetSMTPTimeout(nTimeOut)
            If nRet != 0
                cLog += "005 - Nao foi possivel definir o TimeOut '"+cValToChar(nTimeOut)+"'" + CRLF
            EndIf

            //Conecta no servidor
            nRet := oSrv:SMTPConnect()
            If nRet <> 0
                cLog += "006 - Nao foi possivel conectar no servidor SMTP: " + oSrv:GetErrorString(nRet) + CRLF
                lRet := .F.
            EndIf

            If lRet
                //Realiza a autenticação do usuário e senha
                nRet := oSrv:SmtpAuth(cFrom, cPass)
                If nRet <> 0
                    cLog += "007 - Nao foi possivel autenticar no servidor SMTP: " + oSrv:GetErrorString(nRet) + CRLF
                    lRet := .F.
                EndIf

                If lRet
                    //Envia a mensagem
                    nRet := oMsg:Send(oSrv)
                    If nRet <> 0
                        cLog += "008 - Nao foi possivel enviar a mensagem: " + oSrv:GetErrorString(nRet) + CRLF
                        lRet := .F.
                    EndIf
                EndIf

                //Disconecta do servidor
                nRet := oSrv:SMTPDisconnect()
                If nRet <> 0
                    cLog += "009 - Nao foi possivel disconectar do servidor SMTP: " + oSrv:GetErrorString(nRet) + CRLF
                EndIf
            EndIf
        EndIf
    EndIf

  oMessage := TMailMessage():New()
  oMessage:Clear()
  xRet := oMessage:Send( oSrv )
  if xRet <> 0
    cMsg := "Could not send message: " + oSrv:GetErrorString( xRet )
    conout( cMsg )
  endif

  xRet := oSrv:SMTPDisconnect()
  if xRet <> 0
    cMsg := "Could not disconnect from SMTP server: " + oSrv:GetErrorString( xRet )
    conout( cMsg )
  endif

/*

    //Se tiver log de avisos/erros
    If !Empty(cLog)
        cLog := "zEnvMail - "+dToC(Date())+ " " + Time() + CRLF + ;
            "Funcao - " + FunName() + CRLF + CRLF +;
            "Existem mensagens de aviso: "+ CRLF +;
            cLog
        ConOut(cLog)

        //Se for para mostrar o log visualmente e for processo com interface com o usuário, mostra uma mensagem na tela
        If lMostraLog .And. ! IsBlind()
            Aviso("Log", cLog, {"Ok"}, 2)
        EndIf
    EndIf
 */
    RestArea(aArea)
Return lRet 

STATIC FUNCTION Corp()

PUBLIC cHtml :=''      
_cObs:= 'teste de  email'
cHtml := '<html> ' //+ENTER
//cHtml += '<head> ' //+ENTER Content-Type: text/html; charset=utf-8
cHtml += '   <meta http-equiv="X-UA-Compatible" content="IE=chrome">'
cHtml += '    <meta name="viewport" content="width=device-width, initial-scale=1">'
cHtml += '    <link rel="stylesheet" href="css/bootstrap.min.css">'
cHtml += '    <link rel="stylesheet" href="css/jquery.bootgrid.min.css">'
cHtml += '    <link rel="stylesheet" href="css/jquery-ui.css">'
cHtml += '    <script src="js/jquery.min.js"></script>'
cHtml += '    <script src="js/bootstrap.min.js"></script>'  
cHtml += '   <script src="js/jquery-1.12.4.js"></script>'
cHtml += '    <script src="js/jquery-ui.js"></script>'
cHtml += '    <script src="js/jquery.bootgrid.min.js"></script>R'
//cHtml += '</head> ' //+ENTER
cHtml += '<body bgcolor="#FFFFFF"> ' //+ENTER
cHtml += '<img align=Left src="http://www.Cliente.com.br/images/logo_niaz.jpg" width="230" height="32    " hspace="1">' //+ENTER
cHtml += '<p><b><font color="#000080" <font face="Arial" size="2">'//+ENTER
cHtml += '<pre>'//+ENTER
cHtml += ' <font face="Arial" size="2">'+Space(03)+SM0->M0_NOMECOM +'<BR> ' //+ENTER
cHtml += ' '+Space(03)+SM0->M0_ENDCOB +'<BR> ' //+ENTER
cHtml += ' '+Space(61)+AllTrim(SM0->M0_BAIRCOB)+' - '+AllTrim(SM0->M0_CIDCOB)+' - '+ AllTrim(SM0->M0_ESTCOB) +' - '+AllTrim(SM0->M0_CEPCOB) +'<BR> ' //+ENTER
cHtml += ' '+Space(61)+'Telefone '+ SM0->M0_TEL +' - '+ ' financeiro@teste.com.br </font>' //+ENTER
cHtml += '</pre>'//+ENTER                                                   
cHtml += '</font></b></p> '//+ENTER
cHtml += '<br> '//+ENTER

//cHtml += '<h2><p><b><font Color="#000080" face="Arial"><CENTER>Orcamento: '+'MV_PAR01'+' - Data Emissão: '+'Dtoc(SUA->UA_EMISSAO)'+' - Validade: 2 Dias</CENTER></font></b></p></h2> ' 
cHtml += '<div align="left"> ' //+ENTER
cHtml += '<table border=0 width=45% cellpadding="1"> ' //+ENTER
cHtml += '   <tr> ' //+ENTER                                                   
cHtml += '      <td bgcolor="#EEEEEE" align="left" width="150"><b><font face="Arial" size="2">Cliente:</font></b></td> ' //+ENTER
cHtml += '      <td bgcolor="#EEEEEE" align="left" width="1000"><font face="Arial" size="2">'+ "Pedido Faturado em nome de: "+ AllTrim(SA1->A1_NOME) + " <br>  CNPJ: " +;
                                                                                              Transform(Alltrim(SA1->A1_CGC),"@R 99.999.999/9999-99")+'</font></td> ' //+ENTER
cHtml += '   <tr> ' //+ENTER
cHtml += '      <td bgcolor="#EEEEEE" align="left" width="150"><b><font face="Arial" size="2">'+ OemToAnsi(' Endereço Fat.:')+ '</font></b></td> ' //+ENTER
cHtml += '      <td bgcolor="#EEEEEE" align="left" width="1000"><font face="Arial" size="2">'+SA1->A1_END + ",  " + SA1->A1_BAIRRO + ",  " + SA1->A1_MUN + ",  " + SA1->A1_EST + "<BR>CEP: " + SA1->A1_CEP+'</font></td> ' //+ENTER
cHtml += '   <tr> ' //+ENTER
cHtml += '      <td bgcolor="#EEEEEE" align="left" width="150"><b><font face="Arial" size="2">'+ OemToAnsi('Observação:')+ ' </font></b></td> ' //+ENTER
cHtml += '      <td bgcolor="#EEEEEE" align="left" width="800"><font face="Arial" size="2">'+_cObs+'</font></td> '      //+ENTER

cHtml += '</table> ' //+ENTER

cHtml += '<br>' //+ENTER
    cHtml += '<br><br>' //+ENTER
    cHtml += '<p><b><font Color="#000080" face="Arial"> Valide sua nota diretamente  no <a href="https://nfe.fazenda.sp.gov.br/ConsultaNFe/consulta/publica/ConsultarNFe.aspx">SEFAZ:</a></p>  </font></b></p> ' //+ENTER

    cHtml += '<font face="Arial" size="2">'+'Caro cliente, visando melhor'+ OemToAnsi(' atendê-los')+', segue abaixo o(s)  '+ OemToAnsi(' título(s)  ')+'que   '+ OemToAnsi(' estão  ')+'com vencimentos <BR> '+ OemToAnsi('  próximos  ')+'.'+'</font> ' ////+ENTER

//https://nfe.fazenda.sp.gov.br/ConsultaNFe/consulta/publica/ConsultarNFe.aspx

cHtml += '<br><br>' //+ENTER

cHtml += '<p><b><font Color="#000080" face="Arial">Titulos:</font></b></p> ' //+ENTER
cHtml += '<table border=0 width=45% cellpadding="2"> ' //+ENTER
cHtml += '   <tr> ' //+ENTER
cHtml += '      <td bgcolor="#C0C0C0" align="center" width="20%" ><b><font face="Arial" size="2">TITULO</font></b></td> ' //+ENTER
cHtml += '      <td bgcolor="#C0C0C0" align="center" width="20%" ><b><font face="Arial" size="2">PARCELA</font></b></td> ' //+ENTER
cHtml += '      <td bgcolor="#C0C0C0" align="center" width="20%" ><b><font face="Arial" size="2">'+ EncodeUTF8("EMISSÃO", "cp1252") +' </font></b></td> ' //+ENTER
cHtml += '      <td bgcolor="#C0C0C0" align="center" width="20%" ><b><font face="Arial" size="2">VENCIMENTO</font></b></td> ' //+ENTER
cHtml += '      <td bgcolor="#C0C0C0" align="center" width="20%" ><b><font face="Arial" size="2">VALOR</font></b></td> ' //+ENTER

cHtml += '   </tr> ' //+ENTER
cHtml += '   <tr> ' //+ENTER

//_aLstDados := aClone(_aDados[03])'+ OemToAnsi(' atendê-los')+'
//_aLstDados := aClone(ASort(_aDados[03],,,{|x,y|x[4]+x[1]+x[2]<y[4]+y[1]+y[2]}))
//c_Anexo := "" //MGomes

cHtml += '   </tr> ' //+ENTER
cHtml += '</table> ' //+ENTER
//cHtml += '<table border=0 width=100% cellpadding="2"> ' 
//cHtml += '   <tr align="left" bgcolor="#C0C0C0"> ' 
//cHtml += '   <td bgcolor="#EEEEEE" align="center" width="60"><font face="Arial" size="2">'+Transform(nTotalGeral,"@E 9,999,999.99")+'</font></td> ' 
//cHtml += '   </tr> ' 
//cHtml += '</table> ' 
cHtml += '<br>' //+ENTER
//cHtml += '<font face="Arial" size="2"> A Cliente agradece sua pontualidade e preferência.</font><br><br>' //+ENTER
cHtml += '<font face="Arial" size="2"> A '+Space(03)+SM0->M0_NOMECOM + ' agradece sua '+  EncodeUTF8("preferência", "cp1252")+ '</font><br><br>'



cHtml += '<font face="Arial" size="2"> Em caso de duvidas entre em contato com nosso departamento financeiro.</font><br><br>' //+ENTER

cHtml += '<font face="Arial" size="2"> Att.</font><br><br>' //+ENTER

cHtml += '<font face="Arial" size="2">'+Space(03)+SM0->M0_NOMECOM + ' </font><br>' //+ENTER
cHtml += '<font face="Arial" size="2"> Depto  '+ OemToAnsi(' Financeiro ')+' </font><br>' //+ENTER
cHtml += '<font face="Arial" size="2"> Telefone: (11)   R. 204 </font><br>' //+ENTER
cHtml += '<font face="Arial" size="2"> '+ OemToAnsi('financeiro@teste.com.br ')+' </font><br>' //+ENTER

cHtml += '</div> '         //+ENTER
cHtml += '<U> '         //+ENTER
cHtml += '<br><hr> '     //+ENTER
cHtml += '</body> '     //+ENTER
cHtml += '</html> '     //+ENTER
RETURN(cHtml)
compartilhar
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do TOTVS DevForum!

2 respostas

Não é a resposta que estava procurando? Procure outras perguntas com as tags html utf8 ou faça a sua própria pergunta.