Mailman 3?

Just curious — are there any plans for Virtualmin to support Mailman 3 for mailing lists (yeah, as far as I know none of the distributions include it yet but ---- just curious if this is at all in the pipeline?)


We hadn’t talked about it, but I’m sure it will be supported.

Do you know if any distros are talking about using it?

And any idea what has changed?

But yeah we’ll take a look into that, thanks for the heads up!


It’s pretty much a complete rewrite, particularly from the web viewpoint - the web interface is not part of mailman any more but is a separate entity. So I think it’ll probably require a considerable rewrite of the Webmin/Virtualmin environment. It’s been on my radar of things to play with, but hasn’t reached the point where I’ve been willing to take the time (something I’m sure you’re all familiar with). This isn’t a pressing issue, just wanted to see if I could stick it into your radar. There ARE packages available for Ubuntu/debian-ish distros at the moment, so I expect people will start asking for it soon.



Ah, very interesting!

Mailman never fit into shared hosting environments very easily, Virtualmin had to jump through some pretty big hoops to make it work.

So I’m curious if this new version makes some of that a bit simpler.

Yeah we’ll take a look at that, thanks for the heads up!


Just installed Mailman 3.1 + Postorius + Hyperkitty on Nginx with MySQL support on Virtualmin [CentOS 6 x86_64]

Do it separately! its better that way. Don’t do the bundle installation

MySQL support for Mailman3

$ vi /home/mailman3/mailman/src/mailman/database/

“”“MySQL database support.”""

all = [

from mailman.database.base import SABaseDatabase
from mailman.database.model import Model
from sqlalchemy import Integer

class MySQLDatabase(SABaseDatabase):
“”“Database class for MySQL.”""

def _post_reset(self, store):
    """MySQL-specific test suite cleanup.

    Reset the <tablename>_id_seq.last_value so that primary key ids
    restart from zero for new tests.
    super(MySQLDatabase, self)._post_reset(store)
    tables = reversed(Model.metadata.sorted_tables)
    for table in tables:
        for column in table.primary_key:
            if (column.autoincrement
                    and isinstance(column.type, Integer)
                    and not column.foreign_keys):
                    ALTER table {0} AUTO_INCREMENT = 1;

Hope this helps you guys