Utilidades SQL - Enviar email mediante CORREO ELECTRÓNICO DE BASE DE DATOS

Creado por David Miralpeix, Modificado el Fri, 16 Feb 2024 a las 12:26 PM por David Miralpeix

Configuración cuenta de correo mediante SQL.
https://technet.microsoft.com/es-es/library/ms191207(v=sql.105).aspx
ó
http://geeks.ms/blogs/rcarreras/archive/2009/09/16/configurando-sql-server-2008-para-enviar-emails-paso-a-paso.aspx

A continuación:

Cuando queremos enviar un email de base de datos (mediante triggers, storeds, etc.) nos encontramos con el problema de permisos. Ya que para enviar un email, se debe llamar a una stored definida en la base de datos msdb.
sp_send_dbmail

Si usamos esta instrucción en nuestra base de datos de cliente, al loguearnos con un usuario que no es administrador, (por ejemplo el usuario “ahora” del ERP) no funciona porque da error de permisos.
Una posible solución es crearnos una stored en la base de datos msdb y darle permisos “public”.


Código SQL:

USE msdb
GO
Create PROCEDURE [dbo].[_TestSendMail]
(
     @To NVARCHAR(1000),
     @Subject NVARCHAR(100),
     @Body NVARCHAR(MAX)
)
--1. No necesita WITH EXECUTE AS dbo--OWNER
AS 
     BEGIN
           EXEC dbo.sp_send_dbmail @profile_name = N'miperfildecorreo’,
          @recipients = @To, @subject = @Subject, @body = @Body
     END
go
           GRANT EXECUTE ON OBJECT::_TestSendMail TO public
go


De esta manera, puede ser llamada desde cualquier base de datos del servidor y con cualquier usuario.

NOTA: Para los que usáis xp_sendmail
Esta característica se quitará en una versión futura de Microsoft SQL Server. Evite utilizar esta característica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan. Para enviar correo desde SQL Server, utilice Correo electrónico de base de datos.


Código SQL:

--1- Crear la stored y asignarle permisos

USE msdb
GO
Create PROCEDURE [dbo].[_TestSendMail]
(
     @To NVARCHAR(1000),
     @Subject NVARCHAR(100),
     @Body NVARCHAR(MAX)
)
--1. No necesita WITH EXECUTE AS dbo--OWNER
AS
      BEGIN
           EXEC dbo.sp_send_dbmail @profile_name = N'miperfildecorreo’,
          @recipients = @To, @subject = @Subject, @body = @Body
     END
go
GRANT EXECUTE ON OBJECT::_TestSendMail TO public
go


--2- Asignar permisos al perfil de la cuenta de correo de base de datos.

EXECUTE msdb.dbo.sysmail_add_principalprofile_sp
         @principal_name = 'public',
         @profile_name = 'miperfildecorreo',
         @is_default = 1 ;


--3- Llamar a la stored

use MIBD
go
exec msdb.dbo._TestSendMail 'mimail@midominio.es','Asunto','Contenido'
go


¿Le ha sido útil este artículo?

¡Qué bien!

Gracias por sus comentarios

¡Sentimos mucho no haber sido de ayuda!

Gracias por sus comentarios

¡Háganos saber cómo podemos mejorar este artículo!

Seleccione al menos una de las razones
Se requiere la verificación del CAPTCHA.

Sus comentarios se han enviado

Agradecemos su esfuerzo e intentaremos corregir el artículo