Enviar correos a través de T-SQL en SQL Server

Hola a todos. Hoy vamos a enseñaros como enviar correos a través de Transact-SQL (T-SQL). Como en entradas anteriores donde se muestra la configuración de la Database Mail en SQL Server a través del entorno gráfico. Utilizando el envío de correo a través de T-SQL podemos introducir el envío en un script de forma automática tras realizar una acción. De esta manera mostramos dos formas de enviar correos en SQL Server.

Configuración de la cuenta

Para crear un nuevo perfil de correo de base de datos el cual en nuestro caso denominaremos “Test”, utilizaremos el procedimiento almacenado “sysmail_add_profile_sp” y el siguiente código:

EXECUTE msdb.dbo.sysmail_add_profile_sp  
    @profile_name = 'Test',  
    @description = 'Perfil de pruebas.' ;  
GO

A continuación, vamos a crear una nueva cuenta de correo de base de datos SMTP. Para ello usaremos el procedimiento almacenado “sysmail_add_account_sp” y el siguiente código:

EXECUTE msdb.dbo.sysmail_add_account_sp  
    @account_name = 'Email_Test',  
    @description = 'Cuenta de pruebas.',  
    @email_address = 'test@gmail.com',  
    @display_name = 'Encabezado',  
    @mailserver_name = 'smtp.gmail.com',
    @port = 465,
    @enable_ssl = 1,
    @username = 'test@gmail.com',
    @password = 'test.1234' ;  
GO

Ahora asociamos el perfil de correo de base de datos a la cuenta anteriormente creada con el procedimiento “sysmail_add_profileaccount_sp ” y el siguiente código:

EXECUTE msdb.dbo.sysmail_add_profileaccount_sp  
    @profile_name = 'Test',  
    @account_name = 'Email_Test',  
    @sequence_number =1 ;  
GO

En caso de necesitar o querer eliminar las configuraciones anteriores podemos ejecutar las siguientes queries:

EXECUTE msdb.dbo.sysmail_delete_profileaccount_sp @profile_name = 'Test'
EXECUTE msdb.dbo.sysmail_delete_account_sp @account_name = 'Email_Test'
EXECUTE msdb.dbo.sysmail_delete_profile_sp @profile_name = 'Test'

Probamos a enviar correos

Podemos utilizar este tipo de código para monitorización de procesos o para alertas. Por ejemplo podemos ejecutar el siguiente script para enviar correos a través de T-SQL en SQL Server de prueba:

      -- Envía el correo electrónico
        EXEC msdb.dbo.sp_send_dbmail
            @profile_name = 'Test', 
            @recipients = 'test2@gmail.com',
            @subject = 'Correo_Prueba',
            @body = 'Es un correo de prueba';

Podemos comprobar nuestra cuenta a través de la siguiente query alojada en la tabla de sistema «msdb»:

SELECT [sysmail_server].[account_id],
       [sysmail_account].[name] AS [Account Name],
       [servertype],
       [servername] AS [SMTP Server Address],
       [Port]
FROM [msdb].[dbo].[sysmail_server]
     INNER JOIN [msdb].[dbo].[sysmail_account] ON [sysmail_server].[account_id] = [sysmail_account].[account_id];

El resultado que nos muestra es el nombre de la cuenta, el tipo de servidor que es, nuestra dirección de SMTP y el puerto que utiliza.

Enviar correos

Con la siguiente query podemos ver el «mailitem_id» por si necesitamos rastrear dicho envío, el id del perfil que se ha utilizado, el destinatario, si tiene destinatarios en copia y copia oculta y que direcciones son, el encabezado y el body, el tipo de formato, la importancia que le hemos dado al correo, si lleva adjunto o no, la fecha de envío y recepción, si el correo ha sido enviado o denegado o está pendiente. La siguiente tabla en muy útil a la hora de enviar correos SQL Sever porque puedes obtener mucha información de cada envío.

SELECT * FROM [msdb].[dbo].sysmail_allitems;

Si no sabes o no logras configurar el sistema de correo o tienes problemas para el envío y recepción de estos . No dudes en ponerte en contacto con nosotros sin compromiso.

Esperamos que os haya sido útil. Si no quieres perderte estas entradas, suscríbete a nuestra newsletter mensual. Estarás informado de nuestras publicaciones con un solo email al mes.

¿Aún no conoces Query Performance? Descubre cómo puede ayudarte en tu entorno Oracle. Más información en su página de LinkedIn.

Sígue a GPS en LinkedIn

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *