"الرد عبر البريد الإلكتروني" لا يعمل بعد الآن بعد الترحيل

مرحبًا،

لقد قمنا مؤخرًا بنقل مثيل Discourse المستضاف ذاتيًا من خادم واحد إلى آخر. تم نقل جميع الإعدادات من النظام القديم إلى الجديد، بما في ذلك “الرد عبر البريد الإلكتروني” و"السماح بنشر منشورات جديدة عبر البريد الإلكتروني". نحن نستخدم إعداد discourse/mail-receiver للتعامل مع جزء البريد الإلكتروني.

كانت كل من وظيفة الرد على البريد ووظيفة البريد الجديد تعملان بشكل ممتاز في النظام القديم، لكننا نواجه مشكلة في الخادم الجديد: وظيفة الرد على البريد لا تعمل بعد الآن.

  1. بصفتي مستخدمًا غير معروف، عندما أرسل بريدًا إلكترونيًا إلى العنوان المخصص لهذا الغرض، يمكنني رؤية البريد الوارد. يتم إنشاء مستخدم جديد مؤقت. يتم نشر الرسالة. رائع!
  2. بصفتي مستخدمًا من فريق العمل، يمكنني الرد على هذه الرسالة، ويتم تسليم الرسالة بشكل صحيح. عظيم!
  3. لكن عند محاولة الرد مرة أخرى على ذلك البريد الإلكتروني، مما يجب أن يؤدي إلى رد في Discourse، يفشل الأمر. عندما تصل الرسالة إلى mail-receiver، يحاول تسليمها عبر واجهة برمجة التطبيقات (API)، لكن ذلك يفشل مع أخطاء السجل التالية.

(لأسباب تتعلق بالخصوصية، قمت بتعديل أسماء المستخدمين والنطاقات)

<22>Sep 13 09:45:15 postfix/qmgr[81]: AF8665CA560: from=<test-user@outside-org.nl>, size=9233, nrcpt=1 (queue active)
<23>Sep 13 09:45:15 receive-mail[144]: Recipient: 6ffb2772c3b09bf60fc2705753fb32ce@forum.acme.org
<19>Sep 13 09:45:15 receive-mail[144]: Failed to POST the e-mail to https://forum.acme.org/admin/email/handle_mail: 400
<22>Sep 13 09:45:15 postfix/pipe[143]: AF8665CA560: to=<6ffb2772c3b09bf60fc2705753fb32ce@forum.acme.org>, relay=discourse, delay=1126, delays=1126/0.01/0/0.21, dsn=4.3.0, status=deferred (temporary failure)

كما ذكرت، كان هذا التبادل الكامل يعمل بشكل مثالي في الإعداد القديم. الإعداد الجديد مطابق تمامًا للإعداد القديم (local_discourse/app وlocal_discourse/mail-receiver).

  • هل يمكن لأي شخص أن يخبرني لماذا قد تقوم واجهة برمجة تطبيقات handle_mail بإرجاع خطأ 400 عند استلام بريد إلكتروني رد؟
  • هل من الممكن جعل التسجيل أكثر تفصيلاً حتى أتمكن من البحث بعمق أكبر؟

يجب أن تتمكن من العثور على مزيد من المعلومات في الإدارة - الرسائل الإلكترونية - المرفوضة.

لا، عذراً، حتى لا يظهر كـ ‘مرفوض’. أظن أن ذلك لأنه يصطدم بـ 400 طلب خاطئ…

أتساءل عن الفرق بين ‘البريد الجديد’ و’بريد الرد’. أعتقد أن الفرق الوحيد ذي الصلة هو المستلم. لكن كلاهما يمر عبر المعالج نفسه (mail-receiver) ويتم نشرهما في نفس الـ API: https://forum.acme.org/admin/email/handle_mail

هل قمت بنقل ذلك أيضًا؟ هل قمت بتحديث سجلات MX وفقًا لذلك؟

هل قمت بتغيير اسم مضيف المنتدى؟

  • تم أيضًا نقل مستلم البريد.
  • أسماء المضيفين هي نفسها.

المشكلة ليست في جزء MX. البريد يصل إلى مستلم البريد، كما تظهر السجلات، ولكن بمجرد إرساله للبريد إلى واجهة برمجة التطبيقات (API)، يتم الرد عليه برمز 400 (وهو ما يعني طلبًا خاطئًا).

هناك فارق في الإعداد، رغم ذلك: لقد وضعت وكيلًا عكسيًا (nginx) أمامه للحصول على وظيفة “التوقف المؤقت”، ولربما استضافة مواقع ويب أخرى على نفس المضيف. ومع ذلك، لا يزال الأمر غير واضح بالنسبة لي لماذا سيكون ذلك مشكلة، حيث يتم قبول موضوع جديد دون أي عائق. ومع ذلك، سأرى ما يحدث إذا أزلت الوكيل العكسي من المعادلة…

تحديث
للأسف! قمت بنقل تثبيت Discourse من خلف الوكيل العكسي لـ nginx (أي إعادة بناء app مع الإعدادات الصحيحة وإيقاف تشغيل nginx)، لكن هذا لم يحل المشكلة على الإطلاق!
الآن، أنا حقًا في حيرة. ما الذي يحدث هنا؟

باختصار:

  • كان تثبيت Discourse السابق (app و mail-receiver) يقبل الموضوعات الجديدة والردود
  • بعد الترحيل إلى خادم جديد (نفس الإعدادات تمامًا)، لا تزال الموضوعات الجديدة تُقبل، لكن الردود تُرفض مع خطأ 400 Bad Request.

لقد عثرت على المشكلة التي تسبب هذا الموقف.
أثناء تجربتي مع عدة عملاء بريد إلكتروني، اكتشفت أن الرسائل المرسلة من عميل سطح المكتب الخاص بي (Thunderbird) تواجه خطأ ‘400 Bad Request’، بينما عند استخدام عميل الويب، تصل الردود بنجاح.
وبعد مزيد من التحقيق، تبين أن Thunderbird تحول بطريقة ما إلى ترميز Western (Windows-1252) عند الرد، بينما ظل عميل الويب ملتزمًا بترميز UTF-8. وبعد إجبار Thunderbird على استخدام UTF-8، وصلت الرسالة بنجاح أيضًا.

Thunderbird: لم تمر الرسالة

Content-Type: text/plain; charset=windows-1252; format=flowed
Content-Transfer-Encoding: 7bit

البريد الإلكتروني عبر الويب

Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 7bit

Thunderbird: مرت الرسالة بنجاح

Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit

أعتقد أن جهة استقبال البريد تحتاج إلى إجراء بعض الفحوصات والتنظيف للتأكد من الترميز، لكنني لست مطور Ruby، لذا سأترك هذا الجزء من الكود للمطورين :smiley:

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.