Compartilhar via


Erros comuns com o database mail

Aplica-se a:SQL ServerInstância Gerenciada de SQL do Azure

Este artigo descreve alguns erros comuns encontrados no Database Mail e suas soluções.

Para executar comandos T-SQL em sua instância do SQL Server, use o SQL Server Management Studio (SSMS), a extensão MSSQL para Visual Studio Code, sqlcmd ou sua ferramenta de consulta T-SQL favorita.

Não foi possível localizar o procedimento armazenado 'sp_send_dbmail'

O procedimento armazenado sp_send_dbmail é instalado no msdb banco de dados. Você deve executar sp_send_dbmail do banco de dados msdb, ou especificar um nome de três partes para o procedimento armazenado.

Exemplo:

EXEC msdb.dbo.sp_send_dbmail ...

Ou:

USE msdb;
GO
EXEC dbo.sp_send_dbmail ...

Use Configurar o email do banco de dados para habilitar e configurar o email do banco de dados.

O perfil não é válido

Há duas causas possíveis para essa mensagem. Ou o perfil especificado não existe ou o usuário que está executando sp_send_dbmail (Transact-SQL) não tem permissão para acessar o perfil.

Para verificar permissões para um perfil, execute o procedimento armazenado sysmail_help_principalprofile_sp (Transact-SQL) com o nome do perfil. Use o procedimento armazenado sysmail_add_principalprofile_sp (Transact-SQL) ou o Configurar o email do banco de dados para conceder permissão para um msdb usuário ou grupo acessar um perfil.

Permissão negada em sp_send_dbmail

Este artigo descreve como solucionar problemas de uma mensagem de erro informando que o usuário que está tentando enviar o Database Mail não tem permissão para executar sp_send_dbmail

O texto do erro é:

EXECUTE permission denied on object 'sp_send_dbmail', 
database 'msdb', schema 'dbo'.

Para enviar emails de banco de dados, os usuários devem ser usuários do banco de dados msdb e membros da função de banco de dados DatabaseMailUserRole no banco de dados msdb. Para adicionar usuários ou grupos do msdb a essa função, use o SQL Server Management Studio ou execute a instrução a seguir para o usuário ou função que precisa enviar Database Mail.

EXEC msdb.dbo.sp_addrolemember @rolename = 'DatabaseMailUserRole'
    ,@membername = '<user or role name>';
GO

Para obter mais informações, veja sp_addrolemember e sp_droprolemember.

Database Mail colocado na fila, nenhuma entrada em sysmail_event_log ou no log de eventos de aplicativos do Windows

O Database Mail depende do Service Broker para enfileiramento de mensagens de email. Se o Database Mail for interrompido ou se a entrega de mensagens do Service Broker não for ativada no banco de dados, o msdb Database Mail enfileira mensagens no banco de dados, mas não poderá entregar as mensagens. Nesse caso, as mensagens do Service Broker permanecem na fila de email do Service Broker. O Service Broker não ativa o programa externo, portanto, não há entradas de log em sysmail_event_log e nenhuma atualização para o status do item em sysmail_allitems e nas exibições relacionadas.

Execute a seguinte instrução para verificar se o Service Broker está habilitado no msdb banco de dados:

SELECT is_broker_enabled FROM sys.databases WHERE name = 'msdb';

Um valor de 0 indica que a entrega de mensagens do Service Broker não está ativada no banco de dados msdb. Para corrigir o problema, ative o Service Broker no banco de dados com o seguinte comando Transact-SQL:

USE master ;
GO

ALTER DATABASE msdb SET ENABLE_BROKER ;
GO

O Database Mail depende de uma série de procedimentos armazenados internos. Para reduzir a área de superfície, esses procedimentos armazenados encontram-se desabilitados em novas instalações do SQL Server. Para habilitar esses procedimentos armazenados, use os XPs do Database Mail (opção de configuração do servidor) do procedimento armazenado do sp_configure sistema, como no exemplo a seguir:

EXEC sp_configure 'show advanced options', 1;  
RECONFIGURE;
EXEC sp_configure 'Database Mail XPs', 1;  
RECONFIGURE;
EXEC sp_configure 'show advanced options', 0;
RECONFIGURE;
GO  

No banco de dados msdb, o Database Mail pode estar interrompido. Para verificar o status do Database Mail, execute o seguinte comando:

EXECUTE dbo.sysmail_help_status_sp;

Para iniciar o Database Mail em um banco de dados de host de email, execute o seguinte comando no msdb banco de dados:

EXECUTE dbo.sysmail_start_sp;

O Service Broker examina o tempo de vida da caixa de diálogo das mensagens quando se encontra ativado; portanto, toda mensagem que estiver na fila de transmissão do Service Broker por mais tempo que o tempo de vida configurado para a caixa de diálogo falhará imediatamente. O Database Mail atualiza o status de mensagens que falharam em sysmail_allitems e em exibições relacionadas. Você deve decidir se as mensagens devem ou não ser enviadas novamente. Para obter mais informações sobre como configurar o tempo de vida da caixa de diálogo que o Database Mail usa, consulte sysmail_configure_sp.

Próxima etapa