Thiago Zavaschi R2 www.zavaschi.com

1Jun/090

Repostagem – Database Mail – Configuração Através de Scripts

DatabaseMail – Configuração através de scripts

Postei um tempo atrás um artigo sobre o DatabaseMail (aqui), mas era através dos menus de configuração. Hoje trago para vocês a realização da mesma tarefa, só que através de scripts.

Configurando o DatabaseMail

-- Cria uma account do Database Mail
EXECUTE msdb.dbo.sysmail_add_account_sp
    @account_name = 'SQL',
    @description = 'Conta de email para o envio do
    email na rotina de log de erro.', -- Uma descrição para a sua account
    @email_address = 'sql@zavaschi.com', -- Email que será 
    -- mostrado como o emissor
    @replyto_address = 'sql@zavaschi.com', -- Email de reply
    @display_name = 'SQL Server', -- Nome mostrado no email enviado
    @mailserver_name = 'smtp.zavaschi.com', -- Servidor smtp
    @port = 25, -- Porta
    @username = 'sql', -- Login do servidor de smtp
    @password = 'sql'; -- senha do servidor de smtp 

-- Cria um profile do Database Mail
EXECUTE msdb.dbo.sysmail_add_profile_sp
    @profile_name = 'SQL Profile',
    @description = 'Profile usado para o
    envio do email na rotina de log de erro.' ;
    -- Cria o profile 

-- Adiciona a account ao profile
EXECUTE msdb.dbo.sysmail_add_profileaccount_sp
    @profile_name = 'SQL Profile',
    @account_name = 'SQL',
    @sequence_number =1 ; -- Associa a account ao profile, recém criados. 

-- Garante acesso ao profile a todos os usuarios da base msdb
EXECUTE msdb.dbo.sysmail_add_principalprofile_sp
    @profile_name = 'SQL Profile',
    @principal_name = 'public',
    @is_default = 1; -- Configura o profile criado como público e padrão. 

 

Pronto, só isso. E agora para enviar email é da mesma maneira:

EXEC msdb.dbo.sp_send_dbmail @profile_name='SQL Profile',
@recipients='sql@zavaschi.com',
@subject='Titulo',
@body='Corpo da mensagem.'

 

Tranquilo né? Mas se ao executar a procedure de envio de email você obter o seguinte erro:

Msg 15281, Level 16, State 1, Procedure sp_send_dbmail, Line 0

SQL Server blocked access to procedure 'dbo.sp_send_dbmail' of component 'Database Mail XPs' because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of 'Database Mail XPs' by using sp_configure. For more information about enabling 'Database Mail XPs', see "Surface Area Configuration" in SQL Server Books Online.

É pelo fato do DatabaseMail estar desabilitado no seu SQL Server, então rode o seguinte script:

sp_configure 'Database Mail XPs', 1
GO
RECONFIGURE 

Há alguns casos que não é possível executar o RECONFIGURE diretamente (sem entrar nos méritos)

Executar então: RECONFIGURE WITH OVERRIDE

Espero que seja útil para você, acredito que sim, pois muitos me pedem!

Grande abraço!

Thiago Zavaschi

1Jun/091

Repostagem – Tutorial: Configurando o Database Mail

Então pessoal, sei que prometi o artigo de PowerPivot, mas estou finalizando-o ainda. Enquanto isso farei a repostagem de alguns posts do antigo blog que não vieram no processo de importação (não serão muitos).

Tutorial: Configurando o DatabaseMail

O Database Mail é a evolução do SQL Mail (método marcado como obsoleto e fadado a ser removido do SQL Server em uma próxima versão) com melhorias. Se você por alguma razão utiliza o SQLMail com o SQL Server 2005 ou 2008, considere a mudança imediata.

O objetivo deste artigo é mostrar o wizard de configuração do DatabaseMail e demonstrar como enviar emails através do T-SQL, além de como verificar o status dos emails enviados.

A base deste tutorial é o novo SQL Server 2008, porém os passos são muito similares no SQL Server 2005.

Configurando o Database Mail

Abra a instância desejada, abra a janela Object Explorer, abra a pasta Management e clique duas vezes no “Database Mail” para abrir a seguinte janela:

Iniciaomente somos deparados com a tela de boas vindas do wizard de configuração. Não há muito oq ue fazer aqui, podemos marcar para não ser exibida novamente e clicar em Next para prosseguir.

Marque a opção “Set up Database Mail by performing the following tasks:” e clique em next.

Caso o Database Mail não esteja habilitado você será indagado a habilitá-lo. Clique em Yes para ativar.

Dê um nome e uma descrição a conta. Após isto clique em “Add”.

Configure os dados pedidos: Nome, descrição, endereço de email, servidor smtp, e assim por diante. Clique em Ok quando terminar.

Clique em next para prosseguir.

Aqui estou tornando essa configuração pública (marcando a checkbox “public”) e tornando o perfil padrão.

Agora é a hora de configurar alguns parâmetros de sistema, como por exemplo, a extensão de arquivos que não podem ser enviados ao utilizar o database mail.
Após configurar como desejar, clique em next.

Clique em finish para encerrar o wizard e terminar de configurar a sua conta.

Esta tela mostra o progresso da configuração. Repare na coluna status, pois ela fornece a informação de se a tarefa foi bem sucedida ou não. Clique em close para encerrar.

Enviando emails

Para enviar emails através do DatabaseMail é bastante simples.

É necessário primeiramente executar a seguinte configuração para garantir que não haverá problemas:

sp_configure 'show advanced', 1
GO
RECONFIGURE
GO
sp_configure 'Database Mail XPs', 1
GO
RECONFIGURE
GO

Na sequência podemos utilizar a stored procedure de sistema denominada: sp_send_dbmail, cuja sintaxe é mostrada a seguir (para mais detalhes consulte o books online):

sp_send_dbmail [ [ @profile_name = ] 'profile_name' ]
    [ , [ @recipients = ] 'recipients [ ; ...n ]' ]
    [ , [ @copy_recipients = ] 'copy_recipient [ ; ...n ]' ]
    [ , [ @blind_copy_recipients = ] 'blind_copy_recipient [ ; ...n ]' ]
    [ , [ @subject = ] 'subject' ]
    [ , [ @body = ] 'body' ]
    [ , [ @body_format = ] 'body_format' ]
    [ , [ @importance = ] 'importance' ]
    [ , [ @sensitivity = ] 'sensitivity' ]
    [ , [ @file_attachments = ] 'attachment [ ; ...n ]' ]
    [ , [ @query = ] 'query' ]
    [ , [ @execute_query_database = ] 'execute_query_database' ]
    [ , [ @attach_query_result_as_file = ] attach_query_result_as_file ]
    [ , [ @query_attachment_filename = ] query_attachment_filename ]
    [ , [ @query_result_header = ] query_result_header ]
    [ , [ @query_result_width = ] query_result_width ]
    [ , [ @query_result_separator = ] 'query_result_separator' ]
    [ , [ @exclude_query_output = ] exclude_query_output ]
    [ , [ @append_query_error = ] append_query_error ]
    [ , [ @query_no_truncate = ] query_no_truncate ]
    [ , [ @mailitem_id = ] mailitem_id ] [ OUTPUT ]
Segue um exemplo prático de envio de email:

USE msdb

GO

EXEC sp_send_dbmail @profile_name='Zavaschi', -– Coloque o profile desejado.

@recipients='thiagoh@techresult.com.br', – Coloque os receptores da mensagem.

@subject='Título da Mensagem',

@body='Corpo da mensagem.

E-mail recebido através do database mail do SQL Server!!!!'

Note que o envio não é disparado necessariamente na hora, ele é posto numa fila e o envio dependerá das condições da rede e de conectividade.

Podemos analisar as mensagens e o status do envio das mesmas, através dos seguintes comandos de seleção:

SELECT * FROM sysmail_mailitems

GO

SELECT * FROM sysmail_log

GO

É isso, abraços pessoal!

Thiago Zavaschi