Removendo endereços de e-mail de posts importados

Olá a todos,

Estou configurando uma instância do Discourse para uma organização que atualmente usa uma lista de e-mails. Importamos os e-mails (20 mil mensagens) sem grandes problemas, no entanto, há muitas postagens onde os endereços de e-mail das pessoas aparecem devido a citações, assinaturas de e-mail etc.

Tenho um conhecimento razoável dos comandos de linha do rake/rails, mas estou com dificuldade para descobrir como remover esses endereços de e-mail. Tentei várias formas disso (regex e não regex), mas nenhum deles encontra nenhuma postagem.

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

Existe uma maneira melhor de fazer isso? Comecei com uma regex simples para encontrar meu próprio endereço primeiro (e sim, tenho um backup!).

Como se trata de uma nova instância do Discourse, não me importo em remover menções com @ etc.

Obrigado.

Aqui está um script rápido que @pfaffman escreveu para nós. As partes ruins são coisas que eu mudei. Ele tem alguns recursos extras que você pode não precisar, como uma data de corte para que ele remova apenas endereços de e-mail de postagens anteriores a essa data.

Achei melhor substituir os endereços por ‘email@removed.com’, em vez de removê-los completamente. Não me lembro o motivo — acho que funcionava melhor com os colchetes ao redor.

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 "nova postagem, deixando como está" 
    end 
  end 
  nil 
end

> remove_email_addresses

Excelente, obrigado. Vou tentar.