Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como enviar e-mails do SQL Server (T-SQL)


O SQL Server fornece a capacidade de enviar emails por meio de sua solução Database Mail.

O ato real de enviar e-mail é feito com o sp_send_dbmail procedimento armazenado. Mas antes de começar a enviar emails do SQL Server, você precisa habilitar e configurar o Database Mail.

Você pode fazer isso com a GUI do SSMS ou com o T-SQL.

Este artigo demonstra como fazer isso com T-SQL. Ele assume que o Database Mail nunca foi habilitado em seu sistema e, portanto, passa pelas etapas envolvidas na habilitação.

Se preferir usar a GUI do SSMS, consulte Como configurar o Database Mail no SQL Server (SSMS).

Etapa 1:ativar XPs do Database Mail


A primeira coisa que você precisa fazer antes de enviar qualquer email do SQL Server é habilitar os procedimentos armazenados estendidos do Database Mail (Database Mail XPs). Eles estão no msdb banco de dados do sistema.

Isso também requer que “mostrar opções avançadas” esteja ativado.

Estes são desabilitados por padrão. Portanto, se você nunca usou o Database Mail em seu sistema antes, precisará habilitá-los.

Veja como habilitar opções avançadas e os XPs do Database Mail:
EXEC sp_configure 'show advanced options', '1';
RECONFIGURE
GO
EXEC sp_configure 'Database Mail XPs', 1;
RECONFIGURE
GO

Não há necessidade de reiniciar o SQL Server. Os XPs do Database Mail agora devem estar disponíveis para uso.

A Microsoft realmente recomenda que opções avançadas como essa sejam alteradas apenas por um administrador de banco de dados experiente ou técnico certificado do SQL Server, mas para os fins deste artigo, vou assumir que você é um administrador de banco de dados experiente que está atualizando sua memória 😉

De qualquer forma, para executar sp_configure com ambos os parâmetros para alterar uma opção de configuração ou para executar o RECONFIGURE declaração, você deve receber o ALTER SETTINGS permissão de nível de servidor. As ALTER SETTINGS permissão é detida implicitamente pelo sysadmin e administrador do servidor funções de servidor fixas.

Etapa 2:crie uma conta e perfil de e-mail


O Database Mail é enviado por meio de um perfil, em vez de uma conta de usuário diretamente.

Para enviar e-mail com o Database Mail, você precisa criar uma conta do Database Mail, um perfil do Database Mail, adicionar a conta ao perfil e conceder a um usuário acesso a esse perfil. O usuário precisa estar no msdb base de dados.

O código T-SQL para fazer isso pode ser algo assim:
-- Switch to the msdb database
USE msdb;

-- Create a user on the msdb database
CREATE USER Marge FOR LOGIN Marge;

-- Create a Database Mail account  
EXECUTE msdb.dbo.sysmail_add_account_sp  
    @account_name = 'DB Admin',  
    @description = 'Mail account for admin emails.',  
    @email_address = '[email protected]',  
    @replyto_address = '[email protected]',  
    @display_name = 'DB Automated Mailer',  
    @mailserver_name = 'smtp.example.com',
    @port = 25;  
  
-- Create a Database Mail profile  
EXECUTE msdb.dbo.sysmail_add_profile_sp  
    @profile_name = 'DB Admin Profile',  
    @description = 'Profile for admin emails.';  
  
-- Add the account to the profile  
EXECUTE msdb.dbo.sysmail_add_profileaccount_sp  
    @profile_name = 'DB Admin Profile',  
    @account_name = 'DB Admin',  
    @sequence_number = 1;
  
-- Grant the msdb user access to the Database Mail profile
EXECUTE msdb.dbo.sysmail_add_principalprofile_sp
    @profile_name = 'DB Admin Profile',
    @principal_name = 'Marge',
    @is_default = 1;

Você precisará substituir os vários detalhes pelos seus. Isso também pressupõe que você especifique um servidor de correio que funcione e que use a porta correta.

Observe que eu já tinha um login chamado Marge no meu servidor. Aqui, criei um usuário no msdb banco de dados para esse login. Então, na última parte, concedi a esse usuário acesso ao perfil que acabei de criar.

Neste exemplo, criei uma conta do Database Mail e a adicionei ao perfil. Você pode adicionar várias contas a um perfil, se desejar. Isso pode ser útil como um failover ao enviar emails. Se a primeira conta falhar, ela tentará a próxima, e a próxima e assim por diante.

Depois de obter o código acima (com seus próprios detalhes), você poderá enviar e-mails.

Etapa 3:enviar e-mail


Como mencionado, o envio real de e-mail é feito com o sp_send_dbmail procedimento armazenado.

Aqui está um exemplo:
EXEC msdb.dbo.sp_send_dbmail  
    @profile_name = 'DB Admin Profile',  
    @recipients = '[email protected]',  
    @body = 'Your favorite SQL Server Agent job just failed',  
    @subject = 'SQL Server Agent Job: FAILED';

Este é um e-mail simples com o básico, como destinatário, linha de assunto, corpo do e-mail, etc.

Se você não especificar um perfil, o procedimento usará o perfil privado padrão para o usuário atual. Se não houver um perfil privado padrão para o usuário, ele usará o perfil público padrão para o msdb base de dados. Se não houver um perfil público padrão, você receberá um erro.

Mais opções


O sp_send_dbmail procedimento aceita alguns argumentos a mais do que eu usei neste exemplo.

Aqui está a sintaxe oficial para o sp_send_dbmail procedimento:
sp_send_dbmail [ [ @profile_name = ] 'profile_name' ]  
    [ , [ @recipients = ] 'recipients [ ; ...n ]' ]  
    [ , [ @copy_recipients = ] 'copy_recipient [ ; ...n ]' ]  
    [ , [ @blind_copy_recipients = ] 'blind_copy_recipient [ ; ...n ]' ]  
    [ , [ @from_address = ] 'from_address' ]  
    [ , [ @reply_to = ] 'reply_to' ]   
    [ , [ @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 ]   
    [ , [ @query_result_no_padding = ] @query_result_no_padding ]   
    [ , [ @mailitem_id = ] mailitem_id ] [ OUTPUT ]

Consulte a documentação da Microsoft para obter uma explicação detalhada de cada argumento.

Referência de correio do banco de dados


Consulte Tutoriais do Database Mail para obter uma lista abrangente de tutoriais do Database Mail. Isso pode ser uma ótima referência, pois cada tutorial trata de uma parte específica do Database Mail.