Indy 10 - IdSMTP.Connect raise "Не удалось загрузить библиотеку SSL".

Вот моя конфигурация:

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

Я загрузил OpenSSL из здесь, оба libeay32.dll и ssleay32.dll находятся в одной папке моего приложения.

Версия Indy: 10.0.52

На моей машине работает следующая команда:

telnet smtp.gmail.com 587

Как правильно подключиться на SMTP-сервере с поддержкой TLS, в моем случае 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);

Это сообщение, возвращенное из 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

Ответ 1

Вот цитата из следующего обсуждения на форумах Embarcadero:

Версия OpenSSL для работы с indy 10.0.52

Indy 8, 9 и ранние 10 версий использовали пользовательские DLL OpenSSL, потому что OpenSSL не раскрыл все, что требовал Indy, поэтому Indy пришлось добавить несколько пользовательских функций для DLL. Позже версии Indy 10 переключились на официальные DLL OpenSSL.

Пользовательские библиотеки OpenSSL Indy больше не распространяются нигде (что я знаю), но вы можете попробовать эту архивированную загрузку:

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

Некоторые старые Indy-специфичные DLL OpenSSL доступны в Fulgan папке SSL-архива.

10.0.52 - это устаревший выпуск Indy 10. С момента выпуска было много изменений в Indy 10. Вы действительно должны перейти на современный выпуск Indy 10, а затем вы можете использовать последние DLL OpenSSL, доступные в Fulgan Основная папка SSL.