从导入的帖子中移除电子邮件地址

大家好,

我正在为一个目前使用邮件列表的组织搭建 Discourse 实例。我们成功导入了邮件(共 2 万条),没有遇到重大问题。不过,由于引用内容、邮件签名等原因,有很多帖子中仍显示着用户的电子邮件地址。

我对 Rake 和 Rails 命令行还算熟练,但一直无法弄清楚如何删除这些邮箱地址。我尝试了各种形式的命令(包括使用和不使用正则表达式),但始终无法匹配到任何帖子:

posts:remap["\<vincent@domain\.com\>","","regex"]
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

太好了,谢谢,我试试看。