Дельфи Инди:не удается загрузить библиотеки SSL с первого раза.Повторная попытка сработает
Вопрос
Я использую последнюю версию indy snapshot (установленную вчера) и новейшие библиотеки SSL.
При попытке отправить почту с помощью idSMTP при первом подключении компонента я получаю исключение:
Не удалось загрузить библиотеки SSL
.Забавно, что повторная попытка срабатывает всегда.Отлаживая, я обнаружил, что проблема в isslopensslheader, функции Loaad:логическое значение, строка
@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);
Другие советы
Я использую Delphi XE-1 на Win 7/64, с SSL и Indy, которые установлены по умолчанию.На этой неделе мне пришлось немного поработать с SMTP и SSL, и я столкнулся с той же проблемой, о которой вы сообщили.Наше приложение несколько сложное, оно уже запущено в нескольких местах и использует Indy в нескольких точках кода, поэтому установка более новой версии Indy, перестройка и т.д. Были не очень приятными.
Поскольку проблема возникает только на первом проходе, я просмотрел часть кода и придумал это простое, безболезненное решение:
smtpClient.connect;
smtpClient.disconnect;
smtpClient.connect;
if not smtpClient.Authenticate then
raise ...
smtpClient.Send(msg);
Как только ты позвонишь connnect
а потом disconnect
, библиотеки SSL загружены, поэтому при вашем втором вызове connect
ты можешь идти.
Работает нормально.