2014-02-26 333 views
12

Hier ist meine Konfiguration:Indy 10 - IdSMTP.Connect raising "SSL-Bibliothek konnte nicht geladen werden."

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

ich die OpenSSL von here heruntergeladen haben, sowohl libeay32.dll und ssleay32.dll im selben Ordner meiner Anwendung sind.

Die Indy Version ist: 10.0.52

Der folgende Befehl auf meiner Maschine arbeitet:

telnet smtp.gmail.com 587 

Wie man richtig in einem TLS verbinden SMTP-Server aktivieren, in meinem Fall Gmail, mit Indy ?

Es scheint, wie IdSSLOpenSSLHeaders.Load die Adresse nicht auf die folgenden Verfahren, unter anderem finden konnte:

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

Dies ist die Nachricht von WhichFailedToLoad zurückgekehrt ist:

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

Ich folge diesem [Tutorial] ( – EProgrammerNotFound

+0

) Ich glaube, das Problem ist die richtige Version der DLL. Muss ich jeden von ihnen testen? – EProgrammerNotFound

+2

Hier ist ['das Thema'] (https://forums.embarcadero.com/message.jspa?messageID=406858) etwa die gleiche Version wie Sie verwenden. – TLama

Antwort

15

Hier ist ein Zitat aus dem folgenden Diskussion in den Embarcadero Foren:

OpenSSL Version to work with indy 10.0.52

Indy 8, 9 und frühen 10-Versionen custom-built OpenSSL DLLs verwendet, weil OpenSSL nicht alles Indy benötigt Zugang aussetzen, so Indy einige benutzerdefinierte Funktionen zu den DLLs hinzuzufügen hatte. Spätere Indy 10 Versionen wechselten zu den offiziellen OpenSSL DLLs .

Indys benutzerdefinierte OpenSSL DLLs sind nicht mehr überall verteilt (die ich kenne), aber Sie können diese archivierten Download ausprobieren:

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

Einige alte Indy-spezifische OpenSSL DLLs in verfügbar sind Fulgans SSL Archive folder.

10.0.52 ist eine veraltete Version von Indy 10. Seit dieser Veröffentlichung gab es viele Änderungen an Indy 10. Sie sollten wirklich auf modern Indy 10 release aktualisieren, und dann können Sie die neuesten OpenSSL-DLLs verwenden, die in Fulgans SSL main folder verfügbar sind.

+0

Nochmals vielen Dank. Ich aktualisiere jetzt eine neuere Version – EProgrammerNotFound