Les URL sont supprimées des réponses générées par Thunderbird

Hmm, dans cet exemple, et dans le code source complet du courriel que vous m’avez envoyé (merci !), l’attribut moz-do-not-send ne devrait pas affecter l’affichage des balises \u003cimg\u003e ou \u003ca\u003e dans lesquelles cet attribut apparaît. Le mozfilter examine uniquement les valeurs de l’attribut class, et je ne vois pas immédiatement ailleurs où il pourrait être filtré.

Par conséquent, je ne parviens pas à comprendre pourquoi le contenu et le href du lien avec alias sont séparés, sauf si, pour une raison quelconque, l’importateur Discourse décide soudainement d’utiliser la partie texte/brut du courriel codé en Mime (qui sépare effectivement le texte et l’URL). Je ne sais pas pourquoi il ferait cela.

Dans votre configuration de test de Discourse, pouvez-vous essayer d’importer ou d’envoyer par courriel un courriel HTML de Thunderbird contenant à la fois un lien avec alias et, par exemple, une image intégrée ou tout autre élément qui permettra de l’identifier comme la partie HTML du courriel ?

Merci pour votre essai.

Ensuite, l’image qui se trouvait dans le courriel entre le texte (à gauche) se retrouve à la fin dans Discourse (à droite) :

Je pense toujours que cela pourrait être Discourse utilisant les autres parties MIME (dans ce cas, une partie text/plain suivie d’une partie image/… de l’e-mail pour générer sa version Markdown, bien que je ne sache pas pourquoi. Peut-être qu’un validateur HTML rejette la partie text/html à cause d’attributs strictement non validants comme moz-do-not-send !?

Pourrais-tu faire un test de plus avec le même message (du texte avec une image au milieu, mais rends aussi certaines parties du texte en gras, même un seul mot, pas tout). Je pense que cela permettra de déterminer si la partie texte provient d’un bloc text/plain ou text/html.

Et désolé de demander, mais juste pour être sûr, as-tu bien défini incoming_email_prefer_html à true (coché) ?!

L’e-mail :

Le message :

Merci @Flominator. Je vois que le texte en gras est devenu italique, donc ce n’est certainement pas du HTML direct, mais il semble tout de même capter l’emphase d’une manière ou d’une autre. Je me demande si la partie text/plain de l’e-mail reçoit une sorte de balisage ou de mise en forme ajoutée — pourriez-vous m’envoyer en MP le code source de l’e-mail comme la dernière fois ?

Bonjour @Flominator, merci pour l’email brut. En examinant la partie alternative text/plain de l’email, on constate effectivement que des astérisques entourent le texte qui est en gras dans la partie text/html. La plupart des moteurs de rendu Markdown (comme celui de Discourse) interprètent cela comme de l’italique. Voici le segment text/plain copié et collé seul :

Und nochmal soll ich für hier
https://meta.discourse.org/t/urls-being-dropped-from-thunderbird-generated-replies/163751/24
eine Testnachricht schicken.

Bild in die Mitte dann wieder Text von dem ein Teil sogar fett
geschrieben
ist

Gruß

Flo

Ce qui ressemble exactement à votre capture d’écran.

Donc, ce que je pense se produire, c’est que le segment text/html est rejeté en tant que HTML invalide (probablement à cause du nom d’attribut non standard moz-do-not-send dans les balises a). Cela nécessitera un correctif pour modifier la façon dont le HTML valide est vérifié (peut-être simplement en supprimant ces attributs), et je suis moins confiant quant à la stabilité de cette approche sans qu’elle soit intégrée dans le code principal. Je m’en occuperai quand j’aurai un moment.

Salut à tous ceux qui suivent ce sujet,

Je viens de remarquer (avant de mettre à jour) qu’un correctif distinct (dans le même sens mais plus spécifique) pour ce problème a été validé :
issue : FIX: properly clean Thunderbird emails, don't remove links by ValdikSS · Pull Request #16543 · discourse/discourse · GitHub
commit : FIX: properly clean Thunderbird emails, don't remove links (#16543) · discourse/discourse@f7540aa · GitHub

Cela signifie que le patch joint dans un commentaire précédent échouera (probablement pas de manière « spectaculaire » mais il pourrait alors nécessiter une reconstruction pour que les mises à niveau reprennent) lorsque vous mettrez à niveau pour inclure ce nouveau commit (probablement votre prochaine mise à niveau).
Si vous l’avez appliqué automatiquement (par exemple avec une cmd git apply dans votre app.yml comme décrit ci-dessus), vous devriez le supprimer avant votre prochaine mise à niveau. En fait, une reconstruction pourrait être nécessaire car ce commit pourrait ne pas s’appliquer car l’endroit dans receiver.rb où il voudra appliquer le diff du commit a déjà été modifié par le patch.

Je vais 1) supprimer la cmd git apply de app.yml, 2) reconstruire l’application, 3) mettre à jour (si ce n’est pas déjà fait lors de la reconstruction). Je vous dirai comment cela se passe…

[10 minutes plus tard…]

Finalement, j’ai fait ceci à la place car cela ne nécessite aucun temps d’arrêt pendant la reconstruction.

  1. supprimer le git apply pour le patch de app.yml (il suffit de le faire avant votre prochaine reconstruction du conteneur d’application)
  2. annuler le fichier patché avec :
    i) launcher enter app
    ii) (maintenant dans le conteneur d’application)
    cd /var/www/discourse
    git checkout ./lib/email/receiver.rb
    exit
  1. mettre à jour discourse en utilisant la mise à jour de l’administrateur web

Je suis l’auteur de ce correctif. Il fonctionne très bien pour moi et je n’y ai trouvé aucun inconvénient.