Skip to content

Mailman 3 Web UI

This image consists of Mailman3's Web UI(Postorius) and Archiver (Hyperkitty). This image is built from latest sources on gitlab. In future, latest and stable releases will be seperate. I am looking forward to the release of Mailman Suite 3.1 before that.


These are the settings that you MUST change before deploying:

  • SERVE_FROM_DOMAIN: The domain name from which Django will be served. To be added to ALLOWED_HOSTS in django settings. Default value is not set. This also replaces Django's default SITE and becomes the default SITE (with SITE_ID=1).

  • HYPERKITTY_API_KEY: Hyperkitty's API Key, should be set to the same value as set for the mailman-core.

  • MAILMAN_ADMIN_USER: The username for the admin user to be created by default.

  • MAILMAN_ADMIN_EMAIL: The email for the admin user to be created by default.

  • SECRET_KEY: Django's secret key, mainly used for signing cookies and others.

These are the settings that are set to sane default and you do not need to change them unless you know what you want.

  • DATABASE_URL: URL of the type driver://user:password@hostname:port/databasename for the django to use. If not set, the default is set to sqlite:///opt/mailman-web-data/mailmanweb.db. The standard docker-compose.yaml comes with it set to a postgres database. It is not must to change this if you are happy with PostgreSQL.

  • MAILMAN_REST_URL: The URL to the Mailman core's REST API server. Defaut value is http://mailman-core:8001.

  • MAILMAN_REST_USER: Mailman's REST API username. Default value is restadmin

  • MAILMAN_REST_PASSWORD: Mailman's REST API user's password. Default value is restpass

  • MAILMAN_HOSTNAME: IP of the Container from which Mailman will send emails to hyperkitty (django). Set to mailman-core by default.

  • SMTP_HOST: IP Address/hostname from which you will be sending emails. Default value is the container's gateway retrieved from: /sbin/ip route | awk '/default/ { print $3 }'

  • SMTP_PORT: Port used for SMTP. Default is 25.

  • SMTP_HOST_USER: Used for SMTP authentication. Default is an empty string.

  • SMTP_HOST_PASSWORD: Default is an empty string.

  • SMTP_USE_TLS: Specifies wheather the SMTP connection is encrypted via TLS. Default is False. (EMAIL_USE_TLS/EMAIL_USE_SSL are mutually exclusive, so only set one of those settings.)

  • SMTP_USE_SSL: Specifies wheather the SMTP connection is encrypted via SSL. Default is False. (EMAIL_USE_TLS/EMAIL_USE_SSL are mutually exclusive, so only set one of those settings.)

  • DJANGO_LOG_URL: Path to the django's log file. Defaults to /opt/mailman-web-data/logs/mailmanweb.log.

  • DJANGO_ALLOWED_HOSTS: Entry to add to ALLOWED_HOSTS in Django configuration. Format as comma-separated list (no whitespace). This is a separate configuration fromSERVE_FROM_DOMAIN as latter is used for other purposes too.

  • POSTORIUS_TEMPLATE_BASE_URL: The base url at which the mailman-web container can be reached from mailman-core container. This is set to http://mailman-web:8000 by default so that Core can fetch templates from Web.

  • DISKCACHE_PATH and DISKCACHE_SIZE: Django Diskcache location path and size respectively. Defaults are /opt/mailman-web-data/diskcache and 1G.

Social Auth

In order to separate INSTALLED_APPS from the social authentication plugins a new settings MAILMAN_WEB_SOCIAL_AUTH is created. This includes all the enabled social auth plugins.

Disable social auth

In order to disable social auth, you can add the following to your


In older versions of continer images (0.3.*), you had to override INSTALLED_APPS in order to disable social auth, but addition of this new setting will make it easier to disable social auth making sure that you get any updates to the django apps that are added in future.

The default behavior will remain the same as 0.3 release if you have not overriden INSTALLED_APPS though.


It is highly recommended that you run this using the docker-compose.yaml provided in the github repo of this project. You will need to proxy the requests the container that you create with this image using an actual web server like Nginx. The github repo provides the setup instructions for Nginx.

Since the setup has USE_SSL set to True in django's, you may also want to get a SSL certificate if you don't already have one. Lets Encrypt provides free SSL certiticates for everyone and there are some instructions about that also.

After the first run, you can create a superuser for django using the following command:

$ docker exec -it mailman-web python3 createsuperuser

Django management commands

In order to run Django management commands in the mailman-web container, you can run following:

$ docker exec -it mailman-web python3 <command>

And replace <command> with the appropriate management command.

Importing Archives from Mailman 2

In order to import archvies from Mailman 2, you need to get the listname.mbox file in a location that is readable inside mailman-web container.

Please place listname.mbox file at /opt/mailman/web on the host. Verify that the file is present inside the mailman-web contianer by running:

$ docker exec -it mailman-web ls /opt/mailman-web-data

And verify that you can see listname.mbox in the ls output above. After you have verified that, you can then run the hyperkitty_import command to do the actual import:

$ docker exec -it mailman-web python3 hyperkitty_import -l listname@domain /opt/mailman-web-data/listname.mbox

This should take some time to import depending on how many emails are in the archives.