Suppression des adresses e-mail des publications importées

Bonjour à tous,

Je configure une instance Discourse pour une organisation qui utilise actuellement une liste de diffusion. Nous avons importé les courriels (20 000 messages) sans problème majeur, mais il y a beaucoup de messages où les adresses e-mail des utilisateurs apparaissent en raison des citations, des signatures, etc.

Je suis assez compétent avec la ligne de commande rake/rails, mais je peine à comprendre comment supprimer ces adresses e-mail. J’ai essayé diverses formes de cette commande (avec ou sans regex), mais elle ne trouve jamais aucun message :

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

Y a-t-il une meilleure façon de procéder ? J’ai commencé par une regex simple pour trouver ma propre adresse (et oui, j’ai une sauvegarde !).

Puisqu’il s’agit d’une nouvelle instance Discourse, je ne m’inquiète pas de supprimer les mentions @, etc.

Merci.

Voici un petit script écrit pour nous par @pfaffman. Les parties approximatives sont celles que j’ai modifiées. Il comporte quelques fonctionnalités supplémentaires que vous n’avez peut-être pas besoin, par exemple une date de coupure pour qu’il ne supprime les adresses e-mail que des publications antérieures à cette date.

J’ai trouvé qu’il valait mieux remplacer les adresses par ‘email@removed.com’ plutôt que de les supprimer entièrement. Je ne me souviens plus pourquoi — je pense que cela fonctionnait mieux avec les parenthèses environnantes.

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 "nouvelle publication, laissée telle quelle" 
    end 
  end 
  nil 
end

> remove_email_addresses
2 « J'aime »

Excellent, merci, je vais essayer.