sexta-feira, 10 de outubro de 2008

Como enviar emails por SMTP no SQL Server 2000

Continuando o assunto de ontem, vou colocar aqui um exemplo de utilização de envio de email no SQL Server, aproveitando o artigo de backup com compactação de ontem, vou criar aqui um passo dentro do job de backup criado anteriormente, esse passo será executado caso algum passo anterior não funcione e a sua função será enviar uma mensagem ao administrador em caso de erro, informando em qual o banco de dados ocorreu o erro.

Um dos problemas do SQL Server 2000 é a falta de integração com ferramentas de email que utilizem SMTP ou IMAPI, ele trabalha somente com MAPI, para contornar esse problema eu utilizei uma SP chamada “sp_send_cdosysmail” que usa o componente cdosys do próprio Windows, já velho conhecido por desenvolvedores em ASP.

Abaixo segue a SP, crie-a na tabela master e dê permissão de execução ao usuário que irá executar o job.

CREATE PROCEDURE [dbo].[sp_send_cdosysmail]
   @From varchar(100) ,
   @To varchar(100) ,
   @Subject varchar(100)=" ",
   @Body varchar(4000) =" "
/*********************************************************************

   AS
   Declare @iMsg int
   Declare @hr int
   Declare @source varchar(255)
   Declare @description varchar(500)
   Declare @output varchar(1000)

--************* Create the CDO.Message Object ************************
   EXEC @hr = sp_OACreate 'CDO.Message', @iMsg OUT

--***************Configuring the Message Object ******************
-- This is to configure a remote SMTP server.
--
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cdosys/html/_cdosys_schema_configuration_sendusing.asp
   EXEC @hr = sp_OASetProperty @iMsg, 'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/sendusing").Value','2'

-- Substitua MailServerName pelo nome ou IP do seu Server SMTP.
   EXEC @hr = sp_OASetProperty @iMsg, 'Configuration.fields("
http://schemas.microsoft.com/cdo/configuration/smtpserver").Value', ' MailServerName’

-- Save the configurations to the message object.
   EXEC @hr = sp_OAMethod @iMsg, 'Configuration.Fields.Update', null

-- Set the e-mail parameters.
   EXEC @hr = sp_OASetProperty @iMsg, 'To', @To
   EXEC @hr = sp_OASetProperty @iMsg, 'From', @From
   EXEC @hr = sp_OASetProperty @iMsg, 'Subject', @Subject

-- If you are using HTML e-mail, use 'HTMLBody' instead of 'TextBody'.
   EXEC @hr = sp_OASetProperty @iMsg, 'TextBody', @Body
   EXEC @hr = sp_OAMethod @iMsg, 'Send', NULL

-- Sample error handling.
   IF @hr <>0
     select @hr
     BEGIN
       EXEC @hr = sp_OAGetErrorInfo NULL, @source OUT, @description OUT
       IF @hr = 0
         BEGIN
           SELECT @output = '  Source: ' + @source
           PRINT  @output
           SELECT @output = '  Description: ' + @description
           PRINT  @output
         END
       ELSE
         BEGIN
           PRINT '  sp_OAGetErrorInfo failed.'
           RETURN
         END
     END

-- Do some error handling after each step if you have to.
-- Clean up the objects created.
   EXEC @hr = sp_OADestroy @iMsg

GO

Não se esqueça de informar o seu servidor de SMTP na SP.

Agora volte em Management->SQL Server Agent->Jobs  e dê um duplo clique no Job desejado.

Na guia Steps clique em “New” e adicione o seguinte script:

declare @Body varchar(4000)
select @Body = 'Ocorreu um erro durante o BACKUP de DUMP no banco XXX'
exec sp_send_cdosysmail 'email@emaildeenvio.com.br','emaildestino@paraquemvaioemail.com.br','ERRO NO BACKUP DO SQL',@Body

As explicações sobre os scripts estão nos mesmos, substitua os emails de envio e de destino, não se esqueça das permissões na SP criada e de configurar o SMTP Server na mesma.
image

Clique no primeiro Step e na guia Advanced altere o parâmetro “On failure action” e especifique o Step criado para enviar email.
 image

Clique em ok e edite o segundo step (Compacta) e repita a operação

image
 

No step do EnviaEmail existe uma diferença:
image 

Se a ação tiver sucesso ela irá sair reportando falha, porque esse passo só será executado em caso de erro em algum passo anterior, dessa forma o job ficará em vermelho com status de falha.

image

E pronto, está aí um job de backup que compacta o arquivo e se algo der errado ainda te envia um email.

Por enquanto é só.





0 Comentários:

Postar um comentário

Related Posts with Thumbnails