The mailing list manager

The IListManager is how you create, delete, and retrieve mailing list objects.

>>> from mailman.interfaces.listmanager import IListManager
>>> from zope.component import getUtility
>>> list_manager = getUtility(IListManager)

Creating a mailing list

Creating the list returns the newly created IMailList object.

>>> from mailman.interfaces.mailinglist import IMailingList
>>> mlist = list_manager.create('[email protected]')
>>> IMailingList.providedBy(mlist)
True

All lists with identities have a short name, a host name, a fully qualified listname, and an RFC 2369 list id. This latter will not change even if the mailing list moves to a different host, so it is what uniquely distinguishes the mailing list to the system.

>>> print(mlist.list_name)
ant
>>> print(mlist.mail_host)
example.com
>>> print(mlist.fqdn_listname)
[email protected]
>>> print(mlist.list_id)
ant.example.com

Deleting a mailing list

Use the list manager to delete a mailing list.

>>> list_manager.delete(mlist)
>>> sorted(list_manager.names)
[]

After deleting the list, you can create it again.

>>> mlist = list_manager.create('[email protected]')
>>> print(mlist.fqdn_listname)
[email protected]

Retrieving a mailing list

When a mailing list exists, you can ask the list manager for it and you will always get the same object back.

>>> list_manager.get('[email protected]')
<mailing list "[email protected]" at ...>

The .get() method is ambidextrous, so it also accepts List-ID’s.

>>> list_manager.get('ant.example.com')
<mailing list "[email protected]" at ...>

You can get a mailing list specifically by its List-ID.

>>> list_manager.get_by_list_id('ant.example.com')
<mailing list "[email protected]" at ...>

And you can get a mailing list specifically by its fully-qualified list name.

>>> list_manager.get_by_fqdn('[email protected]')
<mailing list "[email protected]" at ...>

If you try to get a list that doesn’t existing yet, you get None.

>>> print(list_manager.get('[email protected]'))
None
>>> print(list_manager.get_by_list_id('bee.example.com'))
None

You also get None if the list name is invalid.

>>> print(list_manager.get('foo'))
None

Iterating over all mailing lists

Once you’ve created a bunch of mailing lists, you can use the list manager to iterate over the mailing list objects, the list posting addresses, or the list address components.

>>> mlist_3 = list_manager.create('[email protected]')
>>> mlist_4 = list_manager.create('[email protected]')

>>> for name in sorted(list_manager.names):
...     print(name)
[email protected]
[email protected]
[email protected]

>>> for list_id in sorted(list_manager.list_ids):
...     print(list_id)
ant.example.com
cat.example.com
dog.example.com

>>> for fqdn_listname in sorted(m.fqdn_listname
...                             for m in list_manager.mailing_lists):
...     print(fqdn_listname)
[email protected]
[email protected]
[email protected]

>>> for list_name, mail_host in sorted(list_manager.name_components):
...     print(list_name, '@', mail_host)
ant @ example.com
cat @ example.com
dog @ example.com