Delphi Indy:第一次无法加载SSL库。重试可解决

4
我正在使用最新的Indy快照(昨天安装)和最新的SSL库。
当尝试使用idSMTP发送邮件时,组件第一次连接时会出现异常:
“无法加载SSL库”。
有趣的是,重试总是有效的。调试后发现问题在于IsSSLOpenSSLHeader函数Load: boolean,行号为。
@OpenSSL_add_all_algorithms := LoadFunctionCLib('OpenSSL_add_all_algorithms');

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

2个回答

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);

0

我正在使用安装在默认位置的Delphi XE-1和SSL/Indy,运行于Win 7/64。本周我需要使用SMTP和SSL进行开发,结果遇到了你所报告的同样的问题。我们的应用程序相当复杂,并已在多个位置上部署和运行,在代码的几个点上使用了Indy,因此安装新版本的Indy并重新构建等操作并不可取。

由于这个问题只会在第一次传递时出现,我追踪了一些代码,并提出了这个简单而无痛的解决方案:

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

一旦您调用connect,然后再调用disconnect,SSL库就会被加载,因此在第二次调用connect时,您可以直接使用。

运行良好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接