Tras una importación exitosa de archivos de correo ( mbox ), el contenido de los mensajes mostrará direcciones de correo electrónico que habrían sido ofuscadas por Gmane o el servidor de archivo mailman2. Esto permite que los bots que recopilan direcciones las extraigan en Discourse, y estoy buscando una forma de evitarlo.
Eliminar globalmente los correos electrónicos en las publicaciones (¿quizás un plugin de visualización?).
Así que este es un problema con la importación que (si aún tienes la oportunidad) debería corregirse durante la fase de importación. He revisado tu foro y está lleno de contenido roto (encabezados de correo electrónico, sangría incorrecta) en relación con que los correos antiguos no se recortan, pero también con correos que son respuestas entre sí y que se colocan en diferentes temas.
O bien habilitaste show_trimmed_content (aquí) durante la importación o el formato de tus mensajes no fue reconocido por el código del recortador de respuestas (aquí). Aunque parece que también hay muchos otros problemas.
Buena suposición: efectivamente configuré show_trimmed_content como true porque el código del recortador de respuestas suele recortar más de lo necesario. No solo en el mbox importado; también ocurrió diariamente con las respuestas por correo electrónico. Aunque sería posible mejorar el recortador, parecía una batalla cuesta arriba. Los usuarios del correo siempre (i) enviarán correos con formatos extraños por cualquier razón y (ii) esperarán que se muestren completos.
En efecto, hay otros problemas en la importación: está lejos de ser perfecta. Aunque estaría encantado de discutirlos, no son una preocupación inmediata.
Dado que parece que no omití ninguna opción en la importación que ofuscara los correos electrónicos, aparentemente solo quedan dos opciones:
Reemplazar globalmente el contenido de las publicaciones con algo como s/{email_regexp}/ofuscado/
Buscar o escribir un plugin que ofusque el contenido mostrado (¿convertidor HTML?) con s/{email_regexp}/ofuscado/
Asegúrate de hacer una copia de seguridad de Discourse antes de intentar lo siguiente
Así es como reemplazar todas las direcciones de correo electrónico en los publicaciones por [email_redacted]. La expresión regular es bastante limitada y es probable que omita algunas, pero prefiero una expresión que pueda leer y comprender al modificar el contenido de todas las publicaciones.
$ ./launcher enter app
/var/www/discourse# su - postgres -c psql
psql (13.2 (Debian 13.2-1.pgdg100+1))
Escribe "help" para obtener ayuda.
postgres=# \c discourse
Ahora estás conectado a la base de datos "discourse" como usuario "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