インポートされた投稿からメールアドレスを削除する

みなさんこんにちは

現在メーリングリストを利用している組織のために、Discourse インスタンスをセットアップしています。メール(2万通)をインポートしましたが、大きな問題はありませんでした。ただし、引用やメール署名などにより、多くの投稿でメールアドレスが表示されてしまっています。

rake や Rails のコマンドラインにはある程度慣れていますので、これらのメールアドレスを削除する方法がわからないことに苦労しています。正規表現や非正規表現など、いくつかの形式を試してみましたが、投稿が見つかりません。

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

ありがとうございます。試してみます。