jueves, 8 de mayo de 2008

Enviar mail desde SQL Server

Este procedimiento permite enviar mail desde un Sql Server sin necesidad de utilizar sql mail o alguna rutina externa, y además permite hacerlo en un servidor SMTP con autenticación.

Espero les sea útil.

CREATE PROCEDURE [dbo].[sp_EnviarMail] (@De varchar(100) , @Para varchar(500) , @Titulo varchar(100)=" ", @Mensaje varchar(4000) =" ")
AS

Declare @Correo int
Declare @proc int
Declare @Dir varchar(500)
Declare @DirUse varchar(500)
declare @Usuario varchar(200)
declare @password varchar(100)

set @Usuario = 'cuentaOrigen@server.com.ar'
set @Password = 'la contraseña'

SET @Dir = 'Configuration.fields("'
SET @Dir = @Dir + 'http://schemas.microsoft.com/'
SET @Dir = @Dir + 'cdo/configuration/'

EXEC @proc = sp_OACreate 'CDO.Message', @Correo OUT

SET @DirUse = @Dir + 'sendusing").Value'

EXEC @proc = sp_OASetProperty @Correo, @DirUse,'2'

SET @DirUse = @Dir + 'smtpserver").Value'

EXEC @proc = sp_OASetProperty @Correo, @DirUse, 'smtp.server.com.ar'

SET @DirUse = @Dir + 'smtpserverport").Value'

EXEC @proc = sp_OASetProperty @Correo, @DirUse, '25'

SET @DirUse = @Dir + 'smtpauthenticate").Value'

EXEC @proc = sp_OASetProperty @Correo, @DirUse, '1'

SET @DirUse = @Dir + 'sendusername").Value'

EXEC @proc = sp_OASetProperty @Correo, @DirUse, @Usuario

SET @DirUse = @Dir + 'sendpassword").Value'

EXEC @proc = sp_OASetProperty @Correo, @DirUse, @Password

-- Con esto grabas la configuracion
EXEC @proc = sp_OAMethod @Correo, 'Configuration.Fields.Update', null

-- Metes los parametros
EXEC @proc = sp_OASetProperty @Correo, 'To', @Para
EXEC @proc = sp_OASetProperty @Correo, 'From', @De
EXEC @proc = sp_OASetProperty @Correo, 'Subject', @Titulo

-- Puedes usar 'HTMLBody' o 'Textbody', como lo necesites
EXEC @proc = sp_OASetProperty @Correo, 'HTMLBody', @Mensaje

-- Aqui mandas el mensaje
EXEC @proc = sp_OAMethod @Correo, 'Send', NULL

-- Por si hay error
IF ( @proc <> 0 )
BEGIN
-- Limpia el objeto
EXEC @proc = sp_OADestroy @Correo
RAISERROR('Error enviando correo',15,1)
RETURN
END
-- Limpia el objeto
EXEC @proc = sp_OADestroy @Correo
GO




Luego se deberá ejecutar

sp_configure 'show advanced options', 1

go

RECONFIGURE

GO

sp_configure 'Ole Automation Procedures', 1

RECONFIGURE

EXEC sp_configure 'xp_cmdshell', 1

GO
RECONFIGURE

No hay comentarios: