Query From Hell? – Episódio 2

Estes dias ressuscitaram uma das queries de envio de email que já utilizei, dai recordei como era enviar email com os antepassados do SQL Server 2005. Neles era preciso usar o SQL Mail, uma das funcionalidades mais bugadas que já existiram, algo em torno de 300 atualizações só para arrumá-la e tópicos permanentes de erros no Microsoft Suport, mas o SQL Mail deverá morrer depois do SQL Server 2008, COMMIT! e vida longa ao Database Mail!

Mas ainda nesta época, uma das maneiras de evitar o SQL Mail e enviar email em formato HTML pelo SQL Server era utilizando “OLE Automation”, ou seja, programar com componentes do Sistema Operacional (ex. CDONTS).

Como funcionava, e funciona até hoje, segue a “query from hell” que demonstra o uso “OLE Automation” para envio de emails, a salvação de muitos desenvolvedores no SQL Server 2000.

SP_CONFIGURE ‘show advanced options’, 1;
GO
RECONFIGURE;
GO
SP_CONFIGURE ‘Ole Automation Procedures’, 1;
GO
RECONFIGURE;
GO
DECLARE  @FROM_ADDRESS   VARCHAR(100) = ‘sql@hell.com’,
         @TO_ADDRESS     VARCHAR(1000) = ‘sql@hell.com’,
         @CC_ADDRESS     VARCHAR(1000) = ”,
         @BCC_ADDRESS    VARCHAR(1000) = ”,
         @SUBJECT_EMAIL  VARCHAR(200) = ‘Ole Automation Procedures Test’,
         @BODY_EMAIL     VARCHAR(MAX) = ‘This is a test e-mail sent from Ole Automation Procedures on ALEPH.’,
         @TYPE_EMAIL     INT = 0,
         @OMAIL          INT,
         @RESULT         INT

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 @RESULT = SP_OACREATE
  ‘CDONTS.NEWMAIL’ ,
  @OMAIL OUT
IF @RESULT = 0
  BEGIN
    EXEC @RESULT = SP_OASETPROPERTY
      @OMAIL ,
      ‘FROM’ ,
      @FROM_ADDRESS
    
    EXEC @RESULT = SP_OASETPROPERTY
      @OMAIL ,
      ‘TO’ ,
      @TO_ADDRESS
    
    IF @CC_ADDRESS <> ”
      BEGIN
        EXEC @RESULT = SP_OASETPROPERTY
          @OMAIL ,
          ‘CC’ ,
          @CC_ADDRESS
      END
    
    IF @BCC_ADDRESS <> ”
      BEGIN
        EXEC @RESULT = SP_OASETPROPERTY
          @OMAIL ,
          ‘BCC’ ,
          @BCC_ADDRESS
      END
    
    EXEC @RESULT = SP_OASETPROPERTY
      @OMAIL ,
      ‘SUBJECT’ ,
      @SUBJECT_EMAIL
    
    EXEC @RESULT = SP_OASETPROPERTY
      @OMAIL ,
      ‘BODY’ ,
      @BODY_EMAIL
    
    EXEC @RESULT = SP_OASETPROPERTY
      @OMAIL ,
      ‘BODYFORMAT’ ,
      @TYPE_EMAIL
    
    EXEC @RESULT = SP_OASETPROPERTY
      @OMAIL ,
      ‘MAILFORMAT’ ,
      @TYPE_EMAIL
    
    EXEC @RESULT = SP_OAMETHOD
      @OMAIL ,
      ‘SEND’ ,
      NULL
    
    EXEC SP_OADESTROY
      @OMAIL
  END 

Se gostar dessa, dê uma olhada em outra, que utiliza “OLE Automation” para manipular o Excel pelo SQL Server:

http://mail.simple-talk.com/sql/t-sql-programming/sql-server-excel-workbench/#sixth

Para quem quer facilidade para enviar email pelo SQL, consulte o tutorial sobre como configurar o Database Mail do SQL Server, escrito pelo Zavaschi:

http://thiagozavaschi.spaces.live.com/blog/cns!8DE5A8EFC1819ECA!309.entry

Referências:

http://support.microsoft.com/kb/312839/pt-br

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s