Migrate a mailing list to Discourse (mbox, Listserv, Google Groups, etc)

Well, that’s a massive bummer!

I thought Google hadn’t touched it since February 2015, but I stand corrected.

Looks like there was a complete redesign in 2020 and a logo touch-up in 2021.

I am thinking of using the APIs of GMAIL and Discourse and convert mail thread to discourse post. I have gone through the google apis and was able to get the emails but have a few questions about them.

  1. Mail can be downloaded in raw format which is the base64 encoded value of “Original message” of mail. Is that the same as mbox format or is it different?
  2. Is there any sample example of how to add posts and attachments to discourse through API?

Interesting. Is it possible to use the Gmail API to access emails from Google Groups or do you simply have a Gmail account that has all the emails that were sent to the group?

I suggest you save all message into individual *.eml files. You will need to decode the message before saving if the whole message (including the email headers) is base64 encoded. Afterwards follow the steps from Importing / migrating mailing lists (mbox, Listserv, Google Groups, emails, ...) (minus the Google Groups steps). The import script will take care of posts, attachments and a lot more.

1 Like

I am a member of the group so I am able to pull the mails using my email. The entire email message including headers will be part of the encoded string.

Will try your approach for import into discourse at least for a thread.

1 Like

Well, in that case you might not even need the Gmail API. Connecting an email client like Thunderbird to your Gmail account and exporting individual emails or an mbox file should be enough…

Now I’d really like to know how this works. I was under the impression that Google Groups doesn’t support NNTP.

1 Like

It’s not NNTP but Rest API.

3 Likes

My mailbox size is more than 200GB and to get specific group-related emails I might need to download all these mails using thunderbird also thunderbird is not showing the google groups all mails are under Inbox only. It is also downloading only 200 emails each time. So, I am not sure how long it could take to get mails etc.

Is there any alternative way to just get a google group data and export it to mbox?

Hi Gerhard Schlager,

We are trying to migrate our google groups to Discourse we followed all the above steps as per the document but it only creates the category in Discourse and not importing the data. Would really appreciate if you can respond on this one quickly.

The only way that we knew about doesn’t work anymore. If you know any way to get the data, then you should do that. If you know a way to get it, you should probably start getting it asap before that method too goes away.

If it’s in your mailbox then it might be possible to use that Gmail api to pull it down. It’ll be tricky though, as a developer would need access to a mailbox with google group data in it to write the code.

Unless an enterprise customer who requires it, I doubt that cdck (aka discourse.org) will be writing that code any time soon. You can ask in #marketplace. I likely wouldn’t consider it for under $2000 and, given the frustration that I have had with the Google groups import script on the past, would likely require $5000. Or course, someone else may have better skills or more patience.

One approach that may work is using Integromat to write a conversion assuming google groups and discourse apps are available. Or using the http calls to call the rest APIs on their own.

Integromat is an integration data migration system. It’s very powerful and can do a lot with little to no coding.

I have tried the google takeout by making myself the owner of our google workspace group and able to download the google group conversations. Still working on importing it though.

A couple of downsides with this approach.

  1. Need to download full data again if needed to do an incremental update.
  2. Not possible to download selective group data instead this will download data for all groups for which the user has owner or manager permissions.
  3. Need to work with the google workspace admin to enable the takeout as by default it is disabled.
3 Likes

Hi @Anjana_Raghavendra_P - did you manage to do a simple import using this approach?

Thanks very much!

Yes, I am able to download the mbox file from takeout and imported using the steps mentioned in the original post.

Later as we are using the PAAS service of Discourse provided the file to the discourse technical team who were able to import the content into the discourse platform.

2 Likes

I’m happy to hear that - thanks!

I encountered @sturdy2’s issue when in settings.yml, I changed the first line data_dir: /shared/import/data, from its default.

Take home message: don’t change it as it refers to the path inside the import docker, not on the main machine.

I have a question about restarting an import?

I’m not a developer but I have managed to successfully import two mbox files that came from a system called Topicbox Group Email. I did my test import into a temporary instance of Discourse that I set up on Digital Ocean. And I was able to import my two sample mbox files into existing categories I had already created in Discourse, thanks to the notes about setting the category.custom_fields[“import_id”] = “mydir” from above.

Yay! But if I want to import more mbox files, do I have to run all of the commands mentioned in FAQ 2.2, which indicates it will “delete everything”?

2 Likes

I was able to successfully set my “import_id” for two different categories as an initial test import. It worked! My two mbox files imported into the existing categories I specified.

I have 18 different categories that I ultimately need to do this with. I don’t know anything about Ruby. Can I create a file that sets the directory name for each of my different categories so that I don’t have to manually enter each line in the Ruby command line interface?

2 Likes

Yes. Mehr Google “ruby for each”. And create an array with so of the categories.

1 Like

No, you don’t. The importer supports incremental imports. It will only import new data on the next run. Please don’t run the commands mentioned in 2.2 unless you want to start from scratch.

Unfortunately that’s currently not possible. You need to assign each category the import_id if you want to import into existing categories.

2 Likes

Thank you @gerhard for all of your amazing work on this! I’m not a developer but I was able to complete a migration from a listserv system called Topicbox. I was able to get mbox files from Topicbox for import into Discourse. During my trial and error steps, I documented it all into a blog post. So if it’s okay? I wanted to paste a link to that blog post for any other Topicbox users that want to convert to Discourse.

https://lifeafter40.net/converting-from-the-topicbox-group-email-system-to-the-discourse-open-source-discussion-platform/

4 Likes