Hai dato un’occhiata al database? Il mio istinto è che, per qualche motivo, il campo email non venga creato correttamente lì e quindi non possa essere letto.
Vedi il punto 2.3 dell’OP per verificare il database degli indici.
Hai dato un’occhiata al database? Il mio istinto è che, per qualche motivo, il campo email non venga creato correttamente lì e quindi non possa essere letto.
Vedi il punto 2.3 dell’OP per verificare il database degli indici.
La lista Mailman 2 che sto valutando di importare in Discourse ha avuto (per parte della sua esistenza) l’impostazione from_is_list su Munge From, in modo che l’intestazione “From:” fosse
From: Listname <listname-bounces@listdomain.com> On Behalf Of [Nome del mittente originale]
invece di
From: [Nome del mittente originale] <username@example.com>
Questo mi ha portato a pensare che l’importatore avrebbe trattato ogni messaggio come proveniente dallo stesso utente (con l’indirizzo email listname-bounces@listdomain.com)… MA…
La riga iniziale che segna l’inizio di un nuovo messaggio nel file mbox inizia ancora con
From username@example.com [Data e ora gruppo]
(e gli archivi Hyperkitty mostrano anche l’indirizzo email del mittente originale in modo normale).
La mia domanda è: lo script di importazione prende l’indirizzo del mittente dall’intestazione “From:” o dalla riga "From "? Grazie.
Ne ho discusso brevemente in un argomento precedente: Working on a mailman2 to discourse migration script - #10 by dachary
Utilizza l’intestazione From:.
Grazie per la rapida risposta! Quanto sarebbe difficile modificarlo? Non necessariamente in modo ufficiale – anche se potrebbe aiutare altri – ma solo per cambiare lo script prima di eseguirlo. Non conosco ancora Ruby, ma se si tratta solo di sostituire i due punti con uno spazio…
Non è una modifica semplice, ma dovrebbe essere fattibile. Non sei obbligato a implementarla nello script di importazione. Se conosci un altro linguaggio di scripting, sono sicuro che non sarà difficile aggiornare le intestazioni From: nei file mbox prima di eseguire l’importazione…
Tuttavia, sentiti libero di correggerlo nello script di importazione. Una PR è benvenuta!
Un buon punto di partenza per correggere l’intestazione dovrebbe essere il metodo each_mail…
Saluti. Sembra che questo sia ciò che attualmente decide la questione, dalle righe 69-70 di indexer.rb:
parsed_email = receiver.mail
from_email, from_display_name = receiver.parse_from_field(parsed_email)
Sarebbe possibile in quel punto ottenere la prima riga dell’email mbox (cioè la riga “From [indirizzo email] [data ora]”) da parsed_email ed estrarre l’indirizzo email da quella?
No, quella riga viene filtrata quando la mbox viene suddivisa in singoli messaggi. Devi salvare quel valore nel metodo each_mail per poterlo utilizzare in seguito.
Mi sono divertito a provare a farlo, prima di accorgere che Mailman memorizza le email nell’mbox nella loro forma originale e intatta, così che la riga “From:” contiene lo stesso indirizzo email (del mittente originale) della riga "From " in tutti i casi, anche quando l’email è stata inviata “From: listname-bounces@listname.domain.com”). ![]()
Ero limitato dal non avere un’installazione di sviluppo di Discourse, o addirittura Ruby, ma sono riuscito a fare qualche progresso con https://rubular.com/ e Ruby Online Compiler & Interpreter - Replit (e DuckDuckGo). Se foste disposti a dare un’occhiata, vi sarei grato se mi faceste sapere se questo avrebbe funzionato (o quasi) se fosse stato necessario…
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
#Siamo all'inizio della PROSSIMA email ora
yield raw_message, first_line_number, last_line_number
raw_message = +''
first_line_number = last_line_number + 1
else
#Siamo all'inizio di QUESTA email ora, quindi otteniamo l'indirizzo email
new_email = line.match(/^From (\S+@\S+).*/).captures
end
else
raw_message << line
end
last_line_number += 1
end
#Ottieni la vecchia email (riga "From:")
old_email = raw_message.match(/^From: .*<(\S+@\S+)>/).captures
#Metti l'indirizzo "From " nella riga "From:"
raw_message = raw_message.sub(old_email, new_email)
yield raw_message, first_line_number, last_line_number if raw_message.present?
end
Beh, diciamo che è stato quasi… ![]()
Dopo un’importazione riuscita degli archivi di posta (mbox), il contenuto dei messaggi mostrerà indirizzi email che sarebbero stati oscurati da Gmane o dal server di archiviazione mailman2. Questo permette ai bot che raccolgono indirizzi di raccoglierli e sto cercando un modo per evitarlo.
Grazie in anticipo per il vostro aiuto!
È una scelta esclusiva tra le due opzioni?
Quando ho provato a importare il mio mbox di MM2 in MM3, circa un quarto delle email sono rimaste orfane (le risposte sono state erroneamente trattate come l’inizio di nuovi thread) perché non avevano le intestazioni corrette. Pipermail in MM2 può strutturare l’archivio in base all’Oggetto (se non c’è un Message-ID o qual è l’altra intestazione chiamata – non ricordo), ma, l’ultima volta che ho controllato, Postorius in MM3 ignora l’Oggetto. Quindi, idealmente, il tuo script farebbe lo stesso di Pipermail e riuscirebbe a ottenere il risultato giusto per la mia lista ![]()
Inoltre, se le email vengono importate in modo disordinato, come notato sopra, c’è qualche modo in Discourse per correggere la situazione? O l’unica soluzione è provare index_only e aggiungere intestazioni al file mbox o riorganizzare il index.db come suggerito nel post citato sotto?
Grazie.
Sì, lo è.
Non proprio. Beh, potresti spostare i post, ma è una procedura laboriosa anche con l’automazione.
Penso che sia il modo migliore per risolvere il tuo problema, a meno che tu non ti senta a tuo agio nel lavorare sullo script di importazione e nell’aggiungere una sorta di modalità ibrida che raggruppi per Message-ID e oggetto nel caso in cui il primo sia assente.
L’importazione da Google Groups è attualmente interrotta, poiché Google ha modificato l’interfaccia utente e rimosso il meccanismo di crawling AJAX che avevano deprecato nel 2015.
È riuscito a qualcuno di utilizzare Google Takeout per esportare file mbox?
Ciao,
Come possiamo utilizzare questo strumento per importare i gruppi Google in Discourse SaaS invece che in versione on-premise?
Se paghi l’hosting business per un anno, lo faranno gratuitamente. In caso contrario, devi farlo sul tuo server, caricare il backup sulla tua istanza e inviare una email all’assistenza per chiedere loro di ripristinarlo.
Lo script del gruppo Google può essere capriccioso nel far funzionare correttamente l’autenticazione. L’ultima volta che l’ho usato, ho dovuto modificare l’endpoint di accesso per farlo funzionare.
Ricordi la modifica che hai apportato per far funzionare l’accesso? Sto ricevendo il seguente errore, anche se ho utilizzato la stessa estensione indicata nei passaggi iniziali per generare il file dei cookie. A proposito, sto lavorando con un gruppo di dominio privato.
Accesso in corso...
2021-10-31 12:54:41 WARN Selenium [DEPRECATION] [:browser_options] :options come parametro per l'inizializzazione del driver è deprecato. Utilizza :capabilities con un Array di valori capabilities/options se necessario.
Traceback (ultimo richiamo):
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: dominio cookie non valido: 'domain' del cookie non corrisponde (Selenium::WebDriver::Error::InvalidCookieDomainError)
Mi dispiace, ma correggere il login non è sufficiente.
Ha risolto qualcosa il recente restyling?
No, a meno che non abbiano ripristinato la funzione negli ultimi 25 giorni. Non credo che lo faranno, quindi lo scraper dovrà essere completamente rivisto.