Enviando e-mails com o SQL Server 2005

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (3)  (0)

Veja nesta primeira parte do artigo a apresentação dos pré-requisitos necessários para a utilização do Database Mail em um servidor SQL Server.

Em versões anteriores, o SQL Server enviava e-mails usando clientes MAPI (Microsoft Office Outlook, por exemplo) instalados no servidor. Isto implicava na instalação e configuração de mais um software por parte do DBA, caso desejasse utilizar o recurso de envio de e-mails em ambientes corporativos.

O Database Mail veio na versão 2005 como uma nova solução para o envio de e-mails a partir do Database Engine. A sua principal característica é a utilização do servidor SMTP (Simple Mail Transfer Protocol) para o envio das mensagens, sem a necessidade de instalar aplicativos MAPI no SQL Server 2005.

Com o Database Mail, o SQL Server pode enviar mensagens de e-mail dos mais diversos tipos e formatos, como mensagens HTML, resultados de consultas e arquivos anexados, para usuários.

Nesta primeira parte deste artigo, apresentaremos os pré-requisitos necessários para a utilização do Database Mail em um servidor SQL Server. E na segunda parte mostraremos as definições de Profiles e Accounts e como configurá-los. E por fim, mostraremos um exemplo de envio do resultado de uma consulta por e-mail.

Pré-requisitos Necessários

Antes de usar o Database Mail no SQL Server, alguns itens devem ser observados:

  • Recurso Database Mail ativado: Por padrão, o SQL Server traz esta funcionalidade desativada. Para ativá-la, abra o Surface Area Configuration e escolha o link Features (Recursos). Na janela que se abre, escolha a opção Database Mail. Uma vez selecionada, basta marcar a caixa para ativar este recurso (Figura 1). Também é possível a ativação do recurso através do assistente de configuração (Database Mail Configuration Wizard) ou via sp_configure.
20-09-2007pic01.JPG
Figura 1. Ativando o recursos Database Mail no SQL Server Surface Area Configuration.

  • Service Broker ativado: Por padrão, o Service Broker vem ativado no msdb, banco do sistema responsável pelo serviço. O Database Mail usa o Service Broker para enviar as mensagens.
  • Database Mail precisa de acesso ao servidor SMTP: Se o servidor SMTP pede autenticação, o executável acessa o servidor SMTP usando as credenciais da conta de serviço do SQL Server por padrão. É preciso que o serviço SQL Server possa acessar o servidor SMTP.

Após verificar todos os itens acima, o SQL Server está pronto para utilizar oDatabase Mail.

Veremos agora as definições de Profiles e Accounts e como configurá-los. No final, mostraremos um exemplo de envio do resultado de uma consulta por e-mail.

Configurando o Database Mail

Antes de configurar o Database Mail, é necessário conhecer os dois componentes que são configurados neste recurso: Account e Profile.

  • Database Mail Account: Uma Account (Conta) possui todos os dados do servidor SMTP e do e-mail a ser utilizado pelo SQL Server 2005 no envio de mensagens. Cada e-mail disponível para este recurso é uma Account no Database Mail.
  • Database Mail Profile: É um conjunto de Accounts, agrupadas de acordo com as necessidades definidas pelo DBA. A grande vantagem de utilizar Profiles é a possibilidade de possuir uma lista com contas de diferentes servidores SMTP: caso o envio através de uma conta falhe, o SQL usa a próxima conta para efetuar a operação. Além disso, alterações nas contas não alteram a aplicação que utiliza o Database Mail, já que este chama o Profile, não a Account. Tudo isso é transparente para o usuário.

Em relação a segurança, existem dois tipos de Profiles: Privado e Público. Quando é criado um Profile Privado, o Database Mail armazena uma lista de usuários que podem usar este Profile. Já quando um Profile é Público, sua utilização é permitida aos usuários do cargo DatabaseMailUserRole no banco msdb.

O SQL Server 2005 oferece duas formas de configurar os componentes do Database Mail: usando o Database Mail Configuration Wizard do SQL Server Management Studio ou usando o conjunto de Stored Procedures msdb.dbo.sysmail.

Configurando o Database Mail via Assistente

Para acessar o assistente de configuração do Database Mail, abra o Management Studio e expanda a pasta Management na caixa Object Explorer. Ao expandir, clique com o botão direito na opção Database Mail e escolha o item Configure Database Mail: o assistente é então carregado, como mostra a Figura 2.

21-09-2007pic01.JPG
Figura 2. Janela de Boas Vindas do Database Mail Configuration Wizard.

Após aberta, é possível marcar a opção Skip this page in the future caso não queira que esta tela de boas vindas seja exibida novamente. Clicando em Next é apresentada então a janela de escolha de tarefa, onde o DBA escolhe que ação que deseja efetuar (Figura 3). As opções disponíveis são:

  • Set up Database Mail: Nesta opção, o DBA cria um Profile e as contas SMTP associadas a este Profile. Além disso, o DBA configura a segurança e parâmetros do sistema.
  • Manage Database Mail accounts and profiles: Através desta opção, o DBA efetua alterações nas contas e profiles já criados.
  • Manage profiles security: Neste item, o administrador configura a segurança do Profile (Público ou Privado).
  • View or change system parameters: Esta opção é destinada para configurar os parâmetros do Database Mail, como por exemplo a quantidade de tentativas que o SQL Server efetuará cada vez que for solicitado o envio de um e-mail.
21-09-2007pic02.JPG
Figura 3. Janela de Escolha de Tarefa.

Para a criação de um novo Profile e das contas, basta selecionar a primeira opção e clicar no botão Next. O assistente exibe então a janela de criação de um novo Profile, onde o administrador define um nome, uma breve descrição e gerencia as contas de e-mail (Accounts). Observe a Figura 4.

21-09-2007pic03.JPG
Figura 4. Janela de criação de um Profile.

A principal característica desta janela é a caixa SMTP accounts, onde o DBA define e gerencia as contas de e-mail que farão parte do novo Profile. O administrador pode adiciona e remove contas, além de alterar a ordem com que essas contas são usadas. Para adicionar uma nova conta de e-mail ao novo Profile, basta clicar no botão Add... e a caixa de configuração de uma nova Account é então aberta, como mostra a Figura 5:

21-09-2007pic04.JPG
Figura 5. Janela de criação de uma Account.

Os dados pedidos por este cadastro são:

  • Account Name: Nesta caixa é definido o nome para a nova conta.
  • Description: Uma breve descrição da nova conta.
  • E-mail address: Preencha com o e-mail a ser utilizado para o envio da mensagem.
  • Display Name: Nome de exibição, que aparecerá para os usuários que receberem os e-mails enviados pelo SQL Server.
  • Reply e-mail: Caso deseje, o administrador pode utilizar esta opção para definir um e-mail de resposta, diferente do utilizado para enviar os e-mails do SQL. Muito utilizado quando a conta de envio é uma conta não gerenciada por nenhum usuário.
  • Server name & Port number: Nesta opção do DBA define o endereço do servidor e a porta SMTP para o envio das mensagens.
  • This server requires a secure connection (SSL): Caso esta opção esteja marcada, o SQL Server estabelecerá uma conexão segura para o envio das mensagens.
  • SMTP Authentication: Nesta parte, o administrador define como será efetuada a autenticação com o servidor SMTP. São três as opções disponíveis:
    o Windows Authentication using Database Engine service credentials: Caso esta opção esteja selecionada, a validação no servidor SMTP é feita usando os dados do usuário ligado ao serviço Database Engine (definidos durante a instalação e gerenciado pelo SQL Server Configuration Manager). Ideal em ambientes Windows com Active Directory configurado.
    o Basic Authentication: A autenticação básica se resume a fornecer o usuário e a senha de acesso ao servidor SMTP. Esta opção é muito utilizada quando o servidor SMTP está em ambientes híbridos (MAC, Unix, etc.) ou quando o servidor está na web.
    o Anonymous Authentication: Esta opção faz a validação utilizando o usuário “anônimo”. Servidores SMTP que aceitam este tipo de autenticação permitem o envio de e-mail sem que o usuário tenha que efetuar a validação. Esta opção não é recomendada.

Uma vez preenchido todos os dados da nova conta, clique no botão OK e a nova conta estará criada e já listada na caixa SMTP Accounts da janela do Profile. Uma vez criada, você pode remover uma conta selecionando-a na lista e clicando no botão Remove. Caso existam mais contas cadastradas no mesmo Profile, você pode definir a prioridade de utilização pelo SQL Server através dos botões Move Up e Move Down: prioridade 1 quer dizer que é a primeira conta a ser utilizada pelo SQL Server (Figura 6).

21-09-2007pic05.JPG
Figura 6. Profile com duas contas de e-mail.

Depois de configuradas as contas que farão parte do novo Profile, o próximo passo é definir qual vai ser a segurança deste novo objeto. Clicando em Next, o assistente apresenta a janela Manage Profile Security, onde o DBA define se a segurança vai ser Privada (Private) ou Pública (Public). Observe a Figura 7.

21-09-2007pic06.JPG
Figura 7. Segurança do novo Profile.

Caso o novo Profile seja público, marque a caixa de seleção ao lado do nome na aba Public Profiles. Na em casos onde o Profile será privado, altere para a aba Private Profiles, escolha o usuário que terá acesso ao Profile e marque a caixa de seleção ao lado do nome.

Nesta mesma janela, você ainda pode definir qual Profile será o padrão (Default Profile). Ao definir um padrão, os usuários podem enviar e-mails sem especificar que Profile o SQL Server irá utilizar. Para isto, basta alterar o valor de No para Yes na caixa Default Profile do item desejado.

Clicando em Next, é mostrado o ultimo passo: definir os parâmetros do sistema usados pelo Database Mail. Estes parâmetros são utilizados pelo SQL Server quando o serviço é disparado (Figura 8).

21-09-2007pic07.JPG
Figura 8. Janela de Parâmetros do Sistema.

Os parâmetros do sistema que podem ser configurados são:

  • Account Retry Attempts: Neste parâmetro, o administrador define quantas tentativas o SQL Server irá efetuar para enviar um e-mail. Este número de tentativas é por conta de e-mail.
  • Account Retry Delay (seconds): Intervalo, em segundos, entre as tentativas de envio de um e-mail.
  • Maximum File Size (Bytes): Caso o e-mail enviado possua anexo, este parâmetro define o tamanho máximo dos anexos.
  • Prohibited Attachment File Extensions: Nesta opção, o DBA define quais extensões são proibidas para envio como arquivos anexados dos e-mails. Para adicionar ou remover extensões, clique no botão e adicione as extensões desejadas, separando-as com vírgula.
  • Database Mail Executable Minimum Lifetime (seconds): Nesta opção é definido o tempo de vida mínimo que o processo do Database Mail estará ativo. O processo do Database Mail ficará ativo enquanto tiver e-mails a serem enviados. Esta opção define o tempo de vida quando não há mais nenhuma mensagem a ser enviada.
  • Logging Level: Neste parâmetro, o administrador define que informações serão gravadas no log do Database Mail. São três opções possíveis:
    o Normal: Grava apenas os erros no arquivo de log.
    o Extended: Grava mensagens de erros, alertas e informações. É a opção Padrão.
    o Verbose: Grava erros, alertas, mensagens informativas, mensagens de sucesso e mensagens internas adicionais. Esta opção é recomendada para solucionar problemas do Database Mail.

Por fim, a janela dos Parâmetros do Sistema ainda oferece o botão Reset All, que retorna todos os valores dos parâmetros aos seus valores padrões, caso o botão seja pressionado.

Depois de definido os parâmetros, o assistente mostra a tela final, onde são apresentadas as ações que o SQL Server executará no momento que o DBA clicar em Finish. Ao encerrar o assistente, o SQL Server executa todas as ações solicitadas ao longo do assistente e configura assim o Database Mail, deixando-o pronto para utilização pelo Database Engine.

Configurando o Database Mail via Stored Procedure

Os passos para configurar o Database Mail utilizando Stored Procedures são semelhantes ao assistente apresentado acima. Na Listagem 1 estão todos os procedimentos para a criação de um Profile. Vale lembrar que estas SPs devem ser realizadas no banco MSDB, responsável pelo Database Mail.

Listagem 1. Script para a criação de um Profile e Accounts no Database Mail.

--Setando o MSDB como banco a ser utilizado
 USE msdb;
 --Criando uma Account (conta) para ser utilizado em um Profile
 EXECUTE sysmail_add_account_sp
          @account_name = 'Nome da Conta',
          @description = 'Descrição da Conta',
          @email_address = 'sql@microsoft.com',
          @display_name = 'Nome de Exibição',
          @mailserver_name = 'smtp.microsoft.com'
  
 --Criando o Profile
 EXECUTE sysmail_add_profile_sp
          @profile_name = 'Nome do Profile',
          @description = 'Descrição do Profile'
  
 --Criando o Profile, associamos a conta AdventureWorks Mail a este Profile
 EXECUTE sysmail_add_profileaccount_sp
          @profile_name = 'Nome do Profile',
          @account_name = 'Nome da Conta',
          @sequence_number = 1 --Este número é a prioridade da Conta no Profile
  
 --Dando acesso do Profile ao MSDB, usando o tipo de Profile public
 EXECUTE sysmail_add_principalprofile_sp
          @profile_name = 'Nome do Profile',
          @principal_name = 'public', --Caso seja privado, usar private
          @is_default = 1; --Valor 1 = true; Valor 0 = false; Define se é o Padrão

Interessante notar que criamos primeiro as Accounts e os Profiles como objetos independentes, para depois associá-los através da Stored Procedure sysmail_add_profileaccount_sp.

Enviando e-mails com o Database Mail

Uma vez os Profiles estando configurados, é possível agora enviar e-mails a partir do SQL Server. Para esta tarefa, o SQL Server oferece a Stored Procedure sp_send_dbmail. Sua sintaxe é bem simples, como mostra o exemplo da Listagem 2.

Listagem 2. Script para o envio de uma mensagem simples.

--Setando o MSDB como banco a ser utilizado
 USE msdb;
 --Enviando um e-mail simples
 EXEC sp_send_dbmail 
      @profile_name = 'Nome do Profile', 
      @recipients = 'email_do_destinatario@sql.com', 
      @body = 'Mensagem do e-mail, no formato texto. É possível o formato HTML.' 
 <p align="left">     @subject = 'Assunto do e-mail'

No exemplo acima, o SQL Server utiliza o Profile “Nome do Profile” para enviar uma mensagem simples para o e-mail “email_do_destinatario@sql.com”.

Além de textos simples, uma das mais importantes utilizações do Database Mail é o envio de resultados de consulta por e-mail. Para tanto, basta adicionar o atributo @query com a consulta desejada. Observe a Listagem 3, onde os dados da tabela Contacts do banco AdventureWorks serão enviados por e-mail.

Listagem 3. Script para o envio do resultado de uma query

--Setando o MSDB como banco a ser utilizado
 USE msdb;
 --Enviando um e-mail com o resultado de uma SELECT
 EXECUTE sp_send_dbmail 
      @profile_name = 'Nome do Profile', 
      @recipients = 'email_do_destinatario@sql.com', 
      @query = 'SELECT ContactID, FirstName, LastName FROM AdventureWorks.Person.Contact WHERE ContactID < 50',
 <p align="left">     @subject = 'Dados da Tabela de Contatos',
 <p align="left">     @attach_query_result_as_file = 0

No exemplo acima, observe duas diferenças do exemplo da Listagem 2: o atributo @query com a SELECT desejada; e a opção @attach_query_result_as_file. Esta opção define se o resultado da query vai no corpo do e-mail (Valor 0 – False) ou como anexo (Valor 1 – True).

Uma vez executado o comando, o SQL Server retorna a mensagem Mail queued, confirmando o envio da mensagem para o a lista de e-mails a serem processados pelo Database Mail. Através do log do Database Mail, é possível verificar se ocorreu algum erro no envio do e-mail. Para acessar o log do Database Mail, abra o Management Studio e expanda a pasta Management na caixa Object Explorer. Ao expandir, clique com o botão direito na opção Database Mail e escolha o item View Database Mail Log: o log é então carregado.

Caso tenha dado tudo certo, o destinatário receberá o e-mail com o resultado da consulta, como mostra a Figura 9.

21-09-2007pic08.JPG
Figura 9. Mensagem recebida com o resultado da consulta.

Conclusão

O Database Mail do SQL Server 2005 trouxe facilidade e praticidade no envio e gerenciamento de e-mails a partir do Database Engine. Neste artigo apresentamos os pré-requisitos envolvidos no Database Mail e como configurar os componentes deste serviço: Profile e Accounts. Depois mostramos como utilizar a Stored Procedure sp_send_dbmail para o envio de textos e resultados de consultas por e-mail.

Server está pronto para utilizar o Database Mail.

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?