Solucionando problemas do Database Mail: etapas gerais

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.

Para determinar se o Database Mail está habilitado

  1. No SQL Server Management Studio, conecte-se a uma instância do SQL Server usando uma janela do editor de consultas e, em seguida, execute o seguinte código:

    sp_configure 'show advanced', 1; 
    GO
    RECONFIGURE;
    GO
    sp_configure;
    GO
    

    No painel de resultados, confirme se run_value para Database Mail XPs está definido como 1.

    Se run_value não for 1, o Database Mail não será habilitado. O Database Mail não é habilitado automaticamente para reduzir o número de recursos disponíveis para a investida de um usuário mal-intencionado. Para obter mais informações, consulte Compreendendo a Configuração da Área da Superfície.

  2. Se você decidir que é apropriado habilitar o Database Mail, execute o seguinte código:

    sp_configure 'Database Mail XPs', 1; 
    GO
    RECONFIGURE;
    GO
    
  3. 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
    

Para determinar se os usuários estão configurados apropriadamente para enviar Database Mail

  1. Para enviar Database Mail, os usuários devem ser membros de DatabaseMailUserRole. Membros da função de servidor fixa sysadmin e da função db_owner do msdb tornam-se, automaticamente, membros de DatabaseMailUserRole. Para listar todos os outros membros de DatabaseMailUserRole, execute a seguinte instrução:

    EXEC msdb.sys.sp_helprolemember 'DatabaseMailUserRole';
    
  2. Para adicionar usuários à função DatabaseMailUserRole, use a seguinte instrução:

    sp_addrolemember @rolename = 'DatabaseMailUserRole'
       ,@membername = '<database user>';
    
  3. 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;
    
  4. Use o Assistente para Configuração do Database Mail para criar perfis e conceder acesso a eles aos usuários.

Para confirmar se o Database Mail foi iniciado

  1. 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;
    
  2. Se a ativação do Database Mail tiver sido iniciada, execute a seguinte instrução para iniciá-la:

    EXEC msdb.dbo.sysmail_start_sp;
    
  3. 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 emails deve ter o estado de RECEIVES_OCCURRING. O status da fila pode variar a todo instante. Se o estado da fila de emails não for RECEIVES_OCCURRING, tente interromper a fila, usando sysmail_stop_sp, e, em seguida, inicie-a por meio de sysmail_start_sp.

ObservaçãoObservação

Use a coluna length do conjunto de resultados de sysmail_help_queue_sp para determinar o número de emails na fila.

Para determinar se os problemas do Database Mail estão afetando parcial ou totalmente as contas em um perfil

  1. Caso tenha determinado que apenas alguns perfis estão conseguindo enviar emails, pode haver algum problema com as contas do Database Mail utilizadas 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;
    
  2. Se um perfil que não está funcionando não usar nenhuma das contas listadas, é possível que todas as contas disponíveis ao perfil não estejam funcionando adequadamente. 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.

  3. Para exibir as mensagens de erro retornadas pelo Database Mail, execute a seguinte instrução:

    SELECT * FROM msdb.dbo.sysmail_event_log;
    
ObservaçãoObservação

O Database Mail considera a mensagem enviada quando consegue entregá-la a um servidor de email SMTP. Erros subseqüentes, 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.

Para configurar o Database Mail para tentar entregar o email novamente

  1. 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. Alternativamente, você pode associar mais contas ao perfil, de modo que, diante da ocorrência de falha na conta primária, o Database Mail use a conta de failover para enviar os emails.

  2. Na página Configurar Parâmetros do Sistema, os valores padrão de 5 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 prolongar o número de tentativas de entregar a mensagem antes de declarar falha.

ObservaçãoObservaçã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.

Segurança

Você deve ser membro da função de servidor fixa sysadmin para solucionar problemas de todos os aspectos do Database Mail. Usuários que não são membros da função de servidor fixa sysadmin podem, apenas, obter informações sobre os emails que tentam enviar, e não sobre emails enviados por outros.