Partilhar via


Correio da base de dados: Correio em fila, não entregue

Aplica-se a:SQL ServerAzure SQL Managed Instance

Este artigo descreve como solucionar um problema em que mensagens de email do Database Mail são enfileiradas com êxito, mas as mensagens não são entregues.

Diagnosticar o problema

O programa externo do Database Mail regista a atividade de e-mail no banco de dados.

  1. Primeiro, para confirmar se o Database Mail está habilitado, use o Database Mail XPs (opção de configuração do servidor) do sp_configure procedimento armazenado do sistema, como no exemplo a seguir:

    EXEC sp_configure 'show advanced', 1;  
    RECONFIGURE; 
    EXEC sp_configure; 
    GO
    
  2. Em seguida, execute a seguinte instrução no msdb banco de dados para verificar o status da fila de email:

    EXEC msdb.dbo.sysmail_help_queue_sp @queue_type = 'Mail';
    

    Para uma explicação detalhada das colunas, ver sysmail_help_queue_sp (Transact-SQL).

  3. Verifique a sysmail_event_log visualização de atividade. A exibição deve conter uma entrada informando que o programa externo do Database Mail foi iniciado. Se não houver nenhuma entrada na sysmail_event_log vista, consulte o problema Mensagens em fila, Sem entradas em sysmail_event_log.

  4. Se houver erros na vista sysmail_event_log, solucione o erro específico. Verifique na sysmail_allitems visualização o estado das mensagens.

Estado da mensagem não enviada

Um status de não enviado indica que o Programa Externo do Database Mail ainda não processou a mensagem de email.

O programa externo do Database Mail pode ter ficado para trás no processamento de mensagens; a taxa na qual o programa externo processa mensagens depende das condições da rede, do tempo limite de repetição, do volume de mensagens e da capacidade do servidor SMTP. Se o problema persistir, considere usar mais de um perfil para distribuir mensagens entre mais de um servidor SMTP. Revise a carga de email enviada do SQL Server para verificar se os emails enviados são válidos e pretendidos.

Verifique a data de modificação mais recente para mensagens entregues com sucesso. Se a última entrega bem-sucedida ocorreu há algum tempo, verifique a sysmail_event_log exibição para verificar se o programa externo foi iniciado com êxito pelo Service Broker. Se a última tentativa não tiver iniciado o programa externo, verifique se o Programa Externo do Database Mail está localizado no diretório correto e se a conta de serviço do SQL Server tem permissão para executar o executável. Verifique o log de eventos do Aplicativo do Windows em busca de erros relacionados ao Database Mail.

Observação

Para excluir mensagens antigas não enviadas, aguarde até que as mensagens não entregues sejam as mensagens mais antigas na fila e, em seguida, use o procedimento armazenado do sistema msdb.dbo.sysmail_delete_mailitems_sp para excluí-las.

Status da mensagem tentando novamente

Um status de nova tentativa indica que o Database Mail tentou entregar a mensagem ao servidor SMTP, mas não conseguiu. Normalmente, isso é causado por uma interrupção de rede, uma falha do servidor SMTP ou uma conta do Database Mail configurada incorretamente. A mensagem deve eventualmente ter êxito ou falhar e postar uma mensagem no log de eventos do Aplicativo do Windows.

Estado da mensagem enviada

Um status de sent indica que o programa externo do Database Mail entregou com êxito a mensagem de email ao servidor SMTP.

Se a mensagem não chegou ao destino, o servidor SMTP aceitou a mensagem do Database Mail, mas não entregou a mensagem ao destinatário final. Verifique os logs do servidor SMTP ou entre em contato com o administrador do servidor SMTP. Você também pode testar o servidor de email SMTP usando outro cliente, como o Outlook Express.

Falha no status da mensagem

Um status de falha indica que o programa externo do Database Mail não pôde entregar a mensagem ao servidor SMTP.

Nesse caso, a msdb.dbo.sysmail_event_log visualização do sistema contém as informações detalhadas do programa externo. Para obter uma consulta de exemplo que une sysmail_faileditems e sysmail_event_log para recuperar mensagens de erro detalhadas, consulte Verificar o estado de mensagens de email enviadas com o Database Mail. As causas mais comuns de falha são um endereço de destino incorreto ou problemas de rede que impedem que o programa externo alcance uma ou mais das contas de failover. Problemas no servidor SMTP também podem fazer com que esse servidor rejeite email. Usando o Assistente de Configuração do Database Mail, altere o Nível de Registo para Detalhado e envie um email de teste para investigar o local de falha.

Próximo passo