Migrare una mailing list su Discourse (mbox, Listserv, Google Groups, ecc)

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.

3 Mi Piace

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

1 Mi Piace

Utilizza l’intestazione From:.

1 Mi Piace

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

5 Mi Piace

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?

3 Mi Piace

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.

4 Mi Piace

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”). :man_facepalming:

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
3 Mi Piace

Beh, diciamo che è stato quasi:wink:

1 Mi Piace

Haha… “Quindi mi stai dicendo che c’è una possibilità!?”

3 Mi Piace

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.

  1. Rimuovere globalmente le email dai post (magari tramite un plugin di visualizzazione?)
  2. Una configurazione del sito che lo faccia già
  3. Un’altra idea?

Grazie in anticipo per il vostro aiuto!

5 Mi Piace

È 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 :slight_smile:

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.

3 Mi Piace

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.

3 Mi Piace

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?

4 Mi Piace

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.

1 Mi Piace

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.

2 Mi Piace

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.

1 Mi Piace