Delphi Indy : SSL 라이브러리를 처음로드 할 수 없습니다. 재 시도가 작동합니다
문제
최신 Indy Snapshot (어제 설치)과 최신 SSL 라이브러리를 사용하고 있습니다.
IDSMTP를 사용하여 메일을 보내려고 할 때 구성 요소가 처음 연결되면 예외가 발생합니다.
SSL 라이브러리를로드 할 수 없습니다
. 재미있는 것은, 재시 도는 항상 작동한다는 것입니다. 디버깅 문제가 issslopensslheader, function loaad : boolean, line에 있다는 것을 알았습니다.
@OpenSSL_add_all_algorithms := LoadFunctionCLib('OpenSSL_add_all_algorithms');
왜 처음에는 실패하고 두 번째가 아닌 이유는 여전히 나에게 미스터리입니다.
해결책
사용중인 코드는 최신 스냅 샷이 아닙니다. 그 버그는 몇 주 전에 고정되었습니다. 당신이 견적 한 줄은 최신 코드에 있지 않으며 다음과 같이 대체되었습니다.
fn_OPENSSL_add_all_algorithms_noconf = 'OPENSSL_add_all_algorithms_noconf';
fn_OpenSSL_add_all_algorithms = 'OpenSSL_add_all_algorithms';
@OpenSSL_add_all_algorithms := LoadOldCLib(fn_OpenSSL_add_all_algorithms, fn_OPENSSL_add_all_algorithms_noconf);
다른 팁
Win 7/64에서 Delphi XE-1을 사용하고 있으며 기본적으로 설치된 SSL과 Indy와 함께 사용하고 있습니다. 이번 주에 나는 SMTP 및 SSL과 함께 일을해야했고, 당신이보고 한 것과 같은 문제를 해결했습니다. 우리의 응용 프로그램은 다소 복잡하고 이미 여러 위치에 살고 있으며 배치되어 있으며 코드의 여러 지점에서 Indy를 사용하므로 최신 버전의 Indy 및 Rebuilding 등을 설치하는 것은 그다지 맛이 좋지 않았습니다.
문제는 첫 번째 패스에서만 발생하므로 코드 중 일부를 추적 하고이 단순하고 고통스러운 해결 방법을 제시했습니다.
smtpClient.connect;
smtpClient.disconnect;
smtpClient.connect;
if not smtpClient.Authenticate then
raise ...
smtpClient.Send(msg);
일단 전화하면 connnect
그리고 disconnect
, SSL 라이브러리가로드되므로 두 번째 호출에 connect
당신은 갈 수 있습니다.
잘 작동합니다.