2010-03-11 18 views
4

J'utilise le dernier snapshot indy (installé hier) et les nouvelles bibliothèques SSL.Delphi Indy: impossible de charger les bibliothèques SSL pour la première fois. Une nouvelle tentative fonctionne

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

could't charger les bibliothèques SSL

. Chose amusante, une nouvelle tentative fonctionne toujours. Debugging 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 comme si quelqu'un connaissait la solution à ce problème.

Répondre

5

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

J'utilise Delphi XE-1 sur Win 7/64, avec le SSL et Indy qui sont installés par défaut . Cette semaine, j'ai dû travailler avec SMTP et SSL, et j'ai rencontré le même problème que vous avez signalé. Notre application est assez complexe et est déjà en ligne et déployée dans plusieurs endroits et utilise Indy à plusieurs endroits du code, donc l'installation d'une version plus récente d'Indy et la reconstruction etc, n'était pas très acceptable.

Étant donné que le problème ne se pose que sur le premier passage, je retracée à 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é, donc sur votre deuxième appel à connect vous êtes bon à faire.

Fonctionne bien.

Questions connexes