Envio de E-mail pelo SQL Server – Vários usuários…
**A situação: **Criar um e-mail de alerta que informe, 1 vez por dia, ao usuário autorizador os pedidos que estão pendentes de sua autorização.
Recurso: DatabaseMail do SQL Server 2005
Como fazer?
A principio foi pensado em fazer uma tarefa para cada autorizador, onde esta tarefa enviava um e-mail com os pedidos pendentes de autorização para aquele autorizador em um determinado horário, ou seja, teríamos que criar várias tarefas quase idênticas, só alterando o autorizador…
Foi ai que entrou em cena: Yuri Nonato… que disse assim: “Vamos fazer isso de forma recursiva…”
Como?
Vamos fazer uma Procedure que pega o Código e o E-mail do Autorizador e pronto, ai no lugar de criarmos várias tarefas, criaríamos uma unica e chamávamos esta procedure para cada um dos autorizadores…
Resultado:
Ficou mais ou menos assim:
CREATE PROCEDURE [dbo].[sp_SendMail_Autoriza] (@CdUsr int,@Emailvarchar(80))
AS
BEGIN
DECLARE @Teste int;
DECLARE @Email_Ok varchar(80);
DECLARE @Email_Autorizacao NVARCHAR(MAX)SET @Email_Ok = @Email
SET @Email_Autorizacao =
N’<font size=2 face=”arial”>’ +
N’ Prezado Sr. Autorizador, ‘ +
N’<br>’ +
N’ Existe(m) pendencia(s) de autorização no sistema Fulanim (Tela de Autorização) aguardando sua liberação. ‘ +
N’<br>’ +
N’<br>’ +
N’<table border= “1″ cellpadding= “1″ cellspacing=”0″ width=”100%”>’ +
N’<tr align= center valign= middle>’ +
N’<td bgcolor=”black” width=”5%” align = “center”><font color=”white” size=2><b>TIPO</b></font></td>’ +
N’<td bgcolor=”black” width=”5%” align = “center”><font color=”white” size=2><b>DOCUMENTO</b></font></td>’ +
N’<td bgcolor=”black” width=”10%” align = “center”><font color=”white” size=2><b>FORNEC</b></font> </td>+
N’<td bgcolor=”black” width=”5%” align = “center”><font color=”white” size=2><b>DATA</b></font></td>’ +
N’</tr>’ +CAST (
( Select Distinct
td = [NmApl], ”
, td = [Doc], ”
, td = [NmFrn] , ”
, td = [Dt]
From [dbo].[FuFnAutorização](1, 0, 0, 0, ’20110101′, getdate(), NULL, NULL, @CdUsr, 0, 0)
— Esta função acima, retorna os pedidos pendentes por autorizador (@CdUsr)
FOR XML PATH(‘tr’), TYPE
) AS NVARCHAR(MAX)
) +N’</table>’
EXEC msdb.dbo.sp_send_dbmail
@profile_name = ‘Email’,
@recipients=@Email_Ok,
@subject = ‘Documentos Pendentes de Autorização’,
@body = @Email_Autorizacao,
@body_format = ‘HTML’END
Ai só foi criar uma Tarefa no SQL Server, agendada para ser executada uma vez por dia, contendo o seguinte script:
exec sp_SendMail_Autoriza 24,’yuri.nonato24@meninobom.com.br’;
exec sp_SendMail_Autoriza 21,’autorizador1@meninobom.com.br’;
exec sp_SendMail_Autoriza 22,’autorizador2@meninobom.com.br’;
exec sp_SendMail_Autoriza 23,’autorizador3@meninobom.com.br’ ;
exec sp_SendMail_Autoriza 25,’autorizador5@meninobom.com.br’;
* Não foi lá estas coisas de recursivo, mas livrou de criarmos um monte de tarefas…
Abraço!
**{ Alex Souza } **
MCP | MCTS: SQL Server 2008, Implementation and Maintenance
Blog Téc: http://pessoalex.wordpress.com
Linked: http://br.linkedin.com/in/pessoalex
Facebook - SQL Brasil: http://www.facebook.com/SqlServerBrasil
Twitter: AlexSouza_SQL