إزالة عناوين البريد الإلكتروني من المشاركات المستوردة

مرحبًا بالجميع

أقوم بإعداد نسخة Discourse لمنظمة تستخدم حاليًا قائمة بريدية — قمنا باستيراد البريد (20 ألف رسالة) دون مشاكل كبيرة، ومع ذلك هناك العديد من المنشورات حيث تظهر عناوين البريد الإلكتروني للأشخاص بسبب الاقتباسات، والتوقيعات البريدية، وما إلى ذلك.

أنا ملم بشكل معقول بأوامر سطر الأوامر الخاصة بـ Rake و Rails، لكنني أواجه صعوبة في معرفة كيفية إزالة هذه العناوين البريدية. لقد جربت أشكالًا مختلفة من ذلك (باستخدام تعبيرات نمطية regex وبدونها)، لكنها لا تجد أي منشورات على الإطلاق.

rake posts:remap["<vincent@domain\.com>","","regex"]
rake posts:remap["\\<vincent@domain\\.com\\>","","regex"]

هل توجد طريقة أفضل للقيام بذلك؟ لقد بدأت بتعبير نمطي بسيط للعثور على عنوان بريدي الخاص أولاً (ونعم، لدي نسخة احتياطية!).

بما أن هذه نسخة Discourse جديدة، فأنا لا أهتم بإزالة أي ذكر @ وما شابه.

شكرًا.

إليك سكريبت سريع كتبه @pfaffman من أجلنا. أي أجزاء رديئة هي تعديلات قمت بها. يحتوي على بعض الميزات الإضافية التي قد لا تحتاجها، مثل تاريخ قطع، بحيث يحذف عناوين البريد الإلكتروني من المنشورات التي قبل هذا التاريخ فقط.

وجدت أنه من الأفضل استبدال العناوين بـ ‘email@removed.com’ بدلاً من حذفها بالكامل. لا أتذكر السبب بالضبط، لكنني أعتقد أن ذلك كان يتوافق بشكل أفضل مع الأقواس المحيطة.

def remove_email_addresses
  n=0 
  test_mode=false 
  dt=DateTime.new(2019, 1, 1, 0, 0, 0) 
  no_emails="email@removed." 
  Post.where("raw like '%@%'").find_each do |post| 
    sleep 0.1 
    if post.created_at < dt 
      post.raw.gsub!(/[a-z0-9+-_.]+@[a-z0-9+-]+[. ,;\\]/i,no_emails) 
      if test_mode 
        puts post.raw 
        sleep 10 
      end 
      post.save unless test_mode 
      post.rebake! unless test_mode 
      puts "saved" 
      n+=1 
      puts n.to_s 
    else 
      puts "new post, leaving as-is" 
    end 
  end 
  nil 
end

> remove_email_addresses
إعجابَين (2)

ممتاز، شكرًا لك، سأجربها.