أعتقد أن صورة Docker الرسمية discourse/mail-receiver:release قد تم تجاهلها ولم يتم إعادة بنائها منذ فترة طويلة.
يتم صيانة مستودع GitHub بنشاط مستمر:
ومع ذلك، يبدو أن صورة Docker الرسمية:
discourse/mail-receiver:release
تم بناؤها قبل سنتين تقريباً.
يبدو أن هذا يسبب مشاكل توافق مع الإصدارات الحالية من Discourse.
في حالتي، تصل البريد الإلكتروني الواردة إلى مستلم البريد بنجاح، لكنها تُرفض أثناء RCPT TO مع:
450 4.7.1 Recipient address rejected: Internal error, API request failed
لا تزال صورة Docker القديمة تستخدم آلية smtp_should_reject / الرفض السريع.
ومع ذلك، يحتوي كود Discourse الحالي على هذا التعليق:
# this endpoint has been broken for years
# and was used only in the public mail-receiver's fast rejection code,
# which is removed in https://github.com/discourse/mail-receiver/pull/33
لقد أزالت طلب السحب #33 بالفعل كود الرفض السريع من mail-receiver، لكن هذه التغييرات لا تظهر وكأنها مضمنة في صورة discourse/mail-receiver:release المنشورة حالياً.
لا تزال وثائق/قراءة المستلم الرسمي لبريد mail-receiver تشير إلى استخدام:
discourse/mail-receiver:release
لذلك أتساءل عما إذا كان نشر صورة Docker قد تم تفويته ببساطة بعد التغييرات الأخيرة.
هل يمكنكم الرجاء التحقق مما إذا كانت هناك حاجة إلى بناء ونشر صورة discourse/mail-receiver:release جديدة؟
قمت ببناء فرع main الحالي محليًا واكتشفت مشكلة أخرى.
لا يزال صورة release القديمة على Docker Hub تشغّل كود الرفض السريع القديم وتفشل أثناء RCPT مع ظهور الرسالة التالية:
450 4.7.1 Recipient address rejected: Internal error, API request failed
ومع ذلك، فقد أزال فرع main الحالي بالفعل تنفيذ smtp_should_reject / الرفض السريع. بعد بناء main، يفشل Postfix بدلاً من ذلك مع:
warning: connect to private/policy: No such file or directory
451 4.3.5 Recipient address rejected: Server configuration problem
تتبعتُ السبب إلى مرجعين متبقين في Dockerfile:
check_policy_service unix:private/policy
تمت إزالة خدمة السياسة (policy service) نفسها، لكن smtpd_recipient_restrictions لا يزال يشير إلى مقبسها (socket).
أزلت unix:private/policy من smtpd_recipient_restrictions، وأعدت بناء الصورة، ثم تم قبول البريد الوارد عبر SMTP بنجاح.
بعد الانتقال إلى مفتاح API عام (Global API Key)، نجح التسليم إلى Discourse أيضًا:
dsn=2.0.0, status=sent (delivered via discourse service)
يبدو إذن أن هناك مشكلتين منفصلتين:
صورة discourse/mail-receiver:release المنشورة قديمة ولا تزال تحتوي على تنفيذ الرفض السريع القديم.
أزال فرع main الحالي ذلك التنفيذ، لكن Dockerfile لا يزال يهيئ Postfix لاستخدام unix:private/policy.
قد تكون هناك مشكلة منفصلة أيضًا تتعلق بمفاتيح API الدقيقة (granular API keys): فقد أعاد مفتاح مُقيّد على receive emails فقط استجابة HTTP 404 من /admin/email/handle_mail، بينما أعاد مفتاح API العام استجابة HTTP 200.
يمكنني تقديم طلب دمج (PR) للمراجعين القداميين لـ private/policy في Dockerfile إذا كان ذلك مفيدًا.
لا يزال البريد الوارد يعمل على تثبيتي، لكن كل بريد واصل يستمر في تحفيز تحذير Discourse:
the email parameter is deprecated
لأن الصورة المنشورة لا تحتوي على تغيير #37 المدمج.
لذا يبدو أن هذا يؤكد بشكل مستقل المشكلة الأولى التي وجدتها: التغييرات المدمجة في مستودع mail-receiver لم تصل إلى صورة discourse/mail-receiver:release المنشورة.