Mailman on ubuntu 16.04

Install apache2

sudo apt install apache2

Install postfix

sudo apt install postfix

Install mailman

sudo apt install mailman

Setup apache

sudo cp /etc/mailman/apache.conf /etc/apache2/sites-available/mailman.conf
sudo a2ensite mailman.conf
sudo a2enmod cgi
sudo a2enmod cgid
sudo service apache2 restart

Activate the MTA option on the mailman config file (/etc/mailman/mm_cfg.py). Write or uncomment this line:

MTA = 'Postfix'

Run the script to generate aliases.

sudo /usr/lib/mailman/bin/genaliases

Use the postconf command to add the necessary configuration to /etc/postfix/main.cf:

sudo postconf -e 'relay_domains = lists.example.com'
sudo postconf -e 'transport_maps = hash:/etc/postfix/transport'
sudo postconf -e 'mailman_destination_recipient_limit = 1'
sudo postconf -e 'alias_maps = hash:/etc/aliases, hash:/var/lib/mailman/data/aliases'

In /etc/postfix/master.cf double check that you have the following transport:

mailman   unix  -       n       n       -       -       pipe
  flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py
  ${nexthop} ${user}

Edit the file /etc/postfix/transport:

lists.example.com      mailman:

Now have Postfix build the transport map

sudo postmap -v /etc/postfix/transport

Then add mailman aliases in /etc/aliases

mailman:              "|/var/lib/mailman/mail/mailman post mailman"
mailman-admin:        "|/var/lib/mailman/mail/mailman admin mailman"
mailman-bounces:      "|/var/lib/mailman/mail/mailman bounces mailman"
mailman-confirm:      "|/var/lib/mailman/mail/mailman confirm mailman"
mailman-join:         "|/var/lib/mailman/mail/mailman join mailman"
mailman-leave:        "|/var/lib/mailman/mail/mailman leave mailman"
mailman-owner:        "|/var/lib/mailman/mail/mailman owner mailman"
mailman-request:      "|/var/lib/mailman/mail/mailman request mailman"
mailman-subscribe:    "|/var/lib/mailman/mail/mailman subscribe mailman"
mailman-unsubscribe:  "|/var/lib/mailman/mail/mailman unsubscribe mailman"

Fix permissions of aliases files and restart postfix

sudo chown root:list /var/lib/mailman/data/aliases
sudo chown root:list /etc/aliases
sudo newaliases
sudo /etc/init.d/postfix restart

Create mailman list

$ sudo newlist mailman mailmanadm@mydomain.com
  Enter the email of the person running the list: bhuvaneswaran at NOSPAM gmail.com
  Initial mailman password:
  To finish creating your mailing list, you must edit your /etc/aliases (orequivalent) file by adding the following lines, and possibly running the `newaliases' program:

  ## mailman mailing list
  mailman:              "|/var/lib/mailman/mail/mailman post mailman"
  mailman-admin:        "|/var/lib/mailman/mail/mailman admin mailman"
  mailman-bounces:      "|/var/lib/mailman/mail/mailman bounces mailman"
  mailman-confirm:      "|/var/lib/mailman/mail/mailman confirm mailman"
  mailman-join:         "|/var/lib/mailman/mail/mailman join mailman"
  mailman-leave:        "|/var/lib/mailman/mail/mailman leave mailman"
  mailman-owner:        "|/var/lib/mailman/mail/mailman owner mailman"
  mailman-request:      "|/var/lib/mailman/mail/mailman request mailman"
  mailman-subscribe:    "|/var/lib/mailman/mail/mailman subscribe mailman"
  mailman-unsubscribe:  "|/var/lib/mailman/mail/mailman unsubscribe mailman"

  Hit enter to notify mailman owner...

Edit /etc/aliases and run

$ sudo newaliases

Start mailman

$ sudo /etc/init.d/mailman start

Start mailman qrunner

$ sudo /var/lib/mailman/bin/mailmanctl start

Add members to list

$ vi ~/members
user1@mydomain.com
user2@mydomain.com

$ sudo /var/lib/mailman/bin/add_members -r ~/members -w y -a y mailman

Mailmain script location

/var/lib/mailman/bin

Change site password

sudo ./mmsitepass

Change list passoword

sudo ./change_pw -l <list name> -p <new password>

Discard pending post

sudo ./discard /var/lib/mailman/data/heldmsg-<list name>-<msg number>.pck

Reference:  https://help.ubuntu.com/community/Mailman