Estou no SQL Server 2016 e me divertindo muito... meu DB Mail não está enviando e estou ficando sem lugares para procurar. Verifiquei duas vezes as permissões da conta SQL para o executável do DBmail - ele leu e executou. Digitei uma regra para a porta de saída 587 do firewall. Tentei outra conta de e-mail e perfil com os mesmos problemas não enviados. As únicas entradas nos logs (logs de correio db) estão iniciando e terminando o serviço. Não há erros em qualquer lugar que eu possa encontrar. Os e-mails parecem simplesmente entrar na fila de envio e nunca mais sair dela. As contas podem enviar e receber emails por conta própria e de uma instância do SQL Server 2014 em outra máquina.
Eu tenho uma fila de itens com status de enviados "não enviados" e verifiquei todos os locais normais com resultados esperados em todos eles, além de uma longa fila de emails não enviados:
SELECT * FROM msdb..sysmail_event_log order by log_id DESC
SELECT * FROM dbo.sysmail_mailitems
SELECT * FROM dbo.sysmail_sentitems
USE msdb
SELECT sent_status, *
FROM sysmail_allitems
SELECT is_broker_enabled FROM sys.databases WHERE name = 'msdb';
EXECUTE msdb.dbo.sysmail_help_status_sp
Eu tentei desligá-lo e ligá-lo novamente... então eu perdi um DMV etc. que poderia esclarecer essa situação? Este é um problema conhecido com o SQL Server 2016 que não tenho em minhas pesquisas? Quaisquer outras etapas possíveis para enviar este e-mail?
Por capricho, ao verificar as permissões, cliquei duas vezes no executável do email do banco de dados real. O resultado na máquina do SQL Server 2014 foi uma janela de comando vazia. No SQL Server 2016, clicar no executável do DB Mail apresentou esta mensagem:
Não consigo encontrar esse requisito em nenhum lugar na documentação do SQL Server 2016, mas é claramente um requisito. O DB Mail está funcionando perfeitamente sem outras alterações além da instalação do .NET 3.5.
De acordo com o suporte da Microsoft, há um bug na instalação do SQL Server 2016 que faz com que o email do banco de dados não funcione sem o .net 3.5
Há uma solução alternativa criando um arquivo DatabaseMail.exe.config na mesma pasta em que o DatabaseMail.exe existe (pasta Binn) escreva o seguinte no arquivo e salve com codificação utf-8
Fonte: CORREÇÃO: SQL Server 2016 Database Mail não funciona em um computador que não tenha o .NET Framework 3.5 instalado
Dê uma olhada nisso em vez disso. Desta forma, você só precisa copiar um arquivo em vez de instalar o .net 3.5. Precisa instalar o CU1 primeiro. Confira aqui mais detalhes.
Além das causas já mencionadas, também é importante ativar o perfil de e-mail no nível do SQL Server Agent conforme indicado aqui :
Tente reiniciar o SQL Server
Ontem, após meses de execução sem problemas, o SQL Mail parou de enviar mensagens sem motivo aparente, ou melhor, cada tentativa terminava em falha, assim como as tentativas. Eu assumi inicialmente que era um problema com o destino (era específico para um servidor de email específico) e perguntei se a senha havia sido alterada - responda não.
Eventualmente, depois de usar o powershell para provar a mim mesmo que os detalhes e as credenciais da conexão estavam ok, reiniciei o servidor SQL e tudo começou a funcionar novamente.
Quanto ao que causou isso: havia apenas um número moderadamente grande de e-mails enviados para o destino em um único lote - cerca de 400 e-mails, o que aparentemente causou o problema. Cerca de metade destes foram enviados antes de começar a falhar.
Se reiniciar o SQL for problemático, você pode tentar sysmail_stop_sp / sysmail_start_sp ( por sugestão nos comentários ).