sql >> Base de Datos >  >> RDS >> Sqlserver

Habilitar correo de base de datos en SQL Server (T-SQL)

SQL Server tiene una opción de correo de base de datos que puede usar para enviar correo desde el servidor de la base de datos.

Por ejemplo, puede recibir notificaciones cuando los trabajos del Agente SQL Server terminen de ejecutarse o fallen, o cuando haya un error de alta gravedad, etc.

Cuando el correo electrónico de la base de datos no está configurado

En SQL Server, el correo se envía ejecutando sp_send_dbmail procedimiento almacenado en el msdb base de datos.

He aquí un ejemplo:

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';

Sin embargo, esto supone que SQL Server está configurado para enviar correo.

Si intenta enviar correo desde SQL Server, pero obtiene un error como el siguiente, significa que actualmente no tiene habilitado el correo de base de datos.

Msg 15281, Level 16, State 1, Procedure msdb.dbo.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', search for 'Database Mail XPs' in SQL Server Books Online.

Habilitar XP de correo de base de datos

Antes de comenzar a enviar correo desde el servidor, debe asegurarse de tener habilitados los XP de correo de base de datos.

Esto es bastante fácil de hacer (aunque, Microsoft recomienda que las opciones avanzadas como esta solo las cambie un administrador de base de datos experimentado o un técnico certificado de SQL Server).

A continuación se explica cómo habilitar las XP de correo de base de datos:

EXEC sp_configure 'show advanced options', '1';
RECONFIGURE
GO
EXEC sp_configure 'Database Mail XPs', 1;
RECONFIGURE
GO

Resultado:

Configuration option 'show advanced options' changed from 0 to 1. Run the RECONFIGURE statement to install.
Commands completed successfully.
Commands completed successfully.

Crear una cuenta de correo, perfil, etc

El correo de la base de datos se envía a través de un perfil, en lugar de una cuenta de usuario directamente.

Para enviar correo electrónico con el Correo electrónico de base de datos, debe crear una cuenta de Correo electrónico de base de datos, un perfil de Correo electrónico de base de datos, agregar la cuenta al perfil y luego otorgar acceso a un usuario a ese perfil. El usuario debe estar en msdb base de datos.

El código T-SQL para hacer esto podría verse así:

-- 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;

Deberá reemplazar los diversos detalles con los suyos propios. Esto también supone que especifica un servidor de correo que funciona.

Una vez que haya hecho eso, debería poder enviar correo con msdb.dbo.sp_send_dbmail procedimiento almacenado.