نوع مصادقة غير معترف به في SMTP مع Office 365

أواجه هذه الرسالة الخطأ وقد جربت العديد من الخيارات المختلفة. أستخدم Office 365

خطأ: 504 5.7.4 نوع المصادقة غير معروف [MN2PR20CA0010.namprd20.prod.outlook.com]

الإعدادات هنا:

  DISCOURSE_SMTP_ADDRESS: smtp.office365.com
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: البريد الإلكتروني
  DISCOURSE_SMTP_PASSWORD: "كلمة المرور"
  DISCOURSE_SMTP_ENABLE_START_TLS: true

جرّب إعدادك أولاً باستخدام أداة openssl

  1. قم بتشفير مستخدم Office365 الخاص بك
echo -n "بريدك الإلكتروني هنا " | openssl enc -base64
xxx_encoded_email_xxx
  1. قم بتشفير كلمة المرور الخاصة بك
echo -n "كلمة المرور هنا" | openssl enc -base64
xxx_encoded_password_xxx
  1. افتح اتصالاً
openssl s_client -connect SMTP.office365.com:587 -starttls smtp -quiet -crlf
  1. اختبر المصادقة
  • انتظر الرسالة 250 SMTPUTF8
  • أرسل EHLO SMTP.office365.com
  • انتظر الاستجابة
    250-PR3P189CA0029.outlook.office365.com Hello [88.138.0.68]
    250-SIZE 157286400
    250-PIPELINING
    250-DSN
    250-ENHANCEDSTATUSCODES
    250-AUTH LOGIN XOAUTH2
    250-8BITMIME
    250-BINARYMIME
    250-CHUNKING
    250 SMTPUTF8
    
  • أرسل AUTH LOGIN
  • انتظر 334 VXNlcm5hbWU6
  • أرسل اسم المستخدم المشفر الخاص بك xxx_encoded_email_xxx
  • انتظر 334 UGFzc3dvcmQ6
  • أرسل كلمة المرور المشفرة الخاصة بك xxx_encoded_password_xxx
  • انتظر الاستجابة 235 2.7.0 Authentication successful

إذا كانت اختبارات 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 وما إليهما. لا يمكنني شرح سبب عمله أو ما إذا كان هذا أمرًا جيدًا للحالات العامة.
ج.

أوه، أيضًا لم أستطع أبدًا جعله يعمل مع my_domain.mail.protection.outlook.com على المنفذ 25 أو 587، أما ما نجح فهو smtp.office365.com:587.

أستخدم 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. هذا سيوفر بعض عمليات التصحيح غير الضرورية.

يبدو لي أن هناك :bug:. لقد قدمت طلب سحب:

مرحبًا،

تم تطبيق التصحيح أعلاه في نسختي الحالية، لكنني ما زلت أحصل على نفس النتيجة.

الخطأ: 504 5.7.4 نوع المصادقة غير معترف به مع smtp.office365.com.

هل لدى أي شخص أي أفكار؟

كيف يمكنني تعديل سكريبت lib/tasks/emails.rake لجعل هذا يعمل؟

كتحديث عام حول هذه القضية، تقوم مايكروسوفت (MS) حاليًا بإزالة المصادقة القديمة لبروتوكولي SMTP وPOP3، وهو ما سيُصعّب الأمور إذا كنت تستخدم Office 365 كمزود للبريد الإلكتروني. السياسة الافتراضية المطبقة حاليًا تمنع مصادقة SMTP (SMTP AUTH)، وتحتاج إلى تمكينها لكل صندوق بريد على حدة. آمل أن يكون هذا مفيدًا — لقد قضيت صباح أمس وأنا أضرب رأسي بالحائط بسبب هذه المشكلة.

إنها خسارة حقيقية خاصة فيما يتعلق بـ POP، لأن إعداد البريد الوارد سيصبح أكثر صعوبة بكثير ما لم يضيف Discourse دعم بروتوكول IMAP لصناديق البريد الواردة.

هناك حل سهل للبريد الوارد الذي يتضمن حاوية لاستقباله. كان يُسمى سابقًا “مباشر”، لكن شخصًا ما اعترض على الاسم وتم تغييره، ولم أعد أستطيع العثور عليه.

هناك أيضًا دعم IMAP لصناديق الوارد الجماعية. لكن الدعم يغطي في الغالب Gmail فقط.

حسنًا، يجب اعتبار تشغيل خادم بريدك الخاص وسيلة ملاذ أخير في أي حال. أعتقد أنه كان يُشار إليه بـ

اعتبارًا من عام 2023، لم يعد مصادقة بروتوكول POP3 ممكنة في Exchange.

إذا كنت تستخدم PHPMailer
فحاول عن طريق التعليق/إزالة السطر ومحاولة: //$mail->isSMTP(true);