Monday, May 22, 2006

Enviar email en sqlserver a travez de un Stored Procedure

No tiene nada que ver ni con java ni con opensource, pero me parecio interesante publicar este stored procedure para enviar mail desde un qry u otro stored procedure en la base, esto es en SQL SERVER.

CREATE PROCEDURE sp_SMTPemail
(
@From as nvarchar(50),
@To as nvarchar(50),
@Subject as nvarchar(255),
@Body as text
)

AS

-- Declare
DECLARE @message int
DECLARE @config int
DECLARE @hr int
DECLARE @src varchar(255), @desc varchar(255)

EXEC @hr = sp_OACreate 'CDO.Message', @message OUT -- create the message object
EXEC @hr = sp_OACreate 'CDO.Configuration', @config OUT -- create the configuration object

-- Configuration Object
EXEC @hr = sp_OASetProperty @config, 'Fields(cdoSendUsingMethod)', 'cdoSendUsingPort' -- Send the message using the network
EXEC @hr = sp_OASetProperty @config, 'Fields(cdoSMTPServer)', 'your.server.com' -- SMTP Server
EXEC @hr = sp_OASetProperty @config, 'Fields(cdoSMTPServerPort)', 25 -- Server SMTP Port
EXEC @hr = sp_OASetProperty @config, 'Fields(cdoSMTPAuthenticate)', 'cdoAnonymous' -- Anonymous SMTP Authenticate
EXEC sp_OAMethod @config, 'Fields.Update'

-- Message Object
EXEC @hr = sp_OASetProperty @message, 'Configuration', @config -- set message.configuration = config
EXEC @hr = sp_OASetProperty @message, 'To', @To
EXEC @hr = sp_OASetProperty @message, 'From', @From
EXEC @hr = sp_OASetProperty @message, 'Subject', @Subject
EXEC @hr = sp_OASetProperty @message, 'TextBody', @Body
EXEC sp_OAMethod @message, 'Send()'

-- Destroys the objects
EXEC @hr = sp_OADestroy @message
EXEC @hr = sp_OADestroy @config

-- Errorhandler
IF @hr <> 0
BEGIN
EXEC sp_OAGetErrorInfo @message, @src OUT, @desc OUT
SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
RETURN
END

GO

Y para ejecutarlo

EXEC sp_SMTPemail 'from@example.email.com', 'to@example.email.com', 'Subjecttext','Messagetext'

7 comments:

Anonymous said...

Muy bueno!

El Bruno said...

vos te das una idea d lo peligroso q puede llegar a ser estas lineas de codigo en las manos inadecuadas !!! ????

:D

Julian de Anquin said...

Y si...pero bueno, uno se debe a su publico.
jeje

Ro said...

Genial! Justo lo que necesitaba!!! Muchas gracias:D

PD: tranquilos, yo tengo manos adecuadas

Fideo said...

Perdón pero no entendí porque es peligroso este stored procedure en manos inadecuadas.
¿Y los permisos?, no debería haber un Admin atras de cada SQL Server.

Felix Fermin said...

buenas tengo un problema con el codigo que ha facilitado, a parte de cambiar el server del correo que mas hay que cambiar por que lo estoy correo local no me da errores pero no me envia nada que podra ser???

Unknown said...

Esta tarde me puse y al final lo saqué, os dejo el link con el paquete compilado en .jar para que lo ejecuteis y tambien os dejo el codigo en un archivo de tecto.

Yo trabajo con linux, alomejor si abrís el archivo de texto en windows no se ve bien.

http://www.gigasize.com/get.php?d=mtb8o8zf2xc
Un saludo.