Delphi Indy:无法第一次加载SSL库。重试有效

时间:2010-03-11 10:51:24

标签: delphi ssl indy

我正在使用最新的indy快照(昨天安装)和最新的SSL库。

尝试使用idSMTP发送邮件时,第一次连接组件时,我得到一个例外:

  

无法加载SSL库

。有趣的是,重试总是有效。调试我发现问题出在IsSSLOpenSSLHeader,函数Loaad:boolean,line

@OpenSSL_add_all_algorithms := LoadFunctionCLib('OpenSSL_add_all_algorithms');

为什么它第一次失败而第二次对我来说仍然不是一个谜,但在我继续调查之前,我想好像有人知道这个问题的解决方案。

2 个答案:

答案 0 :(得分:5)

您使用的代码不是最新的快照。几个星期前,这个错误被修复了。您引用的行不在最新的代码中,它已替换为以下内容:

fn_OPENSSL_add_all_algorithms_noconf = 'OPENSSL_add_all_algorithms_noconf';
fn_OpenSSL_add_all_algorithms = 'OpenSSL_add_all_algorithms';

@OpenSSL_add_all_algorithms := LoadOldCLib(fn_OpenSSL_add_all_algorithms, fn_OPENSSL_add_all_algorithms_noconf);

答案 1 :(得分:0)

我在Win 7/64上使用Delphi XE-1,默认情况下安装了SSL和Indy。本周我不得不使用SMTP和SSL做一些工作,我遇到了你报告的同样问题。我们的应用程序有点复杂,已经在多个位置上运行并部署,它在代码中的几个点使用Indy,因此安装较新版本的Indy和重建等,并不是很可口。

由于问题只出现在第一遍,我追查了一些代码并提出了这个简单,无痛的解决方法:

            smtpClient.connect;
            smtpClient.disconnect;
            smtpClient.connect;
            if not smtpClient.Authenticate then
                raise ... 
            smtpClient.Send(msg);

一旦您拨打connnect然后disconnect,就会加载SSL库,因此在您第二次致电connect时,您就可以了。

工作正常。

相关问题