Fala Pessoal,
Nesse post quero compartilhar com vocês mais um caso do dia a dia sobre um erro ao tentar enviar e-mail através do SQL Server.
Vou começar falando brevemente sobre o Database Mail, depois irei explicar o problema e por fim algumas possíveis soluções. #gogogo
Database Mail
O Database Mail é um recurso do SQL Server utilizado para enviar e-mails através do próprio banco de dados. Segue abaixo um link com mais detalhes:
https://docs.microsoft.com/pt-br/sql/relational-databases/database-mail/database-mail
O Dirceu Resende tem um post excelente ensinando como Configurar o Database Mail e com várias outras informações interessantes. Vale a pena conferir também!
Problema:
Após configurar o Database Mail, fiz algumas tentativas de envio de e-mail, mas sem sucesso. Todos os e-mails estavam ficando com o status “Unsent”.
Para verificar o envio dos e-mails utilizei a query abaixo:
1 2 3 4 5 6 7 8 9 |
-- Verifica o Status das Solicitações de Envio de Email select top 50 sent_status, CASE sent_status WHEN 0 THEN 'Unsent' WHEN 1 THEN 'Sent' WHEN 2 THEN 'Failed' WHEN 3 THEN 'Retrying' END as sent_status_description, send_request_date, * from msdb.dbo.sysmail_mailitems order by 3 desc |
Também utilizo bastante essa outra query para verificar o motivo da falha no envio de e-mail:
OBS: A descrição do erro vai estar na coluna “description”.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
-- Verifica o Motivo da Falha Envio Email SELECT TOP 50 SEL.event_type, SEL.log_date, SEL.description, SF.mailitem_id, SF.recipients, SF.copy_recipients, SF.blind_copy_recipients, SF.subject, SF.body, SF.sent_status, SF.sent_date FROM msdb.dbo.sysmail_faileditems AS SF JOIN msdb.dbo.sysmail_event_log AS SEL ON SF.mailitem_id = SEL.mailitem_id order by log_date DESC |
Segue abaixo a Versão do SQL Server onde aconteceu o problema nesse caso específico:
Microsoft SQL Server 2016 (SP1-GDR) (KB4458842) – 13.0.4224.16 (X64) Aug 18 2018 09:00:06 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows Server 2012 R2 Standard 6.3 <X64> (Build 9600: ) (Hypervisor)
Como eu já tive um problema parecido com esse no passado, fiz a seguinte validação:
1 – Verifique o Caminho Default da Instalação da sua Instância.
Vá no Object Explorer -> Clique com o Botão Direito no nome da Instância -> Properties
General -> Root Directory
2 – Encontre o Arquivo do Database Mail e tente executar.
Entre no caminho informado no Root Directory -> Pasta Binn.
De dois cliques no arquivo “DatabaseMail.exe”. Nesse momento, apareceu uma janela de erro informando que o “.NET Framework 3.5 (includes .NET 2.0 and 3.0)” não estava instalado. Com isso, o Database Mail não estava funcionando corretamente e nenhum e-mail estava sendo enviado pelo SQL Server!
“Caramba Luiz! E agora??? Deve ser muito complicado resolver isso!!”
Solução:
A Microsoft reportou esse problema e informou algumas soluções paliativas. Resumidamente, esse problema ocorre devido a um erro na instalação do SQL Server 2016 até o SP1. O programa de instalação do SQL Server 2016 exclui o arquivo de configuração “DatabaseMail.exe.config” sem substituí-lo por um novo. Isso faz com que o Database Mail não funcione corretamente na ausência do .NET Framework 3.5.
OBS: O problema foi corrigido a partir do Cumulative Update 2 do SQL Server 2016 SP1.
Inglês:
- Português:
Soluções Paliativas:
1 – Create the exe.config and drop it next to the DatabaseMail.exe under the Binn folder. You can use notepad.exe or any other editor to edit it. Just make sure you save it by using UTF-8 encoding (in notepad.exe, select Save As… and in the Encoding combo box, select UTF-8):
<?xml version=”1.0″ encoding=”utf-8″ ?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy=”true”>
<supportedRuntime version=”v4.0″/>
<supportedRuntime version=”v2.0.50727″/>
</startup>
</configuration>
2 – Run a repair setup action of SQL Server 2016.
3 – Manually install .Net Framework 3.5 on the machine.
No meu caso, utilizei a opção 3 e instalei o .Net Framework 3.5. Depois disso, fiz um novo teste no envio de e-mail e dessa vez foi com sucesso!!!
OBS: Não foi necessário reiniciar o servidor após a instalação.
Atualizações SQL Server – “Service Packs” e “Cumulative Updates”:
Como podemos observar, nesse caso o SQL Server não estava utilizando a última versão disponível do Service Pack e Cumulative Update. Ou seja, a Microsoft já tinha corrigido esse e outros problemas com essas atualizações, mas como o ambiente estava desatualizado o problema continuava.
Portanto, fica aí o alerta para que você valide constantemente as atualizações do SQL Server (e do Windows também)!
Eu particularmente gosto bastante do site abaixo para validar as Versões do SQL Server, Service Packs e Cumulative Updates:
https://buildnumbers.wordpress.com/sqlserver/
Além disso, se você clicar na primeira coluna a página irá listar todos os itens daquela Versão específica. Por exemplo, cliquei no item “SQL Server 2016”.
Download “Script Validação E-mail – Análise e Problema”:
Segue o link para baixar o script utilizado nesse Post:
Espero que tenha gostado e que isso também possa ser útil no seu dia a dia. Até o próximo post!
Me siga no LinkedIn e YouTube para ficar por dentro das novidades.
Abraço,
Luiz Vitor França Lima
Consultor SQL Server