Nesse vídeo demonstraremos a utilização das classes TMailMessage e TMailManage, que servem para realizar a conexão com um servidor de email e assim disparar mensagens de email.
Abaixo o código fonte desenvolvido para o exemplo em vídeo acima:
//Bibliotecas #Include "TOTVS.ch" /*/{Protheus.doc} User Function zExe497 Realiza um disparo de e-Mail manualmente @type Function @author Atilio @since 04/04/2023 @see https://tdn.totvs.com/display/tec/Classe+TMailMessage e https://tdn.totvs.com/display/tec/Classe+TMailManager @obs **** Apoie nosso projeto, se inscreva em https://www.youtube.com/TerminalDeInformacao **** /*/ User Function zExe497() Local aArea := FWGetArea() Local cPara := "daniel@atiliosistemas.com; contato@atiliosistemas.com" Local cAssunto := "" Local cCorpo := "" Local aAnexos := {} Local lExibeHelp := .T. //Monta o corpo do e-Mail cCorpo := '<p>Olá.</p>' cCorpo += '<p></p>' cCorpo += '<p>Esse é um <strong>e-Mail de teste</strong> gerado pelo <font color="red">ERP Protheus</font>.</p>' cCorpo += '<p></p>' cCorpo += '<p>Data <em>' + dToC(Date()) + '</em> às <em>' +Time() + '</em>.</p>' //Faz o disparo via função cusotmizada cAssunto := "Envio de Teste (TMailMessage e TMailManager)" lEnvio := fEnvia(cPara, cAssunto, cCorpo, aAnexos, lExibeHelp, .T.) If lEnvio FWAlertSuccess("Sucesso no disparo do e-Mail", "Teste TMailMessage e TMailManager") Else FWAlertError("Falha no disparo do e-Mail", "Teste TMailMessage e TMailManager") EndIf FWRestArea(aArea) Return Static Function fEnvia(cPara, cAssunto, cCorpo, aAnexos, lMostraLog, lUsaTLS) Local aArea := FWGetArea() Local nAtual := 0 Local lRet := .T. Local oMsg := Nil Local oSrv := 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 := "" Default cAssunto := "" Default cCorpo := "" Default aAnexos := {} Default lMostraLog := .F. Default lUsaTLS := .F. //Se tiver em branco o destinatário, o assunto ou o corpo do email If Empty(cPara) .Or. Empty(cAssunto) .Or. Empty(cCorpo) cLog += "001 - Destinatario, Assunto ou Corpo do e-Mail vazio(s)!" + 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 //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) 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 //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 //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 FWRestArea(aArea) Return lRet
Bom pessoal, por hoje é só.
Abraços e até a próxima.