Banco de Dados - SQL Server

Configurando o SQL Mail com o Outlook 2000 - Passo a passo sem mistérios

Uma das grandes funcionalidades do Microsoft SQL Server 2000, é sem dúvida, o SQL Mail, através do qual se pode enviar e receber e-mails. Este artigo demonstra os passos para que isto seja possível, utilizando-se o OutLook 2000 e o Windows 2000 Server, além de descrever todas as system procedures existentes para enviar, receber, deletar e-mails. Abrangendo inclusive, a criação de alertas, operadores no SQL Server Agent.

por Gilberto Neto



Configurando o SQL Mail com o Outlook 2000 - Passo a passo sem mistérios Introdução Uma das grandes funcionalidades do Microsoft SQL Server 2000, é sem dúvida, o SQL Mail, através do qual se pode enviar e receber e-mails. Este artigo demonstra os passos para que isto seja possível, utilizando-se o OutLook 2000 e o Windows 2000 Server, além de descrever todas as system procedures existentes para enviar, receber, deletar e-mails. Abrangendo inclusive, a criação de alertas, operadores no SQL Server Agent.

Passos iniciais

Este artigo mostra a configuração do SQL Mail apenas com o Outlook 2000, que dentre as versões do Outlook, foi a que melhor se comportou. Antes de iniciar, convém que seja verificado se os últimos pacotes de correção (Service Pack1) estão instalados, tanto no MS SQL SERVER quanto no sistema operacional em uso. É possível que erros ocorram por ocasião da falta de alguma dessas atualizações.

Configurando o Mapi Profile

O primeiro passo a ser seguido é o de iniciar os serviços do SQL Server e do SQL Server Agent com o mesmo usuário de sistema usado para criar o mapi profile no Outlook 2000. Tomando por base o Windows 2000 Server, para iniciar os serviços com uma conta diferente da Local System, acesse o Painel de Controle à Ferramentas Administrativas à Serviços. Em outros sistemas operacionais é possível que esses passos sejam diferentes. Dentre os serviços que serão listados, deve-se procurar o MSSQLSERVER e SQLSERVERAGENT e solicitar suas propriedades. A tela da Figura 1 deverá aparecer:


Figura 1: Trocando o usuário que irá iniciar os serviços MSSQLSERVER e SQLSERVERAGENT

OBS: 1 O Service Pack 3 (último) para o SQL SERVER 2000 pode ser encontrado em http://www.microsoft.com/sql/downloads/2000/sp3.asp . Novas atualizações para o Sistema Operacional podem ser obtidos em http://windowsupdate.microsoft.com

A configuração do usuário que iniciará o sistema deverá ser feita na aba Logon à Efetuar logon como. Caso seja um usuário com direitos administrativos não é preciso se preocupar com permissões. Caso contrário, aconselha-se procurar na Internet algum utilitário que auxilie na identificação das permissões mínimas necessárias para isso. Dois interessantes são o FILEMON e REGMON, encontrados facilmente no Google (www.google.com.br). Para identificar as permissões necessárias basta iniciar algum dos utilitários citados e tentar iniciar o SQL Server e o SQL Server Agent. Com os registros que serão emitidos é possível ajustar as permissões onde ocorreram Denied.

Configurando o Outlook 2000

Completada essa parte, deve ser efetuado um novo login no sistema utilizando o usuário escolhido para se iniciar o serviço do MSSQLSERVER e SQLSERVERAGENT. Agora será configurado o mapi profile no Outlook 2000. Indo ao Painel de Controle à Correio, caso a tela que apareça não seja a da figura abaixo, deve-se solicitar a guia Mostrar Perfis, conforme Figura 2.


Figura 2: Verificando os mapi profiles existentes no Windows 2000 Server

Na referida tela, deve-se Adicionar... um novo perfil, escolhendo a opção Correio eletrônico da Internet, conforme Figura 3.


Figura 3: Criando novos mapi profiles.

Ao avançar, será pedido o nome do perfil (qualquer nome). Ao se clicar em Configurar conta de correio eletrônico, será possível informar todos os dados necessários ao envio e recebimento de e-mails, como o servidor smtp, pop3, senhas, etc. Avançando, será solicitado o caminho físico onde deverão ser guardadas as caixas postais. Essa escolha é livre. Esses passos são os necessários para se concluir a configuração do profile Mapi. Configurando a opção de suporte ao correio no Outlook 2000

Após configurar o profile, deve-se chamar Outlook 2000 e acessar as Ferramentas à Opções à Serviço de correio à Reconfigurar suporte a correio, e marcar a segunda opção, conforme Figura 4 abaixo:


Figura 4: Trocando a opção do serviço de correio eletrônico

Essa configuração é necessária para não ser preciso deixar o Outlook 2000 em execução o tempo todo, recebendo e enviando e-mails.

Configurando o SQL MAIL

Após abrir o Enterprise Manager e acessar o servidor SQL Server, deve-se chamar Support Services à SQL Mail à Propriedades. A seguinte tela (Figura 5) deverá aparecer:


Figura 5: Visualizando os mapi profiles para utilização no SQL Mail

Aparecerá uma lista dos mapi profiles configurados. Neste campo não basta digitar um nome previamente definido. Se o nome do Profile não estiver na listagem é porque houve um erro de configuração. Se a configuração previamente realizada estiver sendo mostrada, a mesma deve ser escolhida e testada (clicar no botão Teste). Esses são os passos necessários à configuração do SQL Mail. Se tudo ocorreu bem, já é possível utilizar qualquer Procedure para enviar e receber e-mails pelo SQL Server.

Configurando o SQL AGENT MAIL

O Sql Agent Mail, que é um recurso do SQL SERVER responsável por enviar e-mail aos operadores em caso de ocorrerem erros no SQL SERVER ou informar sobre sucessos e falhas em Jobs.

Para configurar o SQL Server Agent Mail, basta acessar Management à SQL Server Agent à Propriedades. A tela mostrada na Figura 6 aparecerá:


Figura 6: Visualizando e setando o mapi profile a sessão Mail do SQL Agent Mail

Deve-se escolher no grupo Mail Session o profile previamente configurado, e testá-lo. Há ainda a opção de salvar as mensagens enviadas. O SQL Agent Mail envia e-mail apenas para os operadores existentes na instância do SQL Server. Para configurar os operadores, basta acessar Management à Sql Server Agent à Operadores:


Figura 7: Operadores existentes na instância

Na imagem mostrada (Figura 8), deve-se clicar com o botão direito do mouse no lado direito da tela e escolher Novo Operador. Na aba Geral, deve-se informar o nome, e-mail, Pager e o endereço da máquina, uma vez que é possível enviar uma mensagem para o computador que o operador estiver usando através do comando NET SEND. Na aba Notificações é possível configurar que alertas serão enviados para o operador por ocasião de sucessos e falhas das Jobs escolhidas. Se for escolhido o envio para Pagers, pode-se agendar (schedules) os dias e horários para a notificação. Essa opção é apenas para Pager.


Figura 8: Criação do novo operador

Veja que você configura notificações por jobs ou alerts, para você criar um alert para um evento no SQL Server, vá em management, sql server agent, Alerts. No lado direito, clique em novo alerta. Você configura um alert, para um erro, baseado também na severity utilizado no raiserror, para um database ou para todos, ou se a mensagem de erro contiver um texto especificado, isso configurado na guia General, na guia Response, só tem duas, você configura se vai executar um job e/ou se vai informar a algum operador, indicando a forma de notificação (email, Pager, net send), além de ainda poder configurar algum texto adicional.

Observe que as configurações para notificações podem ser para Jobs ou Alerts. Para se criar um Alert para um evento no SQL Server, basta acessar Management à Sql Server Agent à Alerts. No lado direito, deve-se escolher Novo Alerta. Um Alert pode ser configurado para um evento do SQL Server ou para uma condição de performance do SQL Server. Na primeira situação configura-se o alerta para um número de erro, para a severity, para um texto do erro em todos os databases ou para um específico. Na segunda opção, utiliza-se contadores de performance, para gerar um alerta.


Figura 9: Criando novo alerta

A Integração de Procedures com o SQL Mail

Será tratado agora sobre alguns procedimentos internos do SQL Mail usadas para enviar e receber e-mail através do SQL Server 2000. A primeira coisa que se deve fazer para enviar ou receber e-mails é iniciar o Sql Mail através de uma Stored Procedure:

USE master
EXEC xp_startmail

É sempre interessante iniciar logo o SQL Mail, pois a execução das system procedures ficará mais rápida. Semelhantemente, deve-se parar o Sql Mail quando o mesmo não estiver sendo utilizado. Contudo, antes deve ser averiguado se não há algum Job ajustado para sempre receber e-mails. A chamada se dá da seguinte forma:

USE master
EXEC xp_stopmail

Enviando emails

A primeira procedure, é a xp_sendmail, que contém a rotina completa para enviar o email:

xp_sendmail {[@recipients =] "recipients [;...n]"} 
    [,[@message =] "message"] 
    [,[@query =] "query"] 
    [,[@attachments =] "attachments [;...n]"] 
    [,[@copy_recipients =] "copy_recipients [;...n]"
    [,[@blind_copy_recipients =] "blind_copy_recipients [;...n]"
    [,[@subject =] "subject"]
    [,[@type =] "type"] 
    [,[@attach_results =] "attach_value"]
    [,[@no_output =] "output_value"] 
    [,[@no_header =] "header_value"] 
    [,[@width =] width] 
    [,[@separator =] "separator"] 
    [,[@echo_error =] "echo_value"] 
    [,[@set_user =] "user"] 
    [,[@dbuse =] "database"]

Os parâmetros devem ser definidos de acordo com os seguintes critérios:

  • @recipients - Quem irá receber o email
  • @message - Texto que irá corpo da mensagem
  • @query - Qualquer query válida
  • @attachments - Qualquer arquivo do servidor
  • @copy_recipients - Quem irá receber, equivalente ao CC
  • @blind_copy_recipients - Quem irá receber, equivalente ao BCC
  • @subject - Assunto do email
  • @attach_results - Define se o resultado da query vai ser adicionado ao email, ou utilizar o primeiro arquivo anexado
  • @no_output - Define que não retornará mensagem nenhuma a sessão que enviou
  • @set_user - Definir qual contexto de segurança vai rodar a query, ou seja, qual usuário, por default, é o mesmo usuário que ta chamando a procedure xp_sendmail
  • @dbuse - Definir qual database será utilizado, por default, é utilizado o database default definido na criação do login, em security, logins
  • @no_header - Definir se irá a informação de cabeçalho das colunas
  • @width - Defini o tamanho da linha no texto resultante da query
  • @separator - É o separador das colunas no resultado da query
  • @echo_error - Definir se os erros gerados pela consulta da query, irá ser enviados no email.

Alguns exemplos práticos

Enviar um email para um email:

EXEC xp_sendmail "gilberto@digizap.com.br", "The master database is full."

Enviar email com cópia para alguém e definindo o assunto:

EXEC xp_sendmail @recipients = "gilberto@digizap.com.br;gilberto@webdatarn.com.br", 
   @message = "The master database is full.",
   @copy_recipients = "teste@teste.com.br;teste1@teste.com.br",
   @subject = "Master Database Status"

Enviando o resultado de uma query, atachando o resultado ao invés de vir na mensagem, caso queira vir na mensagem, basta retirar o @attach_results e o @attachments:

EXEC xp_sendmail @recipients = "gilberto@digizap.com.br;gilberto@webdatarn.com.br", 
   @message = "Segue relação de usuários do banco de dados Master.",
   @subject = "Uusários do banco de dados",
   @dbuse= "Master", @query="SELECT NAME FROM SYSUSERS",
   @attach_results=true,@attachments="usuariosmaster.txt"

Enviar email com algum arquivo atachado:

EXEC xp_sendmail @recipients = "gilberto@digizap.com.br;gilberto@webdatarn.com.br", 
   @message = "Segue arquivo baseclass.txt",
   @subject = "Arquivo",
   @attachments="c:\BaseClass.txt"

Enviando emails com corpo maior que 8000 caracteres. Como se pode notar, o parâmetro @message suporta até 8000 caracteres, mas com o código abaixo é possível aumentar esse valor:

CREATE TABLE ##tabela (campotexto text)
INSERT ##tabela values ("TEXTO GRANDE")
DECLARE @cmd varchar(1000)
SET @cmd = "SELECT campotexto FROM ##tabela"
EXEC master.dbo.xp_sendmail "gilberto@digizap.com.br", 
   @query = @cmd, @no_header= "TRUE"
DROP TABLE ##tabela

Observe que foi utilizada uma tabela temporária GLOBAL visto que o SQL Mail abre outra seção para gerar a query, do parâmetro @query.

Algo interessante é que todas as Extended Procedures (XPs) são Bibliotecas de Ligação Dinâmica (DLLs). Dessa forma, é possível gerar as próprias XPs utilizando dlls desenvolvidas em qualquer linguagem. Com a procedure sp_addextendedproc adiciona-se XPs ao servidor.

Recebendo emails

São 3 procedures utilizadas para visualizar os e-mails existentes na caixa de entrada (inbox) do cliente Outlook 2000. Vamos nos prender apenas a procedure principal, a xp_readmail utilizada para ver os e-mails.

xp_readmail [[@msg_id =] "message_number"]
    [, [@type =] "type" [OUTPUT]] 
    [,[@peek =] "peek"]
    [,[@suppress_attach =] "suppress_attach"]
    [,[@originator =] "sender" OUTPUT]
    [,[@subject =] "subject" OUTPUT]
    [,[@message =] "message" OUTPUT]
    [,[@recipients =] "recipients [;...n]" OUTPUT]
    [,[@cc_list =] "copy_recipients [;...n]" OUTPUT]
    [,[@bcc_list =] "blind_copy_recipients [;...n]" OUTPUT]
    [,[@date_received =] "date" OUTPUT]
    [,[@unread =] "unread_value" OUTPUT]
    [,[@attachments =] "attachments [;...n]" OUTPUT])
    [,[@skip_bytes =] bytes_to_skip OUTPUT]
    [,[@msg_length =] length_in_bytes OUTPUT]
    [,[@originator_address =] "sender_address" OUTPUT]]

Os parâmetros devem ser definidos de acordo com os seguintes critérios:

  • @msg_id - Número da mensagem
  • @peek - Ler a mensagem sem colocar com READ
  • @suppress_attach = - Desconsiderar arquivos atachados
  • @originator = - Email da pessoa que enviou
  • @subject = - Assunto do email
  • @message = - Corpo do email
  • @recipients = - Destinatários
  • @cc_list = - Destinatários via cópia
  • @bcc_list = - Destinatários via cópia oculta
  • @date_received = - Data da mensagem
  • @unread = - Email lido ou não
  • @attachments = - Arquivos anexados
  • @skip_bytes = Desconsiderar alguns bytes
  • @msg_length = Tamanho da mensagem
  • @originator_address = Endereço do remetente

Conclusão

Como podemos notar, o poder dessa ferramenta do SQL Server é extremamente grande, com os exemplos apresentados neste artigo começamos a imaginar diversas situações reais para sua utilização, tendo como resultado um ganho enorme de produtividade.

Gilberto Neto

Gilberto Neto - Analista de Sistemas, DBA e Desenvolvedor autônomo. Formado em Tecnologia em Informática pelo CEFET-RN. Microsoft Certified Professional para SQL Server 2000.
Atualmente, como pesquisador associado ao CEFET-RN, dedica-se aos estudos das tecnologias Microsoft.NET, Microsoft SQL Server "Yukon" e WCM.