Etapas gerais de solução de problemas do Database Mail
Aplica-se a: SQL Server Instância Gerenciada de SQL do Azure
Solucionar problemas do Database Mail requer verificar as áreas gerais a seguir do sistema do Database Mail. Esses procedimentos são apresentados em uma ordem lógica, mas podem ser avaliados em qualquer ordem.
Permissões
Você deve ser membro da função de servidor fixa sysadmin para solucionar problemas de todos os aspectos do Database Mail. Os usuários que não são membros da função de servidor fixa sysadmin só podem obter informações sobre os emails que tentam enviar, não sobre os emails enviados por outros usuários.
O Database Mail está habilitado
No SQL Server Management Studio, conecte-se a uma instância do SQL Server usando uma janela do editor de consulta e então execute o seguinte código:
sp_configure 'show advanced', 1; GO RECONFIGURE; GO sp_configure; GO
No painel de resultados, confirme se o run_value para Database Mail XPs está definido como 1. Se o valor run_value não for 1, o Database Mail não está habilitado. O Database Mail não é habilitado automaticamente para reduzir o número de recursos disponíveis para ataque por um usuário mal-intencionado. Para obter mais informações, veja Compreender a configuração da área da superfície.
Se você decidir que é apropriado habilitar o Database Mail, execute o seguinte código:
sp_configure 'Database Mail XPs', 1; GO RECONFIGURE; GO
Para restaurar o procedimento sp_configure ao seu estado padrão, que não mostra opções avançadas, execute o seguinte código:
sp_configure 'show advanced', 0; GO RECONFIGURE; GO
Os usuários estão configurados corretamente para enviar emails
Para enviar o Database Mail, os usuários devem ser membros da função de banco de dados DatabaseMailUserRole no banco de dados
msdb
. Os membros da função de servidor fixa sysadmin e da funçãomsdb
db_owner são automaticamente membros da função DatabaseMailUserRole. Para listar todos os outros membros do DatabaseMailUserRole, execute a seguinte instrução:EXEC msdb.sys.sp_helprolemember 'DatabaseMailUserRole';
Para adicionar usuários à função DatabaseMailUserRole, use a seguinte instrução:
USE msdb; GO sp_addrolemember @rolename = 'DatabaseMailUserRole' ,@membername = '<database user>';
Para enviar Database Mail, os usuários devem ter acesso a, pelo menos, um perfil do Database Mail. Para listar os usuários (entidades) e os perfis aos quais eles têm acesso, execute a instrução a seguir.
EXEC msdb.dbo.sysmail_help_principalprofile_sp;
Use o Assistente para Configuração do Database Mail para criar perfis e conceder acesso a eles aos usuários.
O database mail é iniciado
O Programa Externo do Database Mail é ativado quando há mensagens de email a serem processadas. Quando não há nenhuma mensagem a enviar no tempo limite especificado, o programa é encerrado. Para confirmar se a ativação do Database Mail foi iniciada, execute a instrução a seguir:
EXEC msdb.dbo.sysmail_help_status_sp;
Se a ativação do Database Mail não tiver sido iniciada, execute o seguinte comando para iniciá-la:
EXEC msdb.dbo.sysmail_start_sp;
Se o programa externo do Database Mail tiver sido iniciado, verifique o status da fila de emails com a seguinte instrução:
EXEC msdb.dbo.sysmail_help_queue_sp @queue_type = 'mail';
A fila de correio eletrônico deve ter o estado de
RECEIVES_OCCURRING
. O status da fila pode variar a todo instante. Se o estado da fila de correio eletrônico não forRECEIVES_OCCURRING
, tente reiniciar a fila. Interrompa a fila usando a instrução a seguir:
EXEC msdb.dbo.sysmail_stop_sp;
Então inicie a fila usando a instrução a seguir:
EXEC msdb.dbo.sysmail_start_sp;
Observação
Use a coluna de comprimento no conjunto de resultados de sysmail_help_queue_sp
para determinar o número de emails na fila do Mail.
Problemas afetam a algumas ou todas as contas
Se você determinou que alguns perfis, mas não todos, podem enviar emails, é possível que haja problemas com as contas do Database Mail usadas pelos perfis problemáticos. Para determinar quais contas estão conseguindo enviar email, execute a seguinte instrução:
SELECT sent_account_id, sent_date FROM msdb.dbo.sysmail_sentitems;
Se um perfil que não estiver funcionando não usar nenhuma das contas listadas, é possível que todas as contas disponíveis para o perfil não estejam funcionando corretamente. Para testar as contas separadamente, use o Assistente para Configuração do Database Mail para criar um novo perfil com uma única conta e, em seguida, use a caixa de diálogo Enviar Email de Teste para enviar um email usando a nova conta.
Para exibir as mensagens de erro retornadas pelo Database Mail, execute a seguinte instrução:
SELECT * FROM msdb.dbo.sysmail_event_log;
Observação
O Database Mail considera a mensagem enviada quando consegue entregá-la a um servidor de email SMTP. Erros subsequentes, como um endereço de email destinatário inválido, podem impedir que a mensagem seja entregue, mas não são inseridos no log do Database Mail.
Tentar novamente a entrega de emails
Caso tenha determinado que o Database Mail está falhando porque não está sendo possível alcançar confiavelmente o servidor SMTP, você poderá aumentar a taxa de êxito na entrega de emails aumentado o número de vezes que o Database Mail tenta enviar cada mensagem. Inicie o Assistente para Configuração do Database Mail e selecione a opção Exibir ou alterar parâmetros do sistema. Como alternativa, você pode associar mais contas ao perfil para que, após o failover da conta principal, o Database Mail use a conta de failover para enviar emails.
Na página Configurar Parâmetros do Sistema, os valores padrão de cinco vezes para Tentativas de Repetição de Conta e de 60 segundos para Atraso na Repetição de Conta significam que a entrega da mensagem falhará se o servidor SMTP não puder ser alcançado em 5 minutos. Aumente esses parâmetros para aumentar o tempo antes de a entrega da mensagem falhar.
Observação
Quando um grande número de mensagens é enviado, valores padrão grandes podem aumentar a confiabilidade, porém aumentarão substancialmente o uso de recursos à medida que seguidas tentativas de entregar a mensagem forem sendo feitas. Trate a raiz do problema, resolvendo a condição da rede ou do servidor SMTP que está impedindo o Database Mail de contatar prontamente o servidor SMTP.
Verificar se o Service Broker está habilitado para o msdb
O Database Mail exige que o Service Broker esteja habilitado para o banco de dados msdb
. Verifique se o Service Broker está habilitado em msdb
com o seguinte script T-SQL:
SELECT is_broker_enabled FROM sys.databases WHERE name = 'msdb' ; -- should be 1
Se não estiver habilitado, o Service Broker deverá estar habilitado. No entanto, o script de amostra a seguir requer acesso exclusivo aos bancos de dados do sistema msdb
e, portanto, pode não ser viável executá-lo durante o horário comercial normal. Para obter mais informações, confira ALTER DATABASE ... SET ENABLE_BROKER.
ALTER DATABASE msdb SET ENABLE_BROKER;