هل قمت بمراجعة قاعدة البيانات؟ شعوري الداخلي تجاه هذه المشكلة هو أنه لسبب ما، لا يتم إنشاء حقل البريد الإلكتروني بشكل صحيح هناك، وبالتالي لا يمكن قراءته.
انظر النقطة 2.3 في المنشور الأصلي للتحقق من قاعدة بيانات الفهرس.
هل قمت بمراجعة قاعدة البيانات؟ شعوري الداخلي تجاه هذه المشكلة هو أنه لسبب ما، لا يتم إنشاء حقل البريد الإلكتروني بشكل صحيح هناك، وبالتالي لا يمكن قراءته.
انظر النقطة 2.3 في المنشور الأصلي للتحقق من قاعدة بيانات الفهرس.
قائمة Mailman 2 التي أفكر في استيرادها إلى Discourse كانت (خلال جزء من عمرها) تحتوي على إعداد from_is_list مضبوط على Munge From، بحيث يكون رأس “From:” هو:
From: Listname <listname-bounces@listdomain.com> On Behalf Of [اسم المرسل الأصلي]
بدلاً من:
From: [اسم المرسل الأصلي] <username@example.com>
وهذا جعلني أظن أن أداة الاستيراد ستستورد كل هذه الرسائل كما لو كانت من مستخدم واحد (عبر عنوان البريد الإلكتروني listname-bounces@listdomain.com)… لكن…
السطر الأول الذي يحدد بداية بريد إلكتروني جديد في ملف mbox لا يزال يبدأ بـ:
From username@example.com [تاريخ الوقت المجموعة]
(وتظهر أرشيفات Hyperkitty عنوان البريد الإلكتروني للمرسل الأصلي بشكل طبيعي أيضًا).
لذا، سؤالي هو: هل يأخذ سكريبت الاستيراد عنوان المرسل من رأس “From:” أم من سطر “From”؟ شكرًا لك.
ناقشت هذا بإيجاز في موضوع سابق: Working on a mailman2 to discourse migration script - #10 by dachary
إنه يستخدم رأس From:.
شكرًا لك على الرد السريع! كم سيكون الأمر صعبًا لتغيير هذا؟ ليس بالضرورة بشكل رسمي - رغم أن ذلك قد يساعد الآخرين - ولكن فقط لتغيير السكريبت قبل تشغيله. لا أعرف شيئًا عن لغة Ruby (بعد!)، ولكن إذا كان الأمر مجرد تغيير النقطتين الرأسيتين إلى مسافة…
التغيير ليس بسيطًا، لكنه يجب أن يكون قابلًا للتنفيذ. ليس بالضرورة أن تقوم بتنفيذه في سكريبت الاستيراد. إذا كنت تعرف لغة سكريبت أخرى، فأنا متأكد من أن تحديث رؤوس From: في ملفات mbox قبل تشغيل الاستيراد لن يكون صعبًا…
لكن، لا تتردد في إصلاحه في سكريبت الاستيراد. نحن نرحب بطلب السحب (PR)!
نقطة انطلاق جيدة لإصلاح الرأس يجب أن تكون طريقة each_mail…
شكرًا لك. يبدو أن هذا هو ما يحدد الأمر حاليًا، من السطور 69-70 في ملف indexer.rb:
parsed_email = receiver.mail
from_email, from_display_name = receiver.parse_from_field(parsed_email)
هل من الممكن في تلك المرحلة الحصول على السطر الأول من بريد mbox (أي السطر “From [عنوان البريد الإلكتروني] [التاريخ والوقت]”) من parsed_email واستخراج عنوان البريد الإلكتروني منه؟
لا، يتم تصفية هذا السطر عند تقسيم صندوق الوارد إلى رسائل فردية. يجب عليك حفظ هذه القيمة في طريقة each_mail لاستخدامها لاحقًا.
استمتعت بمحاولة تنفيذ هذا الأمر، قبل أن ألاحظ أن Mailman يخزن رسائل البريد الإلكتروني في mbox بصيغتها الأصلية غير المعدلة، بحيث تحتوي سطر “From:” على نفس عنوان البريد الإلكتروني (للمرسل الأصلي) الموجود في سطر "From " في جميع الحالات، حتى عندما تكون الرسالة قد أُرسلت من عنوان “From: listname-bounces@listname.domain.com”. ![]()
كانت قدرتي محدودة لعدم امتلاكي بيئة تطوير Discourse، أو حتى لغة Ruby، لكنني تمكنت من تحقيق بعض التقدم باستخدام https://rubular.com/ و Ruby Online Compiler & Interpreter - Replit (بالإضافة إلى DuckDuckGo). إذا كنت مستعدًا لإلقاء نظرة على هذا، فسأكون ممتنًا لو أبلغتني عما إذا كان هذا كان سيعمل (أو كاد أن يعمل) لو لزم الأمر…
def each_mail(filename)
raw_message = +''
first_line_number = 1
last_line_number = 0
each_line(filename) do |line|
if line.scrub =~ @split_regex
if last_line_number > 0
#نحن الآن في بداية الرسالة التالية
yield raw_message, first_line_number, last_line_number
raw_message = +''
first_line_number = last_line_number + 1
else
#نحن الآن في بداية هذه الرسالة، لذا احصل على عنوان البريد الإلكتروني
new_email = line.match(/^From (\S+@\S+).*/).captures
end
else
raw_message << line
end
last_line_number += 1
end
#احصل على عنوان البريد الإلكتروني القديم (سطر "From:")
old_email = raw_message.match(/^From: .*<(\S+@\S+)>/).captures
#ضع عنوان "From " في سطر "From:"
raw_message = raw_message.sub(old_email, new_email)
yield raw_message, first_line_number, last_line_number if raw_message.present?
end
حسنًا، لنسمّه كاد أن… ![]()
بعد استيراد أرشيفات البريد بنجاح (mbox)، ستعرض محتويات الرسائل عناوين بريد إلكتروني كانت ستُخفى بواسطة Gmane أو خادم أرشيف mailman2. وهذا يسمح للروبوتات التي تجمع العناوين بحصادها، وأنا أبحث عن طريقة لتجنب ذلك.
شكرًا مقدّمًا على مساعدتكم!
هل الأمر يتعلق باختيار واحد فقط من اثنين؟
عندما حاولت استيراد صندوق بريد MM2 إلى MM3، تم عزل حوالي ربع رسائل البريد الإلكتروني (حيث تم التعامل مع الردود بشكل خاطئ على أنها بدء خيوط جديدة) لأنها لم تكن تحتوي على الرؤوس الصحيحة. يمكن لـ Pipermail في MM2 هيكلة الأرشيف باستخدام الموضوع (إذا لم يكن هناك Message-ID أو أي عنوان آخر يُسمى - لقد نسيت)، لكن آخر مرة تحققت فيها، كان Postorius في MM3 يتجاهل الموضوع. لذا، من المثالي أن يقوم سكريبتك بنفس ما يفعله Pipermail ويحصل على النتيجة الصحيحة في قائمتي في الغالب ![]()
أيضًا — إذا تم استيراد رسائل البريد الإلكتروني بشكل عشوائي، كما ذُكر أعلاه، فهل توجد أي طريقة في Discourse لإصلاح ذلك؟ أم أن الإجابة الوحيدة هي تجربة index_only وإضافة رؤوس إلى ملف mbox أو إعادة ترتيب index.db كما هو مقترح في المنشور المقتبس أدناه؟
شكرًا لك.
نعم، هو كذلك.
ليس حقًا. حسنًا، يمكنك نقل المنشورات، لكن هذا أمر مرهق حتى مع الأتمتة.
أعتقد أن هذه هي أفضل طريقة لحل مشكلتك ما لم تكن مرتاحًا للعمل على سكريبت الاستيراد وإضافة نوع من الوضع الهجين يقوم بالتجميع حسب معرف الرسالة والموضوع في حال كان المعرف الأول مفقودًا.
استيراد البيانات من مجموعات Google معطل حاليًا، لأن Google غيرت واجهة المستخدم وألغت مخطط الزحف عبر AJAX الذي ألغته في عام 2015.
هل نجح أي شخص في استخدام Google Takeout لتصدير ملفات mbox حتى الآن؟
مرحبًا،
كيف يمكننا استخدام هذا لاستيراد مجموعات Google إلى Discourse المستضاف كخدمة SaaS بدلاً من النسخة المحلية؟
إذا دفعت لاستضافة الأعمال لمدة عام، فسيقومون بذلك مجانًا. وإلا، يمكنك القيام بذلك على خادمك الخاص ورفع النسخة الاحتياطية إلى مثيلك ثم مراسلة الدعم لطلب استعادتها.
يمكن أن يكون سكريبت مجموعة Google متقلبًا عند محاولة جعل المصادقة تعمل بشكل صحيح. آخر مرة استخدمتها فيها، اضطررت إلى تعديل نقطة نهاية تسجيل الدخول لجعله يعمل.
هل تتذكر التغيير الذي قمت به لجعل تسجيل الدخول يعمل؟ أنا أواجه الخطأ التالي رغم أنني استخدمت نفس الامتداد المذكور في الخطوات الأولية لتوليد ملف ملفات تعريف الارتباط. بالمناسبة، أنا أعمل مع مجموعة نطاق خاصة.
جاري تسجيل الدخول...
2021-10-31 12:54:41 تحذير Selenium [إهمال] [:browser_options] :options كمعلمة لتهيئة السائق قديمة الاستخدام. استخدم :capabilities مع مصفوفة من قيم القدرات/الخيارات إذا لزم الأمر بدلاً من ذلك.
تتبع (أحدث استدعاءات في النهاية):
31: من script/import_scripts/google_groups.rb:293:in `<main>'
30: من script/import_scripts/google_groups.rb:237:in `crawl'
29: من script/import_scripts/google_groups.rb:181:in `login'
28: من script/import_scripts/google_groups.rb:196:in `add_cookies'
27: من script/import_scripts/google_groups.rb:196:in `each'
26: من script/import_scripts/google_groups.rb:200:in `block in add_cookies'
25: من /usr/local/lib/ruby/gems/2.7.0/gems/selenium-webdriver-4.0.3/lib/selenium/webdriver/common/manager.rb:61:in `add_cookie'
24: من /usr/local/lib/ruby/gems/2.7.0/gems/selenium-webdriver-4.0.3/lib/selenium/webdriver/remote/bridge.rb:349:in `add_cookie'
#0 0x557491640f93 <unknown>: نطاق ملف تعريف الارتباط غير صالح: عدم تطابق 'domain' لملف تعريف الارتباط (Selenium::WebDriver::Error::InvalidCookieDomainError)
عذرًا، لكن إصلاح تسجيل الدخول لا يكفي.
هل أصلح إعادة التصميم الأحدث أي شيء؟
لا، إلا إذا أعادوا إضافة الميزة خلال الـ 25 يومًا الماضية. لا أعتقد أنهم سيفعلون ذلك، لذا ستحتاج أداة التجميع إلى إعادة هيكلة كاملة.