بعد استيراد أرشيفات البريد بنجاح ( mbox )، سيُظهر محتوى الرسائل عناوين بريد إلكتروني كانت ستُطمس بواسطة Gmane أو خادم أرشيف mailman2. وهذا يسمح للروبوتات التي تجمع العناوين بحصادها في منصة Discourse، وأنا أبحث عن طريقة لتجنب ذلك.
إزالة عناوين البريد الإلكتروني من المنشورات على مستوى النظام (ربما عبر إضافة عرض؟)
إذن، هذه مشكلة تتعلق بالاستيراد، والتي (إذا كان لا يزال لديك الوقت) يجب إصلاحها أثناء مرحلة الاستيراد. لقد تفحصت منتداك، وهو مليء بالمحتوى التالف (ترويسات البريد الإلكتروني، وانخفاض غير صحيح في المسافات البادئة) فيما يتعلق بعدم قص رسائل البريد الإلكتروني القديمة، وكذلك رسائل البريد الإلكتروني التي هي ردود على بعضها البعض تم وضعها في مواضيع مختلفة.
إما أنك قمت بتفعيل show_trimmed_content (هنا) أثناء الاستيراد، أو أن تنسيق رسائلك لم يتم التعرف عليه بواسطة كود قص الردود على البريد الإلكتروني (هنا). على الرغم من أن الأمر يبدو وكأنه هناك العديد من المشاكل الأخرى أيضًا.
تخمين جيد: لقد قمت بالفعل بتعيين show_trimmed_content إلى true لأن كود قص الردود يقوم بقص أكثر مما ينبغي في كثير من الأحيان. ليس فقط في ملف mbox المستورد، بل حدث ذلك يوميًا أيضًا مع الردود عبر البريد الإلكتروني. وعلى الرغم من أنه يجب أن يكون من الممكن تحسين أداة القص، إلا أن الأمر بدا وكأنه معركة شاقة. فمستخدمو البريد الإلكتروني سيظلون دائمًا (أ) يرسلون رسائل بريد إلكتروني بتنسيقات غريبة لأي سبب كان، و(ب) يتوقعون عرضها بالكامل.
في الواقع، توجد مشاكل أخرى في عملية الاستيراد: فهي بعيدة كل البعد عن الكمال. وعلى الرغم من أنني سعيد بمناقشتها، إلا أنها ليست مصدر قلق فوري.
وبما أنه يبدو أنني لم أغفل خيارًا في عملية الاستيراد كان من شأنه إخفاء عناوين البريد الإلكتروني، فإن هناك خيارين متبقيين على ما يبدو:
استبدال المحتوى عالميًا في المنشورات بشيء مثل s/{email_regexp}/obfuscated/
العثور على/كتابة ملحق يقوم بإخفاء المحتوى المعروض (محول HTML؟) باستخدام s/{email_regexp}/obfuscated/
تأكد من عمل نسخة احتياطية من Discourse قبل تجربة ما يلي
إليك كيفية استبدال جميع عناوين البريد الإلكتروني في المنشورات بـ [email_redacted]. التعبير النمطي محدود إلى حد ما وقد يفوت بعض العناوين، لكنني أفضل تعبيرًا يمكنني قراءته وفهمه عند تعديل محتوى جميع المنشورات.
$ ./launcher enter app
/var/www/discourse# su - postgres -c psql
psql (13.2 (Debian 13.2-1.pgdg100+1))
اكتب "help" للحصول على المساعدة.
postgres=# \c discourse
أنت متصل الآن بقاعدة بيانات "discourse" كمستخدم "postgres".
discourse=# \set re '[0-9a-z._%+-]+@[a-z0-9.-]+\\.[a-z]{2,64}'
discourse=# update posts set raw = regexp_replace(raw, :'re', '[email_redacted]', 'gi') where raw ~ :'re';
UPDATE 1
discourse=# update posts set cooked = regexp_replace(cooked, :'re', '[email_redacted]', 'gi') where cooked ~ :'re';
UPDATE 1