لقد اختبرت خادم SMTP باستخدام Telnet:
اتصل Telnet بخادم SMTP.
سمح لي Telnet بالمصادقة على خادم SMTP.
سمح لي Telnet بإرسال بريد إلكتروني بنجاح باستخدام خادم SMTP، واستخدمت في Telnet نفس القيم تمامًا الموجودة في ملف /var/discourse/containers/app.yaml.
يُفيد أداة فحص Discourse بأن Discourse قد اتصل بنجاح بخادم SMTP.
يُفيد أداة فحص Discourse بأن Discourse فشل في إرسال بريد إلكتروني تجريبي.
لذلك، تحتوي Discourse على أخطاء تمنعها من إرسال رسائل البريد الإلكتروني.
لا. لأن خادم SMTP يعمل بشكل مثالي كما تم وصفه مسبقًا، وتم تثبيت Discourse بشكل صحيح ويعيد الشاشة التي تطلب البريد الإلكتروني لتسجيل المسؤول بشكل صحيح. ومع ذلك، لا يتم إرسال هذا البريد الإلكتروني.
وجدت خطأ في /var/discourse/shared/standalone/log/rails/production.log:
Rendering layouts/email_template.html.erb
Rendered layouts/email_template.html.erb (Duration: 0.1ms | Allocations: 32)
Delivered mail f915c15e-9c4d-4d4e-9527-81bc4984540c@forum.domain.com (63.7ms)
Job exception: hostname "mail.forum.domain.com" does not match the server certificate
هذا لا يبدو وكأنه عيب في Discourse. بل يبدو أنه مشكلة في إعدادات محلل DNS الخاص بالمضيف أو في شهادة SSL.
بما أن telnet لا يستخدم SSL، أفترض أن هذا هو السبب في أنك وجدت أنه يعمل. في نظام Linux، قد تجد أنه يمكنك إجراء اختبار أبعد قليلاً باستخدام OpenSSL لاختبار الاتصال وفحص الشهادات بدلاً من ذلك.
يعمل HTTPS على الموقع لأنه يظهر قفلًا أخضر في شريط العناوين. لا يوجد أي خطأ في شهادة SSL للموقع. المشكلة تكمن في الطريقة التي يكتشف بها Discourse شهادة SSL.
لإعداد خادم SMTP محلي على نفس الجهاز الذي يحتوي على حاوية Discourse، لا يحدد Discourse بالضبط القيم الصحيحة لإعدادات SMTP في ملف app.yml. وهذا يؤدي إلى قدر كبير من الارتباك والأخطاء.
في إعدادات app.yml، لا يحدد Discourse بوضوح ما الذي يُقصد به DISCOURSE_SMTP_ADDRESS.
لا يحدد Discourse بوضوح ما المقصود بـ “شهادة الخادم” في عبارة الخطأ التي تظهر بعد فشل إرسال بريد التسجيل الأولي. تقع رسالة الخطأ في:
/discourse/shared/standalone/log/rails/production.log
“استثناء الوظيفة: اسم المضيف “mail.forum.domain.com” لا يطابق شهادة الخادم”.
ومع ذلك، في الواقع، فإن “شهادة الخادم” هي ببساطة شهادة SSL الخاصة بالخادم.
أيضًا، في رسالة الخطأ، يشير Discourse بشكل خاطئ إلى “اسم المضيف”، بينما ما يُقصد به في الواقع هو في الحقيقة DISCOURSE_SMTP_ADDRESS.
حدثت صعوبة بسبب غموض Discourse.
كان الحل ببساطة هو تعيين شهادة SSL الخاصة بالخادم إلى شهادة SSL الصحيحة.
عند نشر المشكلة على منتدى Discourse، كانت هناك العديد من الإجابات المضللة وغير الواضحة.
الآن يقول دكتور Discourse أن البريد الإلكتروني قد تم إرساله:
جاري إرسال البريد إلى admin@email.com...
جاري اختبار الإرسال إلى admin@email.com باستخدام forum.domain.com:587.
تم الاتصال بخادم SMTP بنجاح.
جاري الإرسال إلى admin@email.com...
تم قبول البريد من قبل خادم SMTP.
ومع ذلك، لا يوجد بريد إلكتروني في صندوق الوارد المستلم أو في مجلد الرسائل غير المرغوب فيها.