Indy 10 - IdSMTP.Connect引发"无法加载SSL库".

EPr*_*und 14 delphi ssl smtp indy delphi-6

这是我的配置:

IdSMTP1.Host := 'smtp.gmail.com';
IdSMTP1.Port := 587;
IdSMTP1.UseTLS := utUseExplicitTLS;
IdSMTP1.IOHandler := IdSSLIOHandlerSocketOpenSSL1;
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method := sslvTLSv1;
Run Code Online (Sandbox Code Playgroud)

我从下载了OpenSSL的这里,都libeay32.dllssleay32.dll在我申请的同一文件夹中.

Indy版本是:10.0.52

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

telnet smtp.gmail.com 587
Run Code Online (Sandbox Code Playgroud)

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

似乎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);
Run Code Online (Sandbox Code Playgroud)

这是从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
Run Code Online (Sandbox Code Playgroud)

Rem*_*eau 17

以下是Embarcadero论坛中以下讨论的引用:

OpenSSL版本与indy 10.0.52一起使用

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

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

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

Fulgan的SSL Archive文件夹中提供了一些旧的Indy特定的OpenSSL DLL .

10.0.52是Indy 10的过时版本.自该版本发布以来,Indy 10已经发生了很多变化.您真的应该升级到现代Indy 10版本,然后您可以使用Fulgan的SSL主文件夹中提供的最新OpenSSL DLL .