استكشاف الأخطاء وإصلاحها للمحتوى المحذوف من رسائل البريد الإلكتروني الواردة

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

عند فحص البريد الإلكتروني في المنشور، يمكنني رؤية البريد الإلكتروني الأصلي المشفر بـ base64، وعند التبويب إلى تبويب النص، أرى أنه تم فك تشفيره دون حذف أي شيء.

./launcher enter app
rails c
Post.find_by(id: 154678)
=> #<Post:0x000055b8da925e08
...

باستخدام rails، أرى أن العمود raw يتوقف فورًا قبل أول ظهور لـ “~~~~~~~~~~~~~~~~”، وأن العمود cooked يحتوي بالطبع على نفس محتوى raw ولكن بصيغة مناسبة لـ HTML. لقد جربت تغيير بعض الإعدادات المتعلقة بتقليم رسائل البريد الإلكتروني، لكنني غير متأكد من كيفية اختبار ما إذا كانت هذه التغييرات تُحدث فرقًا.

كما أفهم الأمر، فإن استخدام إعادة بناء HTML في المنشور أو إصدار الأمر Post.find_by(id: 154678).rebake! في rails سيأخذ محتوى raw ويبني HTML، مما يضبط cooked. لكنني لا أعرف ما إذا كان سيأخذ محتوى raw_email ويعالجها مرة أخرى، لذا فإنني غير متأكد من كيفية اختبار ما إذا كانت الإعدادات المعدلة تُحدث أي تأثير.

كيف يمكنني إخبار Discourse بإعادة معالجة raw_email للمنشور إذا لم يقم rebake! بذلك، حتى أتمكن من التأكد من أنني أتعامل مع المشكلة بشكل صحيح؟

إذا كانت لديك أي أفكار حول كيفية منع حذف المحتوى، فإنها بالتأكيد موضع ترحيب أيضًا.

بينما كنت أواصل البحث عن الموضوعات ذات الصلة، صادفت ميزة الاختبار المتقدم تحت قسم البريد الإلكتروني في لوحة الإدارة. كنت أشك في أن هذه هي الميزة المسؤولة، ولكن باستخدام هذه الميزة، تأكدت من أن الإعداد “تقليم البريد الوارد” هو السبب، وهو مُوصَف بأنه “تقليم جزء من البريد الوارد غير ذي الصلة”.

عند تعطيل هذا الإعداد، أحصل على النتائج الصحيحة لتلك الرسائل، لكن إعادة الخَبز لا تبدو وكأنها تعيد معالجة الرسائل، لذا يبقى السؤال: كيف يمكنني إخبار Discourse بإعادة معالجة المنشورات من رسائلها الواردة؟

بعد البحث في المستودع عن أي كود يتعامل مع معالجة البريد الإلكتروني، وجدت في النهاية مهمة rake المسماة posts:refresh_emails التي تقبل معرف موضوع اختياري. باستخدام ما يلي، كما يوحي الاسم، تمت إعادة معالجة رسائل البريد الإلكتروني وإعادة طباعة جميع المنشورات في الموضوع المحدد.

cd /var/discourse
./launcher enter app
rake posts:refresh_emails['24961']

أدى ذلك إلى توفير المنشورات في ذلك الموضوع دون قص كما هو متوقع مع تعطيل خيار trim incoming emails. هذا كشف عن مشكلة أخرى أحتاج إلى التعامل معها قبل أن أتمكن من المتابعة، لكن هذا ليس موضوع هذا المنشور. لتحديث جميع رسائل البريد الإلكتروني عبر جميع المواضيع، سأتمكن من استخدام مهمة rake على النحو التالي.

cd /var/discourse
./launcher enter app
rake posts:refresh_emails