Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Azure SQL Managed Instance
A solução de problemas do Database Mail envolve a verificação das seguintes áreas gerais do sistema Database Mail. Estes procedimentos são apresentados numa ordem lógica, mas podem ser avaliados em qualquer ordem.
Permissões
Para solucionar todos os aspectos do Database Mail, deve ser um membro da função de servidor fixa sysadmin. Os usuários que não são membros da função de servidor fixa sysadmin só podem obter informações sobre os e-mails que tentam enviar, não sobre e-mails enviados por outros usuários.
Verifique se o service broker está habilitado para msdb
O Database Mail requer que o Service Broker esteja habilitado para o msdb banco de dados.
No SQL Server Management Studio, ligue-se a uma instância do SQL Server usando uma janela do editor de consultas. Verifique se o service broker está ativado no
msdbcom o seguinte script T-SQL:SELECT is_broker_enabled FROM sys.databases WHERE name = 'msdb' ; -- should be 1- Se ativado, continue a Verificar que o correio da base de dados está ativado e Verificar se o correio da base de dados foi iniciado.
- Se não estiver habilitado, o service broker deverá estar habilitado.
No entanto, o script de exemplo a seguir requer acesso exclusivo aos bancos de dados do sistema, portanto, isso pode não ser viável de executar durante o
msdbhorário comercial típico.Pare o serviço SQL Server Agent para que o Service Broker possa obter o bloqueio necessário.
Execute o seguinte para ativar o Service Broker em
msdb. Para obter mais informações, consulte ALTER DATABASE ... CONFIGURAR ENABLE_BROKER.ALTER DATABASE msdb SET ENABLE_BROKER;Reinicie o serviço SQL Server Agent.
Verificar que o correio da base de dados está ativado
No SQL Server Management Studio, ligue-se a uma instância do SQL Server usando uma janela do editor de consultas. Verificar que o correio da base de dados está ativado com o seguinte código:
sp_configure 'show advanced', 1; GO RECONFIGURE; GO sp_configure; GONo painel de resultados, confirme que o
run_valuepara Database Mail XPs (opção de configuração do servidor) está definido como1.- Se for
run_value1, continue a Verificar que o correio da base de dados foi iniciado. - Se o
run_valuenão for1, o Database Mail não estará habilitado.
O Database Mail não é ativado automaticamente para reduzir o número de recursos disponíveis para ataques de um usuário mal-intencionado. Para obter mais informações, consulte Configuração da área de superfície.
- Se for
Se você decidir que é apropriado habilitar o Database Mail, execute o seguinte código:
sp_configure 'show advanced', 1; GO RECONFIGURE; GO sp_configure 'Database Mail XPs', 1; GO RECONFIGURE; GOPara restaurar o
sp_configureprocedimento 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
Verificar que o correio da base de dados foi iniciado
O Programa Externo do Database Mail é ativado quando há mensagens de email a serem processadas. Quando não houver mensagens para enviar durante o período de tempo limite especificado, o programa será encerrado.
No SQL Server Management Studio, ligue-se a uma instância do SQL Server usando uma janela do editor de consultas. Para verificar se o programa externo Database Mail foi iniciado, execute a seguinte instrução:
EXEC msdb.dbo.sysmail_help_status_sp;Se o estado do Database Mail não for
STARTED, execute a seguinte instrução para iniciar o serviço:EXEC msdb.dbo.sysmail_start_sp;Se o programa externo do Database Mail for iniciado, verifique o status da fila de email com a seguinte instrução:
EXEC msdb.dbo.sysmail_help_queue_sp @queue_type = 'mail';A fila de correio deve ter o estado de
RECEIVES_OCCURRING. A fila de status pode variar de momento para momento. Se o estado da fila de correio não forRECEIVES_OCCURRING, tente reiniciar a fila. Pare a fila usando a seguinte instrução:EXEC msdb.dbo.sysmail_stop_sp;Em seguida, inicie a fila usando a seguinte instrução:
EXEC msdb.dbo.sysmail_start_sp;Observação
Use a coluna
lengthno conjunto de resultados desysmail_help_queue_sppara determinar o número de emails na fila.
Os utilizadores estão devidamente configurados para enviar e-mails?
Para enviar o Database Mail, os usuários devem ser membros da função de banco de dados DatabaseMailUserRole no
msdbbanco de dados. Os membros da função de servidor fixa sysadmin e da funçãomsdbsã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 o Database Mail, os usuários devem ter acesso a pelo menos um perfil do Database Mail. Para listar os utilizadores (principais) 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 de Configuração do Database Mail para criar perfis e conceder acesso aos perfis aos usuários.
Os problemas afetam algumas ou todas as contas?
Se você determinou que alguns, mas não todos, os perfis podem enviar email, talvez tenha problemas com as contas do Database Mail usadas pelos perfis problemáticos.
Para determinar quais contas são bem-sucedidas no envio de e-mails, execute a seguinte instrução:
SELECT sent_account_id, sent_date FROM msdb.dbo.sysmail_sentitems;Se um perfil inativo não usar nenhuma das contas listadas, é possível que todas as contas disponíveis nesse perfil não estejam a funcionar corretamente. Para testar contas individuais, use o Assistente de Configuração do Database Mail para criar um novo perfil com uma única conta e use a caixa de diálogo Enviar Email de Teste para enviar emails 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 que o email é enviado quando é entregue com êxito a um servidor de email SMTP. Erros subsequentes, como um endereço de email de destinatário inválido, ainda podem impedir que emails sejam entregues, mas não estarão contidos no log do Database Mail.
Repetir a entrega do correio
Se você tiver determinado que o Database Mail está falhando porque o servidor SMTP não pode ser alcançado de forma confiável, poderá aumentar sua taxa de entrega de email bem-sucedida aumentando o número de vezes que o Database Mail tenta enviar cada mensagem. Inicie o Assistente de 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, em caso de 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 as Tentativas de Repetição de Conta e 60 segundos para o Atraso de Repetição de Conta significam que a entrega de mensagens falhará se o servidor SMTP não puder ser alcançado em 5 minutos. Aumente esses parâmetros para aumentar o tempo antes que a entrega da mensagem falhe.
Observação
Quando um grande número de mensagens está sendo enviado, grandes valores padrão podem aumentar a confiabilidade, mas aumentarão substancialmente o uso de recursos, já que muitas mensagens são tentadas para serem entregues repetidamente. Resolva o problema raiz resolvendo o problema de rede ou servidor SMTP que impede o Database Mail de entrar em contato com o servidor SMTP prontamente.