Enviar correo con SQL SERVER (sin SQLMail)

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.

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 

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.

Related Posts

Conexión a Sql Server con Php 5.6 linux CentOS 6

admin

March 28, 2016

PHP, SQL SERVER

No Comment

Para conectarse a Sql Server desde linux utilizamos este comando para instalar el driver: $ sudo yum install -y php-mssql Por ejemplo, para php5.6: $ sudo yum install -y php56w-mssql Esta instrucción instala freetds, una colección de librerias para conectarnos con Sql Server desde linux. Con esta librería no solo podemos conectarnos desde Php, sino […]

Read More

Scripts de creación de objetos en Sql Server

admin

March 28, 2016

SQL SERVER

No Comment

La manera correcta de crear scripts en Sql Server para la creación de objetos, como tablas, procedimientos almacenados, funciones, restricciones, etc., es la siguiente: Primero, verificar si existe el objeto existe. Si existe, eliminarlo. Posteriormente, crear el objeto. Posteriormente, repetir para los objetos que dependen del que acabamos de crear. **Importante** Establecer siempre la base […]

Read More

2 Comments

  • Jorge Ricardo on June 10, 2010

    gracias,,, muy buen aporte, me salvastes,,,mas q un agradecimiento un verdadero gesto de gratitud

  • LoboSoft on January 24, 2012

    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…

Leave a Reply

Your email address will not be published. Required fields are marked *

Busca en el blog aqui

Herramientas Útiles

Suscribete al blog

Recibe en tu correo las últimas publicaciones

Publicidad

Sígueme en Twitter