Creating a read-only mailing list mirror

This guide describes how you can use Discourse for creating a read-only mirror of a mailing list.
Discourse acts as an archive for the mailing list and allows registered users to use most of its features.

Do you want to see it in action? Take a look at our mirror of the Ruby-Talk mailing list.

Are you ready to setup your own mailing list mirror? Here we go!

The following guide uses two email addresses as placeholders. You need to replace them with your actual addresses.

:incoming_envelope: is address for incoming emails on your Discourse
:postbox: mailing-list@foo.test is the address where emails get sent by the mailing list

Site Settings

You can skip the first step if you are on a hosting plan that pre-configures your incoming email.

  1. Make sure you configured POP3 polling or manual polling via API, so that it polls the account associated with :incoming_envelope:

  2. Enable email_in to allow incoming emails.

  3. Optional: Allow all incoming attachments by setting authorized_extensions to * or add all the file extensions you want to allow.

  4. Optional: Enable always_show_trimmed_content in order to allow every user to see trimmed content. It will be hidden behind a image button.

  5. Optional: Enable display_name_on_posts and disable prioritize_username_in_ux.


You need to create a new category or edit an existing one which will be used for posting all emails that get sent to the mailing list.

  1. First, click on the Security tab and then click on the Edit Permissions button.


  2. Remove all existing permissions and add “everyone” with the permission “See”. When you are done, it should look like this:


  3. Next, click on the Settings tab. There should be the following three fields. If there aren’t, make sure you have enabled the email_in site setting.

    • Accept emails from anonymous users with no accounts” – Enable this to allow the creation of staged users.

    • Custom incoming email address” – Enter the :postbox: email address of the mailing list. Look at the To: header of one of the emails sent by the mailing list, if you are unsure what to use here.

    • Category mirrors mailing list” – You must enable this option. It activates all the special handling for mailing lists.

  4. Click on New Category or Save Category to create the new category or save your changes.

Subscribe to mailing list

Now it’s time to subscribe to the mailing list using :incoming_envelope:

If the mailing list provides a web interface, take a look at the settings and make sure that you will receive only messages that should appear in the mirror category. For Mailman 2 it’s important that

  • “Mail delivery” is “Enabled”
  • “Set Digest Mode” is “Off”
  • “Get password reminder email for this list?” is set to “No”

:tada: That’s it! Now it’s time to wait for the first email to arrive in your new mailing list mirror.


I want to mirror multiple mailing lists. Is that possible?
Sure! All you need to do is create a category for each mailing list and configure it like described above.

How does all this work?

Enabling “Category mirrors a mailing list” changes how incoming emails are processed for that specific category:

  • Emails sent by a mailing list are usually marked as auto-generated. This setting allows incoming emails to be auto-generated even when block_auto_generated_emails is enabled in site settings.

  • Every user can post within that category via email. The value of email_in_min_trust is ignored.

  • It’s a good idea to make the category read-only to prevent users from posting and expecting that their post will appear on the mailing list. However, everyone can create new posts by sending an email to the mailing list.

  • Usually find_related_post_with_key is enabled in the site settings. Disabling it for the whole site is not recommended, since it allows user impersonation based on email address. Incoming emails that were sent to the mailing list always use the email’s Message-ID to find related posts and disregard the value of that site setting.

  • Normally Discourse expects incoming emails to contain text formatted as Markdown. Mailing list users are usually unaware of that requirement, so Discourse doesn’t interpret any Markdown (except for code blocks enclosed in three backticks) or HTML within plain text emails and posts them with the original formatting intact.

  • Discourse usually notifies the sender when it rejects an email. That doesn’t make sense for mailing lists and probably would annoy the mailing list user, so sending of rejection emails is disabled.


Is this absolutely necessary? Or can I make custom settings?

No, it’s not absolutely necessary, but might be very confusing to your users when you start mixing mailing list content with posts created in Discourse. Also note, that Discourse won’t send emails to the mailing list, so they will never know about replies made in Discourse. The recommended way to interact with the mailing list is still by sending emails to the mailing list. It’s a read-only mirror after all.


Oh, that makes sense. Thanks for the clarification. Tried to get people to use Discourse but most people just can’t be bothered.

1 Like

is it possible to prevent creator of a new post to automatically watch the created topic in a RO mailing-list mirror categroy?

The issue I face is when someone sends a message to the mailing list, from the same email address as the one used in discourse, s/he receives reply both from mailing list and discourse, which may be confusing…

It would awesome if discourse could send an email to the mailing list when users make posts in discourse…is that possible to implement?

Basically act as a bridge to the mailing list because some mailing list users don’t want to use discourse


Really useful thank you. Could you add the table of content ?

1 Like

Hi! Does this apply to the Free Hosting for Open Source V2 plan?

1 Like

Yes, reply by email is configured on all of our plans, including the free plans.


I’ve having issues with this. In my case it’s a google group which (afaik) nowadays can only be subscribed by a non-gmail account via sending an email from to, but since discourse created that email for me, I cant really send an email from it, right?

If there were only a web interface to signup with non-google addresses, this wouldn’t be a problem.

Is there a solution for this case?

I guess you could sign up with a Gmail address and forward all emails to That should work.

1 Like

Thanks for the reply. That’s a way of going about it. But it doesn’t sound very permanent.

But I think my question may be more general (not only applying to google groups):

How does one go in general about confirming the email address to the list?
In any mailing-list I can remember the confirmation process is done by either replying to the email or by clicking a link in the email. But in this case don’t really have access to those emails nor can they reply, right?

How have people been able to overcome this? Or is there something I’m overlooking?

1 Like

Discussion followed in the support category:

The solution was to add manually the email via web interface. @gerhard to avoid confusion for future readers of this thread you can mention that the signup process can only be done by being manually added via web interface (in a way that doesn’t require email confirmation).

Maybe after of before the following paragraph:


On a forum I administer we have:

There is a problematic edge, case here when the two are enabled: when a user sends the email to both the mailinglist and a category.

Basically, in our case it created just one topic in the mailing list mirror category and none in the other category. Any suggestions to make it show up on both?

I’m guessing this is a very particular edges that doesn’t happen very often, but I wanted ask either way.

edit: the solution we used was to advise the user not to do this. It’s so edge case that have since never happened again.


It’s possible that Discourse detected the mailing list in the To: or Cc: line and redirected their original email to the mirror category, unfortunately.