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)