这是我的配置:
IdSMTP1.Host := 'smtp.gmail.com';
IdSMTP1.Port := 587;
IdSMTP1.UseTLS := utUseExplicitTLS;
IdSMTP1.IOHandler := IdSSLIOHandlerSocketOpenSSL1;
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method := sslvTLSv1;
我已从here下载了OpenSSL,libeay32.dll
和ssleay32.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
答案 0 :(得分:17)
以下是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不再分布在任何地方(我知道 但是你可以试试这个存档的下载:
Fulgan的SSL Archive folder中提供了一些旧的Indy特定的OpenSSL DLL。
10.0.52是Indy 10的过时版本。自该版本发布以来,Indy 10已经发生了很多变化。你真的应该升级到modern Indy 10 release,然后你可以使用Fulgan SSL main folder中提供的最新OpenSSL DLL。