Descobri finalmente a origem do problema como descrito no primeiro tópico que o problema ocorria efetivamente quando depois de gerar a hash o componente chamava o procedimento EVP_cleanup(); da biblioteca openssl. Olhando a documentação do openssl verifiquei que esse procedimento liberam os digests e ciphers ta tabela. Agora vou descrever a solução que encontrei.primeiramente declarei a unit libeay32 nos uses depois antes de enviar o email realimentei a tabela com os digests e ciphers para fazer isso chameio os seguintes procedimentos do openssl OpenSSL_add_all_algorithms, OpenSSL_add_all_ciphers, OpenSSL_add_all_digests, ERR_load_crypto_strings. Demonstração abaixo no código.
//arquivo nfc
acbrnf1.NotasFiscais.LoadFromFile('D:\componentes_instalados\acbrnovo\Exemplos\ACBrNFe2\Delphi\51140712070962000104650010000000111000000110-nfe.xml');
acbrnfdnfr1.FastFile := 'DANFeNFCe.fr3';
acbrnf1.NotasFiscais.Imprimir;
acbrml1.AddAddress('emailenvio');
acbrml1.Subject:='tetse';
EVP_cleanup;//chamo para garantir que a tabela do openssl esta limpa
OpenSSL_add_all_algorithms;
OpenSSL_add_all_ciphers;
OpenSSL_add_all_digests;
ERR_load_crypto_strings;
try
acbrml1.Send();
except on E: Exception do
end;
Ps. Essa solução não é a definitiva, pois o problema final esta no envio do email pelo Synapse mas não continuei pesquisando nesta biblioteca.
Ps2 Recomento uma solução tampão no código do componente ACBrMail como descrito abaixo
procedure TACBrMail.Send(UseThread: Boolean);
begin
EVP_cleanup;//chamo para garantir que a tabela do openssl esta limpa
OpenSSL_add_all_algorithms;
OpenSSL_add_all_ciphers;
OpenSSL_add_all_digests;
ERR_load_crypto_strings;
if UseThread then begin if fThread <> nil Then fThread.Terminate; fThread := TACBrThread.Criar(Self); end else SendMail; end;