إذا كانت اختبارات OpenSSL تعمل، لكن اختبار الاتصال الذي يشغله discourse-doctor يفشل لا يزال عند استخدام هذه الإعدادات، فما الخطوة التالية؟ على الرغم من نجاح اختبار OpenSSL، فإن اتصال Discourse يفشل مع رمز الخطأ 504 5.7.4 (نوع المصادقة غير معترف به)… يُفترض أنه لا يتعرف على طريقة المصادقة LOGIN. لقد حاولت إضافة DISCOURSE_SMTP_AUTHENTICATION: login إلى ملف app.yml، لكن ذلك لم يساعد.
مجرد رأي، إليك ما وجدته. دخلت إلى صورة Docker وبدأت في تجربة الأمر مع سكريبت lib/tasks/emails.rake وملف config/discourse.conf. بعد عدة ساعات، وبعد تجربة كل تركيبة ممكنة من smtp.office365.com و.mail.protection.outlook.com مع AUTH login و AUTH plain، قمت بإلغاء التعليق عن الكتلة الموجودة أعلاه بدء STMP.
# نود فعل ذلك، لكن Net::SMTP يفشل عند استخدام starttls
#Net::SMTP.start(smtp[:address], smtp[:port]) do |s|
# s.starttls if !!smtp[:enable_starttls_auto] && s.capable_starttls?
# s.auth_login(smtp[:user_name], smtp[:password])
#end
تجربة هذا كما هو أدت إلى انتهاء مهلة القراءة.
تعديله بهذه الطريقة - استدعاء new بدلاً من start - أدى إلى إرسال ناجح.
Net::SMTP.new(smtp[:address], smtp[:port]) do |s|
s.enable_starttls
s.auth_login(smtp[:user_name], smtp[:password])
end
هذه أول تجربة لي مع Ruby و Rake وما إليهما. لا يمكنني شرح سبب عمله أو ما إذا كان هذا أمرًا جيدًا للحالات العامة.
ج.
أستخدم socketlabs.com كخدمة تسليم بريد إلكتروني، وواجهت مشكلة مماثلة. في حالتي، كان الحل هو تعديل ملف lib/tasks/emails.rake على النحو التالي:
تغيير السطر: Net::SMTP.start(smtp[:address], smtp[:port], 'localhost', smtp[:user_name], smtp[:password])
إلى Net::SMTP.start(smtp[:address], smtp[:port], 'localhost', smtp[:user_name], smtp[:password], smtp[:authentication])
بدون هذا التغيير، لا يتم تمرير DISCOURSE_SMTP_AUTHENTICATION: login إلى كود SMTP على المستوى الأدنى.
لم أجرب هذا لمعرفة ما إذا كان الكود المعدل يعمل أيضًا مع طرق المصادقة الأخرى، لكنه يحل المشكلة لمصادقة تسجيل الدخول.
يمكنني تأكيد أن إضافة smtp[:authentication]
إلى استدعاء Net::SMTP.start وتعيين DISCOURSE_SMTP_AUTHENTICATION: login
في ملف app.yml يحل المشكلة في صفحة اختبار البريد الإلكتروني.
أعتقد أن رسائل البريد الإلكتروني العادية تُرسل عبر مكتبة mail، وأن تعيين DISCOURSE_SMTP_AUTHENTICATION: login
في ملف app.yml كافٍ لعمل المكتبة بشكل صحيح.
ومع ذلك، أعتقد أنه يجب تعديل lib/tasks/emails.rake لاستخدام إعداد DISCOURSE_SMTP_AUTHENTICATION. هذا سيوفر بعض عمليات التصحيح غير الضرورية.
كتحديث عام حول هذه القضية، تقوم مايكروسوفت (MS) حاليًا بإزالة المصادقة القديمة لبروتوكولي SMTP وPOP3، وهو ما سيُصعّب الأمور إذا كنت تستخدم Office 365 كمزود للبريد الإلكتروني. السياسة الافتراضية المطبقة حاليًا تمنع مصادقة SMTP (SMTP AUTH)، وتحتاج إلى تمكينها لكل صندوق بريد على حدة. آمل أن يكون هذا مفيدًا — لقد قضيت صباح أمس وأنا أضرب رأسي بالحائط بسبب هذه المشكلة.
إنها خسارة حقيقية خاصة فيما يتعلق بـ POP، لأن إعداد البريد الوارد سيصبح أكثر صعوبة بكثير ما لم يضيف Discourse دعم بروتوكول IMAP لصناديق البريد الواردة.