Erros comuns com o database mail
Aplica-se a: SQL Server Instância Gerenciada de SQL do Azure
Este artigo descreve alguns erros comuns encontrados no Database Mail e suas soluções.
Não foi possível localizar o procedimento armazenado 'sp_send_dbmail'
O procedimento armazenado sp_send_dbmail é instalado no banco de dados msdb. 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 o Assistente de Configuração do Database Mail para habilitar e configurar o Database Mail.
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 Assistente de Configuração do Database Mail para permitir um usuário do msdb ou grupo acessar um perfil.
Permissão negada em sp_send_dbmail
Este tópico descreve como solucionar o problema de uma mensagem de erro que afirma que o usuário que está tentando enviar 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 Database Mail, é necessário ser um usuário do banco de dados msdb e membro 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 estiver ativada no banco de dados msdb, o Database Mail formará a fila do banco de dados de mensagens, mas não conseguirá entregar as mensagens. Nesse caso, as mensagens do Service Broker permanecem na fila de email do Service Broker. O Service Broker não ativará o programa externo e, logo, não haverá entradas de log em sysmail_event_log, nem atualizações do 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 banco de dados msdb:
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 a opção Database Mail XPs do procedimento armazenado do sistema sp_configure, 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
O Database Mail pode ser interrompido no banco de dados msdb. 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 host de correio, execute o seguinte comando no banco de dados msdb:
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 do diálogo utilizado pelo Database Mail, veja sysmail_configure_sp (Transact-SQL).