Дельфи Инди:не удается загрузить библиотеки SSL с первого раза.Повторная попытка сработает

StackOverflow https://stackoverflow.com/questions/2424290

  •  19-09-2019
  •  | 
  •  

Вопрос

Я использую последнюю версию 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 ты можешь идти.

Работает нормально.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top