تعذر إرسال رسائل البريد الإلكتروني باستخدام خادم SMTP المحلي

لقد اختبرت خادم SMTP باستخدام Telnet:
اتصل Telnet بخادم SMTP.
سمح لي Telnet بالمصادقة على خادم SMTP.
سمح لي Telnet بإرسال بريد إلكتروني بنجاح باستخدام خادم SMTP، واستخدمت في Telnet نفس القيم تمامًا الموجودة في ملف /var/discourse/containers/app.yaml.

يُفيد أداة فحص Discourse بأن Discourse قد اتصل بنجاح بخادم SMTP.
يُفيد أداة فحص Discourse بأن Discourse فشل في إرسال بريد إلكتروني تجريبي.

لذلك، تحتوي Discourse على أخطاء تمنعها من إرسال رسائل البريد الإلكتروني.

أقترح أن المشكلة تكمن في إعداداتك وليس في أخطاء داخل Discourse. :wink:

إعجابَين (2)

هل تستخدم smtp-relay.gmail.com بالصدفة، ربما من DigitalOcean؟ يبدو أن هذا قد تعطل مؤخرًا ولا أحد متأكد تمامًا من السبب حتى الآن.

لا. لأن خادم SMTP يعمل بشكل مثالي كما تم وصفه مسبقًا، وتم تثبيت Discourse بشكل صحيح ويعيد الشاشة التي تطلب البريد الإلكتروني لتسجيل المسؤول بشكل صحيح. ومع ذلك، لا يتم إرسال هذا البريد الإلكتروني.

أنا أستخدم خادم SMTP محليًا يقع على نفس الجهاز الذي يحتوي على حاوية Discourse Docker.

وجدت خطأ في /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

ماذا يعني هذا الخطأ؟

3 إعجابات

يبدو أن رسالة الخطأ أعلاه تتحدث عن شهادة SSL الخاصة بالخادم.

شهادة SSL على الخادم صحيحة ولها اسم المضيف الصحيح.

يبدو أن هذا خطأ في Discourse، حيث لا يمكن لـ Discourse اكتشاف شهادة SSL الخاصة بالخادم بشكل صحيح.

هذا لا يبدو وكأنه عيب في Discourse. بل يبدو أنه مشكلة في إعدادات محلل DNS الخاص بالمضيف أو في شهادة SSL.

بما أن telnet لا يستخدم SSL، أفترض أن هذا هو السبب في أنك وجدت أنه يعمل. في نظام Linux، قد تجد أنه يمكنك إجراء اختبار أبعد قليلاً باستخدام OpenSSL لاختبار الاتصال وفحص الشهادات بدلاً من ذلك.

هناك بعض المعلومات هنا قد تساعدك: https://docs.pingidentity.com/bundle/solution-guides/page/iqs1569423823079.html

يعمل HTTPS على الموقع لأنه يظهر قفلًا أخضر في شريط العناوين. لا يوجد أي خطأ في شهادة SSL للموقع. المشكلة تكمن في الطريقة التي يكتشف بها Discourse شهادة SSL.

هذا الخطأ لا يتعلق بشهادة الموقع، بل بشهادة خدمة SMTP.

إعجابَين (2)

شهادة خدمة SMTP هي مجرد شهادة SSL الخاصة بالخادم، وليست شهادة SSL الخاصة بالموقع الإلكتروني. شهادة SSL الخاصة بالخادم صحيحة وتعمل بشكل سليم.

لإعداد خادم SMTP محلي على نفس الجهاز الذي يحتوي على حاوية Discourse، لا يحدد Discourse بالضبط القيم الصحيحة لإعدادات SMTP في ملف app.yml. وهذا يؤدي إلى قدر كبير من الارتباك والأخطاء.

في إعدادات app.yml، لا يحدد Discourse بوضوح ما الذي يُقصد به DISCOURSE_SMTP_ADDRESS.

في الواقع، يكون القيمة هي subdomain.domain.com، وليس mail.subdomain.domain.com.

القيم الصحيحة:
DISCOURSE_SMTP_ADDRESS: forum.domain.com
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: postmaster@forum.domain.com
DISCOURSE_SMTP_PASSWORD: "password"
DISCOURSE_SMTP_ENABLE_START_TLS: true           # (اختياري، الافتراضي true)

لا يحدد Discourse بوضوح ما المقصود بـ “شهادة الخادم” في عبارة الخطأ التي تظهر بعد فشل إرسال بريد التسجيل الأولي. تقع رسالة الخطأ في:
/discourse/shared/standalone/log/rails/production.log
“استثناء الوظيفة: اسم المضيف “mail.forum.domain.com” لا يطابق شهادة الخادم”.

ومع ذلك، في الواقع، فإن “شهادة الخادم” هي ببساطة شهادة SSL الخاصة بالخادم.
أيضًا، في رسالة الخطأ، يشير Discourse بشكل خاطئ إلى “اسم المضيف”، بينما ما يُقصد به في الواقع هو في الحقيقة DISCOURSE_SMTP_ADDRESS.

حدثت صعوبة بسبب غموض Discourse.

كان الحل ببساطة هو تعيين شهادة SSL الخاصة بالخادم إلى شهادة SSL الصحيحة.

عند نشر المشكلة على منتدى Discourse، كانت هناك العديد من الإجابات المضللة وغير الواضحة.

يجب على Discourse إصلاح هذه المشاكل.

إعجابَين (2)

الآن يقول دكتور Discourse أن البريد الإلكتروني قد تم إرساله:

جاري إرسال البريد إلى admin@email.com...
جاري اختبار الإرسال إلى admin@email.com باستخدام forum.domain.com:587.
تم الاتصال بخادم SMTP بنجاح.
جاري الإرسال إلى admin@email.com...
تم قبول البريد من قبل خادم SMTP.

ومع ذلك، لا يوجد بريد إلكتروني في صندوق الوارد المستلم أو في مجلد الرسائل غير المرغوب فيها.

كيف يمكن حل هذه المشكلة؟

انظر إلى سجلات خادم SMTP المحلي الخاص بك. إذا قام Discourse بتسليمها بشكل صحيح إلى خادم SMTP، فإن الأمر لا يعود إلى Discourse.

في سجلات Exim4، تظهر رسالة خطأ. ما معنى ذلك؟

2021-01-21 00:39:39 H=(localhost.localdomain) [172.17.0.2] X=TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256 CV=no F=<noreply@forum.domain.com> A=dovecot_plain:postmaster@forum.domain.com rejected RCPT <admin@email.com>: فشل التحقق من المرسل