Risoluzione dei problemi del contenuto omesso dalle email in arrivo

Sto analizzando alcuni post che, dopo l’importazione di email da una mailing list, risultano privi di parte del contenuto. Alcune email delimitano intestazioni o sezioni con righe contenenti “~~~~~~~~~~~~~~~~” e la prima occorrenza di tale sequenza su una riga propria, insieme a tutto ciò che segue, viene omessa dal post su Discourse.

Esaminando l’email nel post, vedo che l’email originale è codificata in base64 e, passando alla scheda Testo, posso notare che è stata decodificata senza alcuna omissione.

./launcher enter app
rails c
Post.find_by(id: 154678)
=> #<Post:0x000055b8da925e08
...

Usando Rails, osservo che la colonna raw si interrompe immediatamente prima della prima occorrenza di “~~~~~~~~~~~~~~~~”, mentre la colonna cooked contiene ovviamente lo stesso contenuto di raw, ma formattato in modo appropriato per l’HTML. Ho provato a modificare alcune impostazioni relative all’eliminazione dei contenuti dalle email, ma non sono sicuro di come verificare se tali modifiche abbiano un effetto.

Per quanto ne so, l’uso della funzione Ricrea HTML sul post o l’esecuzione del comando Post.find_by(id: 154678).rebake! in Rails dovrebbe prendere il contenuto di raw e generare l’HTML, aggiornando così la colonna cooked. Non so però se venga presa in considerazione anche la colonna raw_email per un nuovo elaboramento, quindi non sono certo di come verificare se le impostazioni modificate stiano producendo effetti.

Come posso indicare a Discourse di riprocessare raw_email del post, se rebake! non lo fa, per essere sicuro di procedere correttamente con la risoluzione del problema?

Se hai qualche idea su come evitare l’omissione del contenuto, sono ovviamente benvenute.

Continuando a cercare argomenti correlati, ho imbattuto nella funzione Test Avanzato sotto Email in Admin. Sospettavo che fosse quella la causa, ma usando tale funzione ho confermato che è l’impostazione trim incoming emails a provocare questo problema, descritta come Ritaglia la parte delle email in arrivo che non è rilevante.

Con quell’impostazione disattivata, ottengo i risultati corretti per quelle email, ma il rebaking non sembra rieseguire l’elaborazione delle email. Rimane quindi la domanda: come posso dire a Discourse di rieseguire l’elaborazione dei post partendo dalle loro email in arrivo?

Scavando nel repository alla ricerca di codice relativo alla gestione delle email, ho infine trovato il task rake posts:refresh_emails, che accetta un ID argomento facoltativo. Utilizzando quanto segue, come suggerisce il nome, sono state rielaborate le email e rigenerate tutte le pubblicazioni nell’argomento specificato.

cd /var/discourse
./launcher enter app
rake posts:refresh_emails['24961']

Questo ha restituito le pubblicazioni in quell’argomento non tagliate, come previsto, con l’opzione trim incoming emails disabilitata. Ciò ha messo in luce un altro problema che devo risolvere prima di poter procedere, ma non è argomento di questa discussione. Per aggiornare tutte le email in tutti gli argomenti, potrò utilizzare il task rake nel modo seguente.

cd /var/discourse
./launcher enter app
rake posts:refresh_emails