Hoje vamos mostrar como disparar um e-Mail para alguém, quando algum usuário fizer login no APSDU.
Recentemente pessoal, o grande Thalys Juvenal (LinkedIn), desenvolveu um exemplo onde, quando algum usuário faz login no Protheus, é disparado uma mensagem avisando os responsáveis.
A função funciona, chamando o ponto de entrada SDULogin, e logo em seguida enviando o e-Mail, confira o fonte abaixo:
#INCLUDE 'protheus.ch' #INCLUDE 'Ap5Mail.ch' /*/{Protheus.doc} User Function SduLogin Enviar email de aviso que acessou o apsdu @author Thalys Augusto @since 15/07/2020 @version 1.0 @type function /*/ User Function SduLogin() Local lRet := .T. Local cAssunto := 'Login no APSDU' Local cDestinatario := '' Local cMensagem := '' Local cUser := ParamIXB //Monta a mensagem do e-Mail cMensagem := "Usuário Protheus <b>" +Alltrim(cUser)+ "</b> efetuou login no APSDU através do usuário de rede " cMensagem += "<b>" + Alltrim(LogUserName()) + "</b> em " + DtoC( Date()) + " às " + Time() cMensagem += " na máquina <b>" + Lower(ComputerName()) + Upper(" (IP "+ GetClientIP()+" / PC: " +GetComputerName()+")</b>") //Dispara o e-Mail para o destinatario configurado cDestinatario := 'email@teste.com' fSendMail(cDestinatario, cAssunto, cMensagem) Return .T. /*/{Protheus.doc} Static Function fSendMail Função que realiza o envio do e-mail @author Thalys Augusto @since 15/07/2020 @version 1.0 @type function /*/ Static Function fSendMail(cPara , cSubject, cMsg) Local oMail , oMessage Local lRet := .T. Local cSMTPServer := 'smtp.teste.com' Local cSMTPUser := 'conta_email@teste.com' Local cSMTPPass := 'senha@123' Local cMailFrom := 'conta_email@teste.com' Local nPort := 587 Local lUseAuth := .T. Local cCopia := 'email_CC@teste.com' Local cMailError := "" Local nErro, nErroAuth //Faz a conexão com o eMail MsgRun('Conectando com SMTP ', ' ', {||oMail := TMailManager():New()}) oMail:setUseSSL( .T. ) // Usa SSL na conexao, contas do GMAIL usam SSL. oMail:SetUseTLS( .T. ) MsgRun('Inicializando SMTP', '', {|| oMail:Init( '', cSMTPServer , cSMTPUser, cSMTPPass, 0, nPort )}) MsgRun('Setando Time-Out', '', {||oMail:SetSmtpTimeOut( 30 )}) MsgRun('Conectando com servidor...', '', {||nErro := oMail:SmtpConnect()}) MsgRun('Status de Retorno = ' + Str(nErro, 6), '', {||}) //Se usa autenticacao If lUseAuth nErroAuth := 0 MsgRun('Autenticando Usuario [' + cSMTPUser + '] senha ********* ', '', {||nErroAuth := oMail:SmtpAuth(cSMTPUser , cSMTPPass)}) MsgRun('Status de Retorno = ' + str(nErroAuth, 6), '', {||}) //Se houve erro, busca ele If nErroAuth <> 0 cMailError := oMail:GetErrorString(nErroAuth) cMailError := Iif(Empty(cMailError), '***Unknown Error***', cMailError) //ConOut('Erro de Autenticacao ' + str(nErroAuth, 4) + ' (' + cMAilError + ')') lRet := .F. EndIf EndIf //Se houve algum outro erro If nErro <> 0 // Recupera erro cMailError := oMail:GetErrorString(nErro) cMailError := Iif(Empty(cMailError), '***Unknown Error***', cMailError) //ConOut(cMAilError) //ConOut('Erro de Conexão SMTP ' + str(nErro, 4)) //ConOut('Desconectando do SMTP') oMail:SMTPDisconnect() lRet := .F. EndIf //Se tudo estiver ok para o envio If lRet //ConOut('Compondo mensagem em memória') oMessage := TMailMessage():New() oMessage:Clear() oMessage:cFrom := cMailFrom oMessage:cTo := cPara If !Empty(cCopia) oMessage:cCc := cCopia EndIf oMessage:cSubject := cSubject oMessage:cBody := cMsg //Tenta realizar o disparo MsgRun('Enviando Mensagem para [' + cPara + '] ', '', {|| nErro := oMessage:Send( oMail )}) If nErro <> 0 cMailError := oMail:GetErrorString(nErro) cMailError := Iif(Empty(cMailError), '***Unknown Error***', cMailError) //ConOut('Erro de Envio SMTP ' + str(nErro, 4) + ' (' + cMailError + ')') lRet := .F. EndIf //ConOut('Desconectando do SMTP') oMail:SMTPDisconnect() EndIf Return lRet
Bom pessoal, por hoje é só.
Abraços e até a próxima.
Show de Bola, já apliquei na minha base.
Obrigado pelo comentário Claudio. Grande abraço.