vincentp
(Vincent)
1
大家好,
我正在为一个目前使用邮件列表的组织搭建 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