Categorias

Envio de Email usando AdvPl

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+='