Partilhar via


sp_processmail (Transact-SQL)

Usa procedimentos armazenados estendidos (xp_findnextmsg, xp_readmaile xp_deletemail) para processar mensagens de entrada de email na caixa de entrada para o MicrosoftSQL Server. Cada mensagem deve conter uma única consulta no corpo. Este procedimento usa o procedimento armazenado estendido xp_sendmail para retornar o conjunto de resultados como um anexo ao remetente da mensagem.

Observação importanteImportante

Evite usar este procedimento. O procedimento sp_processmail processa as informações que lhe foram enviadas por email de fontes desconhecidas e pode ser usado para introduzir código mal-intencionado no seu ambiente. Você deve ter muito cuidado ao validar o código antes de executá-lo. Este procedimento é incluído para compatibilidade com versões anteriores, mas só será instalado quando você habilitar o SQL Mail.

ObservaçãoObservação

Esse recurso será removido em uma versão futura do Microsoft SQL Server. Evite usar esse recurso em desenvolvimentos novos e planeje modificar os aplicativos que atualmente o utilizam.

Ícone de vínculo de tópicoConvenções de sintaxe Transact-SQL

Sintaxe

sp_processmail [ [ @subject = ] 'subject' ] 
     [ , [ @filetype = ] 'filetype' ] 
     [ , [ @separator = ] 'separator' ] 
     [ , [ @set_user = ] 'user' ] 
     [ , [ @dbuse = ] 'dbname' ]

Argumentos

  • [ @subject = ] 'subject'
    É a linha de assunto de mensagens de email a serem interpretadas como emails de consulta para o SQL Server processar. subject é varchar(255), com um padrão NULL. Quando especificado, sp_processmail processa somente as mensagens com esse assunto. Por padrão, o SQL Server processa todas as mensagens de email como se, no corpo, elas tivessem consultas.

  • [ @filetype = ] 'filetype'
    É a extensão de arquivo a ser usada quando o conjunto de resultados de consulta é enviado de volta ao remetente da mensagem como anexo. filetype é varchar(3), com um padrão "'txt"'.

  • [ @separator = ] 'separator'
    É o separador de coluna (terminador de campo) para cada coluna do conjunto de resultados. Essas informações são passadas ao procedimento armazenado estendido xp_sendmail para retornar o conjunto de resultados ao remetente da mensagem. separator é varchar(3), com um padrão 'tab', que é um caso especial para o caractere tab a ser usado entre colunas.

  • [ @set_user = ] 'user'
    É o contexto de segurança no qual a consulta deveria ser executada. user é varchar(132), com um padrão de guest.

  • [ @dbuse = ] 'dbname'
    É o contexto de banco de dados no qual a consulta deveria ser executada. dbname é varchar(132), com um padrão de mestre.

Valores de código de retorno

0 (êxito) ou 1 (falha)

Conjuntos de resultados

Nenhum

Comentários

O email de entrada deve ter uma única consulta válida do SQL Server como texto de mensagem. sp_processmail só controla mensagens não lidas. Os resultados da consulta são retornados ao remetente da mensagem e copiados para qualquer usuário de email na lista CC: da mensagem original. Depois de processadas, as mensagens são excluídas da caixa de entrada. Se for enviado email com freqüência ao servidor, sp_processmail será executado regularmente. Para configurar um processamento de email regular, você pode usar o SQL Server Agent para agendar um trabalho sp_processmail. Ele processará o email na freqüência especificada e registrará uma mensagem informativa com o número de consultas processadas no histórico de trabalho.

Os resultados são enviados como um arquivo anexo. O nome de arquivo completo enviado consiste em "Sql" seguido de uma cadeia de caracteres aleatória de números e a extensão de tipo de arquivo especificada, por exemplo Sql356.txt.

Observação importanteImportante

Para anexar um ícone apropriado à mensagem de email, verifique se o tipo de arquivo está associado corretamente. Para criar uma associação de arquivo, clique duas vezes em Meu Computador, na área de trabalho, e selecione Opções de Pasta no menu Ferramentas. Na guia Tipos de Arquivo, na caixa de diálogo Opções de Pasta, especifique o aplicativo a ser usado para abrir o arquivo.

Trabalhos sp_processmail diferentes podem ser configurados para consultas em bancos de dados diferentes. Por exemplo, você pode adotar a convenção de que a consulta ao banco de dados AdventureWorks deve ter um assunto de "SQL:AdventureWorks". Em seguida, você pode executar sp_processmail especificando um subject de e um dbname de AdventureWorks. As consultas e agrupamentos diferentes de banco de dados podem ter outras estruturas de formatação. Por exemplo, tarefas de distribuição podem ter um subject e SQL:distribution e um dbname dedistribuição. Qualquer um desses trabalhos pode ser agendado com o SQL Server Agent.

O procedimento armazenado de sistema sp_processmail também pode ser personalizado de várias maneiras recuperando o texto do procedimento com o procedimento armazenado de sistema sp_helptext, modificando o código Transact-SQL e criando um novo procedimento com comportamento personalizado. As alterações possíveis incluem:

  • Processar somente determinados tipos de mensagem personalizados que usam o parâmetro @type com o procedimento armazenado estendido xp_findnextmsg .

  • Marcar a mensagem como read mas não excluí-la depois do processamento (execute xp_readmail uma segunda vez com peek definido como false).

  • Enviar os resultados de consulta no corpo da mensagem de email chamando xp_sendmail com attach_result definido como false, e removendo o parâmetro attachments.

  • Definir o contexto de segurança para executar a consulta em um contexto de usuário com base no remetente da mensagem. Se os nomes de usuário de email forem os mesmos que seus nomes de usuário do SQL Server, bastará apenas alterar a chamada para xp_sendmail ao usar set_user = @originator. Se os seus nomes de usuário de email não forem nomes de usuário do SQL Server válidos (por exemplo, se tiverem espaços em branco incorporados), faça uma pesquisa de tabela ou substituição de caracteres para obter o nome de usuário do SQL Server apropriado e passar xp_sendmail.

Permissões

Somente os membros da função de servidor fixa sysadmin podem executar este procedimento.

Exemplos

O exemplo a seguir processa todas as mensagens na caixa de entrada como consultas no banco de dados AdventureWorks. Os conjuntos de resultados são retornados ao cliente no formato CSV (valores separados por vírgula).

EXEC sp_processmail
    @filetype = 'CSV'
    ,@separator = ','
    ,@dbuse = 'AdventureWorks';