Enviar email no SQL Server usando o CDONTS com T-SQL

 

Extraído do site: www.codigofonte.com.br

Quem geralmente utiliza o SQL Server para armazenar as regras de negócios de um sistema/site, utiliza bastante o recurso de Procedures Armazenadas (Stored Procedures) usando como linguagem o T-SQL.

Provavelmente em algum momento será necessário enviar e-mail utilizando as próprias procedures. Uma das soluções é instanciar o componente CDONTS para realizar esta tarefa.

Este código foi desenvolvido em T-SQL que cria uma procedure que utiliza o CDONTS.dll para o envio de email.

A procedure não verifica se os endereços de emails passados são válidos, os parametros estão todos comentados no código.

Aviso: É necessário que no servidor do SQL Server tenha instalado o componente CDONTS.

Veja o código abaixo:

 

/*   

    PROCEDURE QUE ENVIA UM EMAIL ATRAVÉS DO COMPONENTE CDONTS.DLL   

    PARAMETROS:  

        @FROM_ADDRESS       - ENDEREÇO DE EMAIL FROM 

        @TO_ADDRESS         - ENDEREÇOS DE EMAILS TO (SEPARADOS POR ;)  

        @CC_ADDRESS         - ENDEREÇOS DE EMAILS CC (CÓPIA CARBONO) (SEPARADOS POR ;)  

        @BCC_ADDRESS        - ENDEREÇOS DE EMAILS BCC (CÓPIA CARBONO OCULTA) (SEPARADOS POR ;)  

        @ASSUNTO_EMAIL      - ASSUNTO DO EMAIL  

        @MENSAGEM_EMAIL     - CORPO DO EMAIL (MENSAGEM)  

        @TIPO_EMAIL         - TIPO DA MENSAGEM (TEXTO=1 OU HTML=0), O DEFAULT É HTML  

*/  

CREATE PROCEDURE SP_ENVIA_EMAIL  

    @FROM_ADDRESS VARCHAR(100),  

    @TO_ADDRESS VARCHAR(1000),  

    @CC_ADDRESS VARCHAR(1000) = '',  

    @BCC_ADDRESS VARCHAR(1000) = '',  

    @ASSUNTO_EMAIL VARCHAR(200) = '',  

    @MENSAGEM_EMAIL TEXT = '',  

    @TIPO_EMAIL INT = 0  

AS      

 

SET NOCOUNT ON 

 

    DECLARE @OMAIL        INT -- OBJETO CDONTS  

    DECLARE @RESULTADO    INT -- RESULTADO DAS CHAMADAS DO OBJETO  

 

    -- CORRIGINDO OS ENDEREÇOS DE EMAILS   

    SET @FROM_ADDRESS = REPLACE(@FROM_ADDRESS, ' ', '')  

    SET @FROM_ADDRESS = REPLACE(@FROM_ADDRESS, ';', ',')  

      

    SET @TO_ADDRESS = REPLACE(@TO_ADDRESS, ' ', '')  

    SET @TO_ADDRESS = REPLACE(@TO_ADDRESS, ';', ',')  

      

    SET @CC_ADDRESS = REPLACE(@CC_ADDRESS, ' ', '')  

    SET @CC_ADDRESS = REPLACE(@CC_ADDRESS, ';', ',')  

      

    SET @BCC_ADDRESS = REPLACE(@BCC_ADDRESS, ' ', '')  

    SET @BCC_ADDRESS = REPLACE(@BCC_ADDRESS, ';', ',')  

      

    EXEC @RESULTADO = SP_OACREATE 'CDONTS.NEWMAIL', @OMAIL OUT -- INSTANCIANDO O OBJETO CDONTS  

 

    IF @RESULTADO = 0 -- VERIFICANDO SE FOI POSSÍVEL CRIAR O OBJETO  

    BEGIN   

        EXEC @RESULTADO = SP_OASETPROPERTY @OMAIL, 'FROM'    , @FROM_ADDRESS -- ENDEREÇO DE EMAIL FROM  

 

        EXEC @RESULTADO = SP_OASETPROPERTY @OMAIL, 'TO'        ,    @TO_ADDRESS    -- ENDEREÇO DE EMAIL TO  

          

        -- VERIFICANDO SE O ENDEREÇO CC NÃO ESTÁ VAZIO  

        IF @CC_ADDRESS <> '' 

        BEGIN 

            EXEC @RESULTADO = SP_OASETPROPERTY @OMAIL, 'CC',  @CC_ADDRESS    -- ENDEREÇO DE EMAIL CC  

        END 

              

        -- VERIFICANDO SE O ENDEREÇO BCC NÃO ESTÁ VAZIO  

        IF @BCC_ADDRESS <> '' 

        BEGIN 

            EXEC @RESULTADO = SP_OASETPROPERTY @OMAIL, 'BCC',  @BCC_ADDRESS    -- ENDEREÇO DE EMAIL BCC  

        END 

 

        EXEC @RESULTADO = SP_OASETPROPERTY @OMAIL, 'SUBJECT', @ASSUNTO_EMAIL    -- ASSUNTO  

          

        EXEC @RESULTADO = SP_OASETPROPERTY @OMAIL, 'BODY', @MENSAGEM_EMAIL    -- CORPO DO EMAIL  

          

        -- TIPO DE EMAIL (TEXTO/HTML)  

        EXEC @RESULTADO = SP_OASETPROPERTY @OMAIL, 'BODYFORMAT', @TIPO_EMAIL   

        EXEC @RESULTADO = SP_OASETPROPERTY @OMAIL, 'MAILFORMAT', @TIPO_EMAIL  

 

        -- ENVIANDO O EMAIL          

        EXEC @RESULTADO = SP_OAMETHOD @OMAIL, 'SEND', NULL 

          

        EXEC SP_OADESTROY @OMAIL -- DESTRUINDO A INSTANCIA DO OBJETO CDONTS  

    END 

SET NOCOUNT OFF