دلفي إندي: لا يمكن تحميل مكتبات SSL لأول مرة. أعمال المحاولة
سؤال
أنا أستخدم أحدث لقطة إندي (مثبتة بالأمس) وأحدث مكتبات SSL.
عند محاولة إرسال بريد باستخدام IDSP، في المرة الأولى التي يربط فيها المكونات، أحصل على استثناء:
لا يمكن تحميل مكتبات SSL
. وبعد شيء مضحك هو، وأعمال المحاولة دائما. تم تصحيح الأخطاء التي وجدتها أن المشكلة في issslopensslheader، وظيفة Load: 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);
نصائح أخرى
أنا أستخدم 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
أنت جيد للذهاب.
يعمل بشكل جيد.