Delphi Indy: ne peut pas charger les bibliothèques SSL première fois. Une nouvelle tentative de travaux

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

  •  19-09-2019
  •  | 
  •  

Question

J'utilise le dernier instantané indy (installé hier) et les plus récentes bibliothèques SSL.

Lorsque vous essayez d'envoyer un courrier à l'aide idSMTP, la première fois que le composant se connecte, je reçois une exception:

  

charger could't les bibliothèques SSL

. Le plus drôle est, une nouvelle tentative fonctionne toujours. Débogage J'ai trouvé que le problème est en IsSSLOpenSSLHeader, fonction Loaad: booléen, ligne

@OpenSSL_add_all_algorithms := LoadFunctionCLib('OpenSSL_add_all_algorithms');

Pourquoi échouer la première fois et non le second est encore un mystère pour moi, mais avant que je continue enquête je voudrais que si quelqu'un connaît la solution à ce problème.

Était-ce utile?

La solution

Le code que vous utilisez n'est pas le dernier instantané. Ce bug a été corrigé il y a quelques semaines. La ligne que vous citez est pas dans le dernier code, il a été remplacé par ce qui suit:

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

Autres conseils

J'utilise Delphi XE-1 sur Win 7/64, avec le SSL et Indy qui sont installés par défaut. Cette semaine, je devais faire un travail avec SMTP et SSL, et je suis tombé sur le même problème signalé. Notre application est un peu complexe et vivent déjà et déployé dans plusieurs endroits et il utilise Indy à plusieurs points dans le code, afin d'installer une version plus récente d'Indy et de reconstruction, etc., n'a pas été très agréable au goût.

Étant donné que le problème ne se pose que sur le premier passage, je traçais à travers une partie du code et est venu avec cette simple solution indolore:

            smtpClient.connect;
            smtpClient.disconnect;
            smtpClient.connect;
            if not smtpClient.Authenticate then
                raise ... 
            smtpClient.Send(msg);

Une fois que vous appelez connnect puis disconnect, les bibliothèques SSL sont chargés, ainsi de suite votre deuxième appel à vous connect êtes bon pour aller.

fonctionne très bien.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top