Avez-vous examiné la base de données ? Mon intuition est que, pour une raison quelconque, le champ e-mail n’y est pas créé correctement et ne peut donc pas être lu.
Voyez le point 2.3 dans le message initial pour vérifier la base de données d’indexation.
La liste Mailman 2 que j’envisage d’importer dans Discourse a eu, pendant une partie de son existence, l’option from_is_list définie sur Munge From, de sorte que l’en-tête « From: » est :
From: NomDeLaListe <listname-bounces@listdomain.com> On Behalf Of [Nom de l'expéditeur original]
au lieu de :
From: [Nom de l'expéditeur original] <username@example.com>
Cela m’a fait penser que l’importateur traiterait chacun de ces messages comme s’ils provenaient du même utilisateur (avec l’adresse e-mail listname-bounces@listdomain.com)… MAIS…
La ligne initiale marquant le début d’un nouvel e-mail dans le fichier mbox commence toujours par :
From username@example.com [Date time group]
(et les archives Hyperkitty affichent également l’adresse e-mail de l’expéditeur original normalement).
Ma question est donc la suivante : le script d’importation prend-il l’adresse de l’expéditeur à partir de l’en-tête « From: » ou de la ligne « From » ? Merci.
Merci pour votre réponse rapide ! Ce serait difficile de modifier cela ? Pas nécessairement officiellement — bien que cela pourrait aider d’autres personnes — mais juste pour que je puisse modifier le script avant de l’exécuter. Je ne connais pas encore Ruby, mais si cela consiste simplement à remplacer deux-points par un espace…
Ce n’est pas un changement simple, mais cela devrait être réalisable. Vous n’êtes pas obligé de l’implémenter dans le script d’importation. Si vous connaissez un autre langage de script, je suis sûr qu’il ne sera pas trop difficile de mettre à jour les en-têtes From: dans les fichiers mbox avant d’exécuter l’importation…
Mais, n’hésitez pas à le corriger dans le script d’importation. Une PR est la bienvenue !
Un bon point de départ pour corriger l’en-tête devrait être la méthode each_mail…
Serait-il possible à ce stade d’obtenir la première ligne du courriel mbox (c’est-à-dire la ligne « From [adresse e-mail] [date et heure] ») à partir de parsed_email et d’en extraire l’adresse e-mail ?
Non, cette ligne est filtrée lorsque le mbox est divisé en messages individuels. Vous devez enregistrer cette valeur dans la méthode each_mail pour pouvoir l’utiliser plus tard.
J’ai pris du plaisir à essayer de faire cela, avant de réaliser que Mailman stocke les emails dans le format mbox sous leur forme originale et intacte, de sorte que la ligne « From: » contient la même adresse email (celle de l’expéditeur original) que la ligne « From » dans tous les cas, même lorsque l’email a été envoyé « From: listname-bounces@listname.domain.com ».
Étant limité par l’absence d’une installation de développement de Discourse, ou même de Ruby, j’ai néanmoins pu avancer grâce à https://rubular.com/ et Ruby Online Compiler & Interpreter - Replit (ainsi qu’à DuckDuckGo). Si vous êtes disposé à y jeter un coup d’œil, je vous serais reconnaissant de me dire si cela aurait fonctionné (ou presque) si cela avait été nécessaire…
def each_mail(filename)
raw_message = +''
first_line_number = 1
last_line_number = 0
each_line(filename) do |line|
if line.scrub =~ @split_regex
if last_line_number > 0
#Nous sommes maintenant au début du PROCHAIN email
yield raw_message, first_line_number, last_line_number
raw_message = +''
first_line_number = last_line_number + 1
else
#Nous sommes maintenant au début de CET email, donc récupérons l'adresse email
new_email = line.match(/^From (\S+@\S+).*/).captures
end
else
raw_message << line
end
last_line_number += 1
end
#Récupérons l'ancien email (ligne "From:")
old_email = raw_message.match(/^From: .*<(\S+@\S+)>/).captures
#Insérons l'adresse "From " dans la ligne "From:"
raw_message = raw_message.sub(old_email, new_email)
yield raw_message, first_line_number, last_line_number if raw_message.present?
end
Après une importation réussie d’archives de messagerie (mbox), le contenu des messages affichera des adresses e-mail qui auraient été obscurcies par Gmane ou le serveur d’archives mailman2. Cela permet aux bots de collecter ces adresses pour les exploiter, et je cherche un moyen d’éviter cela.
supprimer globalement les e-mails dans les publications (peut-être un plugin d’affichage ?)
Lorsque j’ai tenté d’importer mon fichier mbox de MM2 vers MM3, environ un quart des e-mails se sont retrouvés orphelins (les réponses ont été incorrectement traitées comme le début de nouveaux fils de discussion) car ils ne possédaient pas les bons en-têtes. Pipermail dans MM2 peut structurer l’archive en fonction de l’objet (s’il n’y a pas de Message-ID ou quel que soit le nom de l’autre en-tête — j’ai oublié), mais, la dernière fois que j’ai vérifié, Postorius dans MM3 ignore l’objet. Idéalement, votre script ferait donc la même chose que Pipermail et obtiendrait le bon résultat sur ma liste
Aussi — si les e-mails sont importés dans le désordre, comme mentionné ci-dessus, existe-t-il un moyen dans Discourse de corriger cela ? Ou la seule solution est-elle d’essayer index_only et soit d’ajouter des en-têtes au fichier mbox, soit de réorganiser le fichier index.db comme suggéré dans le post cité ci-dessous ?
Pas vraiment. Bon, vous pourriez déplacer des messages, mais c’est fastidieux, même avec l’automatisation.
Je pense que c’est la meilleure façon de résoudre votre problème, sauf si vous vous sentez à l’aise pour travailler sur le script d’importation et ajouter un mode hybride qui regroupe par Message-ID et sujet au cas où le premier serait manquant.
L’importation depuis Google Groups est actuellement défaillante, car Google a modifié son interface et supprimé le schéma de crawl AJAX qu’il avait déprécié en 2015.
Quelqu’un a-t-il réussi à utiliser Google Takeout pour exporter des fichiers mbox ?
Si vous payez pour un hébergement professionnel sur une base annuelle, ils s’en chargeront gratuitement. Sinon, vous devez le faire sur votre propre serveur, télécharger la sauvegarde sur votre instance et contacter le support par e-mail pour demander une restauration.
Le script du groupe Google peut être capricieux lorsqu’il s’agit de configurer l’authentification correctement. La dernière fois que je l’ai utilisé, j’ai dû modifier le point de connexion pour qu’il fonctionne.
Vous vous souvenez du changement que vous avez apporté pour que la connexion fonctionne ? Je rencontre l’erreur suivante, même si j’ai utilisé la même extension que celle mentionnée dans les étapes initiales pour générer le fichier de cookies. Au fait, je travaille avec un groupe de domaine privé.
Connexion en cours...
2021-10-31 12:54:41 WARN Selenium [DEPRECATION] [:browser_options] :options en tant que paramètre pour l'initialisation du pilote est obsolète. Utilisez :capabilities avec un tableau de valeurs de capacités/options si nécessaire.
Traceback (dernier appel en premier) :
31: from script/import_scripts/google_groups.rb:293:in `\u003cmain\u003e'
30: from script/import_scripts/google_groups.rb:237:in `crawl'
29: from script/import_scripts/google_groups.rb:181:in `login'
28: from script/import_scripts/google_groups.rb:196:in `add_cookies'
27: from script/import_scripts/google_groups.rb:196:in `each'
26: from script/import_scripts/google_groups.rb:200:in `block in add_cookies'
25: from /usr/local/lib/ruby/gems/2.7.0/gems/selenium-webdriver-4.0.3/lib/selenium/webdriver/common/manager.rb:61:in `add_cookie'
24: from /usr/local/lib/ruby/gems/2.7.0/gems/selenium-webdriver-4.0.3/lib/selenium/webdriver/remote/bridge.rb:349:in `add_cookie'
#0 0x557491640f93 \u003cunknown\u003e: domaine de cookie invalide : le 'domain' du cookie ne correspond pas (Selenium::WebDriver::Error::InvalidCookieDomainError)
Non, sauf s’ils ont réintégré la fonctionnalité au cours des 25 derniers jours. Je ne pense pas que ce soit le cas, il faudra donc refaire entièrement le scraper.