D’autres messages avec un jeu de caractères non UTF-8, par exemple iso-8859-1, sont importés correctement.
Avant d’essayer de trouver la cause racine du problème en explorant le code source en commençant par script/import_scripts/mbox/support/indexer.rb, quelqu’un a-t-il une idée ? Cela pourrait-il être lié à l’environnement et non au code ? Cela se produit-il également lorsqu’un utilisateur fonctionnant en mode liste de diffusion répond avec cette encodage ?
J’ai fait un test rapide et Email::Receiver semble fonctionner correctement. Il convertit l’entrée en UTF-8. Je ne vois aucune raison pour laquelle l’encodage devrait être incorrect par la suite.
[1] pry(main) > raw_email = File.read("/tmp/windows.txt");
[2] pry(main) > receiver = Email::Receiver.new(raw_email, convert_plaintext: true, skip_trimming: false);
[3] pry(main) > body = receiver.select_body;
[4] pry(main) > receiver.mail.charset
=> "windows-1252"
[5] pry(main) > body.first.encoding
=> #<Encoding:UTF-8>
[6] pry(main) > puts body.first;
cette réflexion me fait penser : y-a-il une obligation/raison (en dehors du coup de maintenannce) à avoir un même outil pour les 2 fonctionnalités (interactions vs galerie) ?
Merci pour le test rapide : je ne saurais pas comment le faire moi-même Est-il possible qu’il manque quelque chose dans le conteneur d’importation ? J’aimerais beaucoup reproduire ce que vous avez fait et explorer à partir de là. Si je ne trouve rien, je fournirai des instructions pour reproduire le problème en utilisant la procédure d’importation mbox avec une boîte de réception contenant uniquement ce seul e-mail.
J’obtiens les mêmes résultats que vous, donc le problème ne vient pas de là. Je vais lancer une importation avec uniquement cet e-mail et une nouvelle catégorie pour vérifier qu’il ne s’agit pas d’un effet secondaire.
Voici ce que j’ai fait, sur une installation de 2.5.4 :
shared/standalone/import/settings.yml non modifié
suppression de shared/standalone/import/data/index.db provenant de l’import précédent
modification de l’en-tête Message-ID
copie de windows.txt dans shared/standalone/import/data/windows4/windows.mbox
./launcher enter import
exécution de l’import avec
root@forum:/var/www/discourse# import_mbox.sh
L'importation du fichier mbox commence...
Chargement des groupes existants...
Chargement des utilisateurs existants...
Chargement des catégories existantes...
Chargement des messages existants...
Chargement des sujets existants...
Création de l'index
Indexation des fichiers dans /shared/import/data/windows4
Indexation de /shared/import/data/windows4/windows.mbox
Indexation des réponses et des utilisateurs
Création des catégories
1 / 1 (100,0 %) [8121278 éléments/min]
Création des utilisateurs
1 utilisateur déjà importé ignoré
Création des sujets et des messages
1 / 1 (100,0 %) [219 éléments/min]
Mise à jour du statut des sujets
Mise à jour de bumped_at sur les sujets
Mise à jour de last_posted_at sur les utilisateurs
Mise à jour de last_seen_at sur les utilisateurs
Mise à jour de first_post_created_at...
Mise à jour du nombre de messages des utilisateurs...
Mise à jour du nombre de sujets des utilisateurs...
Mise à jour des utilisateurs associés aux sujets
Mise à jour des horaires des messages
Mise à jour des utilisateurs des sujets en vedette
Mise à jour des sujets en vedette dans les catégories
9 / 9 (100,0 %) [1562 éléments/min] ]
Réinitialisation des compteurs de sujets
Terminé (00h 00min 09sec)
J’ai obtenu le même résultat que ci-dessus, que vous pouvez voir ici.
Ou la différence réside dans la façon dont le message est extrait du fichier mbox : c’est là que le chemin d’exécution du code diffère. L’instruction raw_email = File.read("/tmp/windows.mbox") ci-dessus n’est pas identique à la division du fichier à l’aide d’expressions régulières, et c’est peut-être là que les choses tournent mal.
Et effectivement, l’ajout de File.open('/tmp/message.txt', 'w') { |file| file.write(receiver.raw_email) } après cette ligne produit le fichier suivant, qui est différent du fichier original.
Désolé si c’est une question de débutant, mais je ne connais pas bien la base de code Avez-vous une suggestion sur l’endroit où un tel changement serait bénéfique ?
Après avoir réduit la zone où la transformation indésirable se produit, il semble que ce soit ici :
line.scrub est responsable de la transformation du contenu en quelque chose de différent de l’original. Si on l’enlève, l’expression régulière échoue avec :
...
1: from /var/www/discourse/script/import_scripts/mbox/support/indexer.rb:174:in `block in each_mail'
/var/www/discourse/script/import_scripts/mbox/support/indexer.rb:174:in `=~': invalid byte sequence in UTF-8 (ArgumentError)
Car ce n’est pas en UTF-8, en effet
Une idée sur la façon de résoudre cela ? Peut-être un premier passage sur les en-têtes du courriel uniquement pour rechercher le jeu de caractères ? Il semble y avoir un problème et ici.