Indy 10 - IdSMTP.Connect 引发“无法加载 SSL 库”。

Posted

技术标签:

【中文标题】Indy 10 - IdSMTP.Connect 引发“无法加载 SSL 库”。【英文标题】:Indy 10 - IdSMTP.Connect raising "Could not load SSL library." 【发布时间】:2014-03-29 19:24:25 【问题描述】:

这是我的配置:

IdSMTP1.Host := 'smtp.gmail.com';
IdSMTP1.Port := 587;
IdSMTP1.UseTLS := utUseExplicitTLS;
IdSMTP1.IOHandler := IdSSLIOHandlerSocketOpenSSL1;
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method := sslvTLSv1;

我从 here 下载了 OpenSSL,libeay32.dllssleay32.dll 都在我的应用程序的同一个文件夹中。

Indy 版本是:10.0.52

以下命令正在我的机器上运行:

telnet smtp.gmail.com 587

如何使用 Indy 在启用 TLS 的 SMTP 服务器(在我的情况下为 Gmail)中正确连接?

似乎IdSSLOpenSSLHeaders.Load 找不到以下程序的地址,其中包括:

  @IdSslSessionGetId := LoadIndyFunction(fn_SSL_SESSION_get_id);
  @IdSslSessionGetIdCtx := LoadIndyFunction(fn_SSL_SESSION_get_id_ctx);
  @IdSslCtxGetVersion := LoadIndyFunction(fn_SSL_CTX_get_version);
  @IdSslCtxSetOptions := LoadIndyFunction(fn_SSL_CTX_set_options);

  @iddes_set_odd_parity := LoadFunctionCLib(fn_des_set_odd_parity);
  @iddes_set_key := LoadFunctionCLib(fn_des_set_key);
  @iddes_ecb_encrypt := LoadFunctionCLib(fn_des_ecb_encrypt);

这是WhichFailedToLoad返回的消息:

 SSL_CTX_set_info_callback_indy 
 X509_STORE_CTX_get_app_data_indy 
 X509_get_notBefore_indy 
 X509_get_notAfter_indy 
 SSL_SESSION_get_id_indy 
 SSL_SESSION_get_id_ctx_indy 
 SSL_CTX_get_version_indy 
 SSL_CTX_set_options_indy 
 des_set_odd_parity 
 des_set_key des_ecb_encrypt

【问题讨论】:

我正在关注这个tutorial 我认为问题在于 dll 的正确版本。我必须测试它们中的每一个吗? 这里是the topic,与您使用的版本大致相同。 @RemyLebeau 谢谢你,雷米。感谢 TLama,感谢您的宝贵时间 【参考方案1】:

这是 Embarcadero 论坛中以下讨论的引述:

OpenSSL Version to work with indy 10.0.52

Indy 8、9 和早期 10 版本使用定制的 OpenSSL DLL,因为 OpenSSL 没有公开 Indy 需要访问的所有内容,因此 Indy 必须添加 DLL 的一些自定义函数。后来的 Indy 10 版本切换到 官方 OpenSSL DLL。

Indy 的自定义 OpenSSL DLL 不再分布在任何地方(我知道 of),但你可以试试这个存档下载:

http://web.archive.org/web/20071022121646/http://www.intelicom.si/www.nsf/2434100e396ad3f3c125705100369374/d6b8e150fe453facc1257082006fc8b9/$FILE/indy_openssl096g.zip

Fulgan 的 SSL Archive folder 中提供了一些旧的 Indy 特定 OpenSSL DLL。

10.0.52 是 Indy 10 的过时版本。自该版本以来,Indy 10 发生了很多变化。你真的应该升级到modern Indy 10 release,然后你可以使用Fulgan 的SSL main folder 中提供的最新OpenSSL DLL。

【讨论】:

embarcadero 论坛和现代 indy10 版本的链接似乎已失效。

以上是关于Indy 10 - IdSMTP.Connect 引发“无法加载 SSL 库”。的主要内容,如果未能解决你的问题,请参考以下文章

delphi 7 下安装 indy 10.5.8 教程

INDY10 BASE64编码

在 Delphi 2009 中逐步升级 Indy 10

Delphi中Indy 10的安装和老版本的卸载

Delphi组件indy 10中IdTCPServer修正及SSL使用心得

Indy 10.5.8 for Delphi and Lazarus 修改版(2011)