Após uma importação bem-sucedida de arquivos de e-mail ( mbox ), o conteúdo das mensagens exibirá endereços de e-mail que teriam sido ofuscados pelo Gmane ou pelo servidor de arquivo mailman2. Isso permite que bots que coletam endereços os capturem no Discourse, e estou procurando uma maneira de evitar isso.
Remover globalmente os e-mails nas postagens (talvez um plugin de exibição?)
Então, esse é um problema com a importação que (se você ainda tiver a oportunidade) deve ser corrigido durante a fase de importação. Analisei seu fórum e ele está cheio de conteúdo quebrado (cabeçalhos de e-mail, indentação incorreta) em relação aos e-mails antigos que não foram cortados, mas também e-mails que são respostas uns aos outros sendo colocados em tópicos diferentes.
Ou você ativou show_trimmed_content (aqui) durante a importação ou o formato da sua mensagem não foi reconhecido pelo código de corte de respostas (aqui). Embora pareça que há muitos outros problemas também.
Boa suposição: de fato, configurei show_trimmed_content para verdadeiro porque o código do recortador de respostas frequentemente corta mais do que deveria. Não apenas nos mbox importados, isso também aconteceu diariamente com respostas por e-mail. Embora fosse possível melhorar o recortador, parecia uma batalha cuesta acima. Usuários de e-mail sempre (i) enviarão e-mails com formatação estranha, por qualquer motivo, e (ii) esperarão que sejam exibidos por completo.
De fato, há outras questões na importação: está longe de ser perfeita. Embora eu ficaria feliz em discutir essas questões, elas não são uma preocupação imediata.
Como parece que não perdi nenhuma opção na importação que ofuscaria os e-mails, aparentemente restam duas opções:
Substituir globalmente o conteúdo das postagens por algo como s/{email_regexp}/ofuscado/
Encontrar/criar um plugin que ofusque o conteúdo exibido (conversor HTML?) com s/{email_regexp}/ofuscado/
Certifique-se de fazer backup do Discourse antes de tentar o seguinte
Veja como substituir todos os endereços de e-mail nos posts por [email_redacted]. A expressão regular é bastante limitada e provavelmente deixará alguns de fora, mas prefiro uma expressão que eu possa ler e entender ao modificar o conteúdo de todos os posts.
$ ./launcher enter app
/var/www/discourse# su - postgres -c psql
psql (13.2 (Debian 13.2-1.pgdg100+1))
Digite "help" para obter ajuda.
postgres=# \c discourse
Agora você está conectado ao banco de dados "discourse" como usuário "postgres".
discourse=# \set re '[0-9a-z._%+-]+@[a-z0-9.-]+\\.[a-z]{2,64}'
discourse=# update posts set raw = regexp_replace(raw, :'re', '[email_redacted]', 'gi') where raw ~ :'re';
UPDATE 1
discourse=# update posts set cooked = regexp_replace(cooked, :'re', '[email_redacted]', 'gi') where cooked ~ :'re';
UPDATE 1