Grazie lavamind: questo è un dato molto utile, specialmente avendo un thread concreto “L’archivio di Mailman mostra 5, l’argomento del forum mostra 3” su cui ancorarsi.
Dato che stai riscontrando questo problema diverse volte alla settimana (circa il 5-10% dei messaggi) e che, per questo incidente, il motivo del rifiuto è costantemente la variante fuorviante di “argomento chiuso/eliminato”, il passo successivo migliore è acquisire un messaggio fallito end-to-end in modo da poter vedere cosa stava facendo Discourse.
Per una delle 3 email rifiutate associate a quell’argomento speculare, potresti recuperare quanto segue:
-
Da /admin/email-logs/rejected, apri una delle righe InvalidPost per quell’incidente e copia:
- il Message-ID
- la data/ora
- il (redatto) A / Da / Oggetto mostrato nella riga
- il testo completo del motivo del rifiuto (come visualizzato)
-
Dalla console Rails (nel container dell’app Discourse), estrai l’email grezza che Discourse ha memorizzato:
@supermathie è ancora IncomingEmail il posto canonico per recuperare il grezzo, e c’è qualcos’altro che vorresti oltre ad esso per il debug di InvalidPost?
mid = "<incolla qui il Message-ID dal log delle email rifiutate>"
ie = IncomingEmail.find_by(message_id: mid)
puts ie&.raw
3. Estrai anche gli attributi `EmailLog` associati per lo stesso Message-ID (questo spesso rivela se Discourse lo ha trattato come una risposta rispetto a un nuovo argomento e quali ID di argomento/categoria ha risolto):
mid = "<lo stesso Message-ID di cui sopra>"
log = EmailLog.where(message_id: mid).order(created_at: :desc).first
pp log&.attributes&.slice(
"id",
"email_type",
"to_address",
"from_address",
"subject",
"post_id",
"topic_id",
"user_id",
"status",
"bounce_error_code",
"bounce_key",
"created_at"
)
Perché questo trio?
IncomingEmail.raw ci dice se la mail è arrivata malformata / codificata in modo strano / solo con il piè di pagina, rispetto a Discourse che sceglie la parte MIME “sbagliata”.
EmailLog ci dice cosa ha tentato Discourse (nuovo argomento vs risposta, ID di argomento/categoria risolti, ecc.).
- la riga dell’interfaccia utente dell’email rifiutata conferma che stiamo guardando lo stesso incidente e preserva ciò che gli operatori vedono.
Se la privacy è una preoccupazione, sentiti libero di redigere gli indirizzi e qualsiasi testo del corpo del messaggio all’interno del grezzo, ma per favore mantieni:
- gli header MIME (Content-Type, boundaries, charset, Content-Transfer-Encoding)
- la struttura multipart (così possiamo vedere quali parti esistono)
- il Message-ID e gli header di routing di base (puoi redigere i domini se necessario)
Una volta che abbiamo un Message-ID fallito + IncomingEmail.raw + la porzione EmailLog, dovremmo essere in grado di capire rapidamente se si tratta di:
- una mancata corrispondenza della chiave di risposta / instradamento dell’argomento,
- un caso limite di permessi,
- o un fallimento di analisi dell’email / selezione della parte MIME / decodifica.