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

Cómo enviar correos electrónicos desde SQL Server (T-SQL)

SQL Server brinda la capacidad de enviar correos electrónicos a través de su solución de correo de base de datos.

El acto real de enviar correo se realiza con el sp_send_dbmail procedimiento almacenado. Pero antes de comenzar a enviar correos electrónicos desde SQL Server, debe habilitar y configurar el correo electrónico de la base de datos.

Puede hacerlo con la GUI de SSMS o con T-SQL.

Este artículo demuestra cómo hacerlo con T-SQL. Supone que el Correo electrónico de base de datos nunca se ha habilitado en su sistema y, por lo tanto, realiza los pasos necesarios para habilitarlo.

Si prefiere utilizar la GUI de SSMS, consulte Cómo configurar el correo electrónico de la base de datos en SQL Server (SSMS).

Paso 1:habilitar XP de correo de base de datos

Lo primero que debe hacer antes de enviar cualquier correo desde SQL Server es habilitar los procedimientos almacenados extendidos de Database Mail (Database Mail XP). Estos están en el msdb base de datos del sistema.

Esto también requiere que "mostrar opciones avanzadas" esté habilitado.

Estos están deshabilitados por defecto. Por lo tanto, si nunca antes ha utilizado el Correo electrónico de base de datos en su sistema, deberá habilitarlos.

A continuación se explica cómo habilitar las opciones avanzadas y los 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

No es necesario reiniciar SQL Server. Los XP de correo de base de datos ahora deberían estar disponibles para su uso.

Microsoft recomienda que las opciones avanzadas como esta solo las cambie un administrador de base de datos con experiencia o un técnico certificado de SQL Server, pero para el propósito de este artículo, supondré que es un administrador de base de datos con experiencia que está refrescando su memoria 😉

En cualquier caso, para ejecutar sp_configure con ambos parámetros para cambiar una opción de configuración o para ejecutar RECONFIGURE declaración, se le debe otorgar el ALTER SETTINGS permiso a nivel de servidor. El ALTER SETTINGS el permiso está implícitamente en manos del sysadmin y administrador del servidor roles de servidor fijos.

Paso 2:Cree una cuenta de correo y un perfil

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 y que utiliza el puerto correcto.

Tenga en cuenta que ya tenía un inicio de sesión llamado Marge en mi servidor. Aquí, creé un usuario en msdb base de datos para ese inicio de sesión. Luego, en la última parte, le concedí a ese usuario acceso al perfil que acabo de crear.

En este ejemplo, creé una cuenta de correo de base de datos y la agregué al perfil. Puede agregar varias cuentas a un perfil si lo desea. Esto puede ser útil como conmutación por error al enviar correo. Si falla la primera cuenta, se intentará con la siguiente, y con la siguiente, y así sucesivamente.

Una vez que tenga el código anterior (con sus propios datos), debería poder enviar correo.

Paso 3:Enviar correo

Como se mencionó, el envío real de correo se realiza con el sp_send_dbmail procedimiento almacenado.

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

Este es un correo electrónico simple con los elementos básicos, como el destinatario, el asunto, el cuerpo del correo electrónico, etc.

Si no especifica un perfil, el procedimiento utilizará el perfil privado predeterminado para el usuario actual. Si no hay un perfil privado predeterminado para el usuario, utilizará el perfil público predeterminado para msdb base de datos. Si no hay un perfil público predeterminado, obtendrá un error.

Más opciones

El sp_send_dbmail El procedimiento acepta bastantes argumentos más que los que he usado en este ejemplo.

Esta es la sintaxis oficial para sp_send_dbmail procedimiento:

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 la documentación de Microsoft para obtener una explicación detallada de cada argumento.

Referencia de correo de la base de datos

Consulte Tutoriales de correo electrónico de base de datos para obtener una lista completa de tutoriales de correo electrónico de base de datos. Esto puede ser una gran referencia, porque cada tutorial trata sobre una parte específica de Correo electrónico de base de datos.