Enviar correos desde SQL SERVER 2000 sin utilizar SQLMail es posible. Se logra utilizando CDONTS.
Lo que tenemos que hacer, es crear un objeto CDO.Message, confirgurar las propiedades tal y como lo haríamos si lo fueramos a utilizar desde una página ASP y enviar el mensaje. El siguiente codigo fuente comentarizado detalla el proceso de configuración y envío.
*** Nota: Tenemos la limitante de CDONTS, máximo 4000 caracteres en el mensaje.
[SQL]
CREATE PROCEDURE Usp_enviarcorreo (@De VARCHAR(100),
@Para VARCHAR(100),
@Titulo VARCHAR(100),
@Mensaje VARCHAR(4000),
@TipoMensaje VARCHAR(50)
— ‘HTMLBody’ ó ‘TextBody’
)
AS
DECLARE @ObjMensaje INT,
@RC INT,
@Fuente VARCHAR(255),
@Descripcion VARCHAR(500),
@MsjSalida VARCHAR(1000),
@Servidor VARCHAR(100),
@Puerto VARCHAR(10),
@Autenticar CHAR(1),
@Usuario VARCHAR(100),
@Password VARCHAR(100)
— Aqui ahi que cambiar los valores por los reales de la cuenta a usar
SET @Autenticar = ‘1’ — Manda a autentificarse con una cuenta y password
SET @Servidor = ‘TuServidor’ — Nombre de host o IP
SET @Usuario = ‘TuUsuario’
— Nombre de usuario, en los servidores POP puede ser la direccion de correo completa
SET @Password = ‘TuPassword’– Password de la cuenta de correo
SET @Puerto = ‘TuPuerto’
— Puerto de correo, normalmente es el 25, aunque esto puede cambiar dependiendo del ISP
— Crear el objeto CDO.Message
EXEC @RC = Sp_oacreate
‘CDO.Message’,
@ObjMensaje out
— Configurar el SMTP remoto
EXEC @RC = Sp_oasetproperty
@ObjMensaje,
‘Configuration.fields(“http://schemas.microsoft.com/cdo/configuration/sendusing”).Value’
,
‘2’
— Set: Servidor
EXEC @RC = Sp_oasetproperty
@ObjMensaje,
‘Configuration.fields(“http://schemas.microsoft.com/cdo/configuration/smtpserver”).Value’
,
@Servidor
— Set: Puerto
EXEC @RC = Sp_oasetproperty
@ObjMensaje,
‘Configuration.fields(“http://schemas.microsoft.com/cdo/configuration/smtpserverport”).Value’
,
@Puerto
— Set: Autenticacion
EXEC @RC = Sp_oasetproperty
@ObjMensaje,
‘Configuration.fields(“http://schemas.microsoft.com/cdo/configuration/smtpauthenticate”).Value’
,
@Autenticar
— Set: Usuario
EXEC @RC = Sp_oasetproperty
@ObjMensaje,
‘Configuration.fields(“http://schemas.microsoft.com/cdo/configuration/sendusername”).Value’
,
@Usuario
— Set: Password
EXEC @RC = Sp_oasetproperty
@ObjMensaje,
‘Configuration.fields(“http://schemas.microsoft.com/cdo/configuration/sendpassword”).Value’
,
@Password
— Guardar cambios
EXEC @RC = Sp_oamethod
@ObjMensaje,
‘Configuration.Fields.Update’,
NULL
— Parametros del correo:
— Para:
EXEC @RC = Sp_oasetproperty
@ObjMensaje,
‘To’,
@Para
— De:
EXEC @RC = Sp_oasetproperty
@ObjMensaje,
‘From’,
@De
— Titulo:
EXEC @RC = Sp_oasetproperty
@ObjMensaje,
‘Subject’,
@Titulo
— Tipo de mensaje y mensaje:
EXEC @RC = Sp_oasetproperty
@ObjMensaje,
@TipoMensaje,
@Mensaje
— Enviar el correo:
EXEC @RC = Sp_oamethod
@ObjMensaje,
‘Send’,
NULL
— Obtener el mensaje de salida, tanto por éxito como por error.
IF ( @RC = 0 )
BEGIN
EXEC @RC = Sp_oageterrorinfo
NULL,
@Fuente out,
@Descripcion out
IF ( @RC = 0 )
BEGIN
SET @MsjSalida = ‘Error enviando el mensaje, Fuente:’
+ @Fuente + ‘, Descripcion: ‘ + @Descripcion
END
ELSE
BEGIN
SET @MsjSalida =
‘Error enviando el mensaje. Error obteniendo información de la falla’
END
END
ELSE
BEGIN
SET @MsjSalida = ‘Envío realizado’
END
— Limpiar el objeto
EXEC @RC = Sp_oadestroy
@ObjMensaje
— Mostrar el mensaje
SELECT @MsjSalida
go
[/SQL]
No debes olvidar cambiar los valores de servidor, usuarios, password y puerto por los de la cuenta que desees usar. Nos leemos en la próxima entrega. Happy Mailing.
gracias,,, muy buen aporte, me salvastes,,,mas q un agradecimiento un verdadero gesto de gratitud
Muchas gracias, muy bueno el aporte, solo tengo una duda, el correo me lo envia, pero estoy buscando la forma que en lugar de un mensaje escrito sea el resultado de una consulta, es decir tengo un query que me devuelve “n” registros y quiero mandar ese resultado de la consulta como mensaje. Al realizarlo envia el mensaje pero llega el mensaje con texto “0”.
Alguna observación al respecto..
Gracias…