Solucionando problemas do Database Mail: email na fila, nenhuma entrada em sysmail_event_log ou no log de eventos de aplicativos do Windows

Este tópico descreve como solucionar oum problema em que as mensagens de email são enfileiradas com êxito, mas nenhuma atividade do programa externo aparece na exibição sysmail_event_log ou no log de eventos de aplicativos do Windows.

O Database Mail depende do Service Broker para enfileirar mensagens de email. Se o Database Mail for interrompido ou se a entrega de mensagens do Service Broker não estiver ativada no banco de dados msdb, o Database Mail formará a fila do banco de dados de mensagens, mas não conseguirá entregar as mensagens. Nesse caso, as mensagens do Service Broker permanecerão na fila do Service Broker Mail. O Service Broker não ativará o programa externo e, logo, não haverá entradas de log em sysmail_event_log, nem atualizações do status do item em sysmail_allitems e nas exibições relacionadas.

Execute a seguinte instrução para verificar se o Database Mail está habilitado:

SELECT is_broker_enabled FROM sys.databases WHERE name = 'msdb';

Um valor de 0 indica que a entrega de mensagens do Service Broker não está ativada no banco de dados msdb. Para corrigir o problema, ative o Service Broker no banco de dados. Para obter informações sobre como ativar a entrega de mensagens do Service Broker, consulte Como ativar a entrega de mensagens do Service Broker em bancos de dados (Transact-SQL).

O Database Mail depende de uma série de procedimentos armazenados internos. Para reduzir a área de superfície, esses procedimentos armazenados encontram-se desabilitados em novas instalações do SQL Server. Para habilitar esses procedimentos armazenados, use a opção Database Mail XPs do procedimento armazenado do sistema sp_configure.

O Database Mail pode ser interrompido no banco de dados msdb. Para verificar o status do Database Mail, execute a seguinte instrução:

EXECUTE dbo.sysmail_help_status_sp;

Para iniciar o Database Mail em um banco de dados host de correio, execute o seguinte comando no banco de dados msdb:

EXECUTE dbo.sysmail_start_sp;

O Service Broker examina o tempo de vida da caixa de diálogo das mensagens quando se encontra ativado; portanto, toda mensagem que estiver na fila de transmissão do Service Broker por mais tempo que o tempo de vida configurado para a caixa de diálogo falhará imediatamente. O Database Mail atualiza o status de mensagens que falharam em sysmail_allitems e em exibições relacionadas. Você deve decidir se as mensagens devem ou não ser enviadas novamente. Para obter mais informações sobre como configurar o tempo de vida da caixa de diálogo utilizado pelo Database Mail, consulte sysmail_configure_sp (Transact-SQL).