Dopo un’importazione riuscita di archivi di posta ( mbox ), il contenuto dei messaggi mostrerà indirizzi email che sarebbero stati offuscati da Gmane o dal server di archiviazione mailman2. Questo permette ai bot di raccogliere indirizzi e di raccoglierli in Discourse, e sto cercando un modo per evitarlo.
Rimuovere globalmente le email dai post (forse un plugin di visualizzazione?)
Quindi questo è un problema legato all’importazione che (se ne hai ancora la possibilità) dovrebbe essere risolto durante la fase di importazione. Ho dato un’occhiata al tuo forum ed è pieno di contenuti rotti (intestazioni delle email, indentazione errata) sia per quanto riguarda le email vecchie che non vengono tagliate, sia per le email che sono risposte reciproche ma vengono inserite in argomenti diversi.
O hai abilitato show_trimmed_content (qui) durante l’importazione o il formato dei tuoi messaggi non è stato riconosciuto dal codice del ritaglio delle risposte (qui). Anche se sembra che ci siano molti altri problemi.
Buona ipotesi: ho effettivamente impostato show_trimmed_content su true perché il codice del ritagliatore di risposte spesso taglia più di quanto dovrebbe. Non solo nell’importazione mbox, ma è successo quotidianamente anche con le risposte via email. Anche se sarebbe possibile migliorare il ritagliatore, sembrava una battaglia in salita. Gli utenti della posta elettronica avranno sempre (i) email con formattazione strana per qualsiasi motivo, (ii) si aspetteranno che vengano visualizzate per intero.
Infatti ci sono altri problemi nell’importazione: è tutt’altro che perfetta. Anche se sarei felice di discuterne, non sono una preoccupazione immediata.
Dato che sembra che non abbia saltato un’opzione nell’importazione che oscurerebbe gli indirizzi email, apparentemente restano due opzioni:
Sostituire globalmente il contenuto nei post con qualcosa come s/{email_regexp}/oscurato/
Trovare/scrivere un plugin che oscuri il contenuto visualizzato (convertitore HTML?) con s/{email_regexp}/oscurato/
Assicurati di eseguire il backup di Discourse prima di provare quanto segue
Ecco come sostituire tutti gli indirizzi email nei post con [email_redacted]. L’espressione regolare è piuttosto limitata e probabilmente ne mancherà alcune, ma preferisco un’espressione che posso leggere e comprendere quando modifico il contenuto di tutti i post.
$ ./launcher enter app
/var/www/discourse# su - postgres -c psql
psql (13.2 (Debian 13.2-1.pgdg100+1))
Digita "help" per ottenere aiuto.
postgres=# \c discourse
Ora sei connesso al database "discourse" come utente "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