Essa função envia emails utilizando a infra. do workflow, para isso,
utiliza a configuração de 3 parâmetros:
MV_WFSMTP= SMTP.MEUDOMINIO.COM.BR:25;
MV_WFMAIL= [email protected];
MV_WFPASSWD= ESCOLHEUMASENHA
A seguir o código da função ENVMAIL e do programa que utiliza a função.
Inicio código Função EnvMail ***************************************************************************** #include "rwmake.ch" #include "ap5mail.ch" /* *********************************************** * Progrma: EnvMail Autor: Eduardo Pessoa * * Descrição: Rotina para envio de emails. * * Data: 06/12/2007 * * Parametros: EMail Origem, EMail Destino, * * Subject, Body, Anexo, .T., Bcc * *********************************************** */ User Function ENVMAIL(_pcOrigem,_pcDestino,_pcSubject,_pcBody,_pcArquivo,_plAutomatico,_pcBcc) // Variaveis da função //************************************************************** Private _nTentativas := 0 Private _cSMTPServer := GetMV("MV_WFSMTP") Private _cAccount := GetMV("MV_WFMAIL") Private _cPassword := GetMV("MV_WFPASSW") Private _lEnviado := .F. Private _cUsuario := Upper(AllTrim(cUserName)) // Validação dos campos do email //************************************************************** If _pcBcc == NIL _pcBcc := "" EndIf _pcBcc := StrTran(_pcBcc," ","") If _pcOrigem == NIL _pcOrigem := GetMV("MV_WFMAIL") EndIf _pcOrigem := StrTran(_pcOrigem," ","") If _pcDestino == NIL _pcDestino := "[email protected]" EndIf _pcDestino := StrTran(_pcDestino," ","") If _pcSubject == NIL _pcSubject := "Sem Subject (ENVMAIL)" EndIf If _pcBody == NIL _pcBody := "Sem Body (ENVMAIL)" EndIf If _pcArquivo == NIL _pcArquivo := "" EndIf For _nAux := 1 To 10 _pcOrigem := StrTran(_pcOrigem," ;","") _pcOrigem := StrTran(_pcOrigem,"; ","") Next If _plAutomatico == NIL _plAutomatico := .F. EndIf // Executa a função, mostrando a tela de envio (.T.) ou não (.F.) //************************************************************** If !_plAutomatico Processa({||EnviaEmail(_pcOrigem,_pcDestino,_pcSubject,_pcBody,_pcArquivo,_plAutomatico,_pcBcc)},"Enviando EMail(s)...") Else EnviaEmail(_pcOrigem,_pcDestino,_pcSubject,_pcBody,_pcArquivo,_plAutomatico,_pcBcc) EndIf If !_plAutomatico If !_lEnviado MsgStop("Atenção: Erro no envio de EMail!!!") EndIf Else ConOut("Atenção: Erro no envio de Email!") Endif Return _lEnviado /* *********************************************** * Progrma: EnviaEmail Autor: Eduardo Pessoa * * Descrição: Subrotina para envio de email. * * Data: 06/12/2007 * * Parametros: EMail Origem, EMail Destino, * * Subject, Body, Anexo, .T., Bcc * *********************************************** */ Static Function EnviaEmail(_pcOrigem,_pcDestino,_pcSubject,_pcBody,_pcArquivo,_plAutomatico,_pcBcc) // Veriaveis da função //************************************************************** Local _nTentMax := 50 // Tentativas máximas Local _nSecMax := 30 // Segundos máximos Local _cTime := (Val(Substr(Time(),1,2))*60*60)+(Val(Substr(Time(),4,2))*60)+Val(Substr(Time(),7,2)) Local _nAuxTime := 0 // O que ocorrer primeiro (segundos ou tentativas), ele para. //************************************************************** _cTime += _nSecMax If !_plAutomatico ProcRegua(_nTentMax) EndIf // Exibe mensagem no console/Log //************************************************************** ConOut("ENVMAIL=> ***** Envio de Email ***** "+AllTrim("DE:"+_pcOrigem)+"*"+AllTrim("P/:"+_pcDestino)+"*"+AllTrim("S:"+_pcSubject)+"*"+AllTrim("A:"+_pcArquivo)) For _nTentativas := 1 To _nTentMax If !_plAutomatico IncProc("Tentativa "+AllTrim(Str(_nTentativas))) EndIf ConOut("ENVMAIL=> ***** Tentativa "+AllTrim(Str(_nTentativas))+" ***** "+AllTrim("DE:"+_pcOrigem)+"*"+AllTrim("P/:"+_pcDestino)+"*"+AllTrim("S:"+_pcSubject)+"*"+AllTrim("A:"+_pcArquivo)) CONNECT SMTP SERVER _cSMTPServer ACCOUNT _cAccount PASSWORD _cPassword RESULT _lEnviado If _lEnviado If Empty(_pcBcc) If Empty(_pcArquivo) SEND MAIL FROM _pcOrigem TO _pcDestino SUBJECT _pcSubject BODY _pcBody FORMAT TEXT RESULT _lEnviado Else SEND MAIL FROM _pcOrigem TO _pcDestino SUBJECT _pcSubject BODY _pcBody ATTACHMENT _pcArquivo FORMAT TEXT RESULT _lEnviado EndIf Else If Empty(_pcArquivo) SEND MAIL FROM _pcOrigem TO _pcDestino BCC _pcBcc SUBJECT _pcSubject BODY _pcBody FORMAT TEXT RESULT _lEnviado Else SEND MAIL FROM _pcOrigem TO _pcDestino BCC _pcBcc SUBJECT _pcSubject BODY _pcBody ATTACHMENT _pcArquivo FORMAT TEXT RESULT _lEnviado EndIf EndIf DISCONNECT SMTP SERVER EndIf If _lEnviado .Or. _cTime <= (Val(Substr(Time(),1,2))*60*60)+(Val(Substr(Time(),4,2))*60)+Val(Substr(Time(),7,2)) _nTentativas := _nTentMax EndIf Next ConOut("ENVMAIL=> ***** Resultado de Envio "+IIf(_lEnviado,"T","F")+" / "+AllTrim(Str(_nTentativas))+" ***** "+AllTrim("DE:"+_pcOrigem)+"*"+AllTrim("P/:"+_pcDestino)+"*"+AllTrim("S:"+_pcSubject)+"*"+AllTrim("A:"+_pcArquivo)) Return ************************************************************** Fim códifo Função EnvMail inicio do código: função para testar o envio de email ************************************************************** #Include "Rwmake.ch" /* *********************************************** * Progrma: TestaMail Autor: Eduardo Pessoa * * Descrição: Envia email. * * Data: 12/04/2008 * * Parametros: * * * *********************************************** */ User Function TestaMail() Local _cHTML := "" _cHTML:='' _cHTML+='' _cHTML+='' _cHTML+='' _cHTML+=' Envio de informações confidenciais
' _cHTML+='
Voce está participando | ' _cHTML+='123 |
de um teste de envio | ' _cHTML+='456 |
de email!!! | ' _cHTML+='789 |
' _cHTML+='' // Envia o e-mail U_ENVMAIL("seuemail@dominio.com.br","meuemail@dominio.com.br","TESTE DE ENVIO DE EMAIL...",_cHTML,NIL,.F.) Return ******************************************************* Fim do código - Envia Email