E-Mail-Adressen aus importierten Beiträgen entfernen

Hallo zusammen,

ich richte eine Discourse-Instanz für eine Organisation ein, die derzeit eine Mailingliste nutzt. Wir haben die Mails (20.000 Nachrichten) ohne größere Probleme importiert, jedoch zeigen sich in vielen Beiträgen E-Mail-Adressen durch Zitate, E-Mail-Signaturen usw.

Ich bin mit den rake/rails-Befehlszeilenbefehlen recht vertraut, habe aber Schwierigkeiten herauszufinden, wie ich diese E-Mail-Adressen entfernen kann. Ich habe verschiedene Varianten davon ausprobiert (mit und ohne Regex), aber es werden keine Beiträge gefunden.

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

Gibt es einen besseren Weg, dies zu tun? Ich habe mit einem einfachen Regex begonnen, um zuerst meine eigene Adresse zu finden (und ja, ich habe ein Backup!).

Da es sich um eine neue Discourse-Instanz handelt, mache ich mir keine Sorgen darum, @-Erwähnungen usw. zu entfernen.

Danke.

Hier ist ein kurzes Skript, das @pfaffman für uns geschrieben hat. Alle unzulänglichen Teile sind Änderungen von mir. Es enthält einige Funktionen, die Sie möglicherweise nicht benötigen, beispielsweise ein Stichtagsdatum, sodass E-Mail-Adressen nur aus Beiträgen vor diesem Datum entfernt werden.

Ich habe festgestellt, dass es am besten ist, Adressen durch ‘email@removed.com’ zu ersetzen, anstatt sie vollständig zu entfernen. Ich kann mich nicht mehr erinnern, warum – ich denke, es verhielt sich in Kombination mit umgebenden Klammern besser.

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 „Gefällt mir“

Ausgezeichnet, danke. Ich werde es versuchen.