Solucionando problemas do Database Mail: email na fila, não entregue

Este tópico descreve como solucionar o problema de mensagens de email enfileiradas com êxito, mas não entregues.

Diagnosticando o problema

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

Primeiro, para confirmar que o Database Mail está habilitado, use a Opção Database Mail XPs do procedimento armazenado do sistema sp_configure.

Em seguida, execute a seguinte instrução no banco de dados msdb para verificar o status da fila de emails:

sysmail_help_queue_sp @queue_type = 'Mail' ;

Para obter uma explicação detalhada das colunas, consulte a seção "Conjunto de resultados" em sysmail_help_queue_sp (Transact-SQL).

Verifique a exibição sysmail_event_log para observar a atividade. A exibição deve conter uma entrada declarando que o programa externo do Database Mail foi iniciado. Se não houver nenhuma entrada na exibição sysmail_event_log, consulte o sintoma Mensagens na fila, nenhuma entrada em sysmail_event_log. Se houver erros na exibição sysmail_event_log, solucione o erro específico.

Se houver entradas na exibição sysmail_event_log, verifique a exibição sysmail_allitems quanto ao status das mensagens.

Status de mensagem “não enviada”

O status de não enviada indica que o programa externo do Database Mail ainda não processou a mensagem de email. O programa externo do Database Mail pode ter se atrasado no processamento das mensagens; a taxa com a qual o programa externo processa mensagens depende das condições da rede, do tempo limite de novas tentativas, 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.

Verifique a data de modificação mais recente das mensagens entregues com êxito. Se a última entrega com êxito tiver ocorrida já há algum tempo, examine a exibição sysmail_event_log para verificar se o programa externo foi iniciado com êxito pelo Service Broker. Se a última tentativa não iniciou 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 o executável.

ObservaçãoObservação

Para excluir mensagens antigas não enviadas, aguarde até que as mensagens impossíveis de entregar sejam as mais antigas na fila e use sysmail_delete_mailitems_sp para excluí-las.

Status de mensagem “tentando novamente”

O status de tentando novamente indica que o Database Mail tentou entregar a mensagem ao servidor SMTP, mas não teve êxito. Normalmente, isso é causado por uma interrupção da rede, uma falha do servidor SMTP ou uma conta incorretamente configurada do Database Mail. A mensagem dever ter êxito ou falha e postar uma mensagem no log de eventos.

Status de mensagem “enviada”

O status de enviada indica que o programa externo do Database Mail teve êxito na entrega da mensagem ao servidor SMTP. Se a mensagem não chegar ao seu destino, é porque o servidor SMTP a aceitou do Database Mail, mas não a entregou ao destinatário final. Verifique os logs do servidor SMTP ou contate o administrador do mesmo. Você também pode testar o servidor de email SMTP usando outro cliente, como o Outlook Express.

Status de mensagem “falha”

O status de falha indica que o programa externo do Database Mail não conseguiu entregar a mensagem ao servidor SMTP. Neste caso, a exibição sysmail_event_log conterá 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 Como verificar o status de mensagens de email enviadas por Database Mail (Transact-SQL). As causas mais comuns de falha são endereço de destino incorreto ou problemas de rede que impedem o programa externo de acessar uma ou mais contas de failover. Problemas no servidor SMTP também podem fazê-lo rejeitar emails. Usando o Assistente para Configuração do Database Mail, altere o Nível de log para Detalhado e envie um email de teste para investigar o ponto de falha.