Domains are how Mailman interacts with email host names and web host names.
>>> from operator import attrgetter >>> def show_domains(*, with_owners=False): ... if len(manager) == 0: ... print('no domains') ... return ... for domain in sorted(manager, key=attrgetter('mail_host')): ... print(domain) ... owners = sorted(owner.addresses.email ... for owner in domain.owners) ... for owner in owners: ... print('- owner:', owner) >>> show_domains() no domains
Adding a domain requires some basic information, of which the email host name is the only required piece. The other parts are inferred from that.
>>> manager.add('example.org') <Domain example.org> >>> show_domains() <Domain example.org>
We can remove domains too.
>>> manager.remove('example.org') <Domain example.org> >>> show_domains() no domains
In some Postfix configurations, there is an additional alias host name.
>>> manager.add('example.com', alias_domain='x.example.com') <Domain example.com, alias: x.example.com> >>> show_domains() <Domain example.com, alias: x.example.com>
Domains can have explicit descriptions, and can be created with one or more owners.
Domains can have multiple owners, ideally one of the owners should have a verified preferred address. However this is not checked right now and the configuration’s default contact address may be used as a fallback.
Domains can list all associated mailing lists with the mailing_lists property.
>>> def show_lists(domain): ... mlists = list(domain.mailing_lists) ... for mlist in mlists: ... print(mlist) ... if len(mlists) == 0: ... print('no lists') >>> net_domain = manager['example.net'] >>> com_domain = manager['example.com'] >>> show_lists(net_domain) no lists >>> create_list('[email protected]') <mailing list "[email protected]" at ...> >>> transaction.commit() >>> show_lists(net_domain) <mailing list "[email protected]" at ...> >>> show_lists(com_domain) no lists
In the global domain manager, domains are indexed by their email host name.
>>> for domain in sorted(manager, key=attrgetter('mail_host')): ... print(domain.mail_host) example.com example.net >>> print(manager['example.net']) <Domain example.net, The example domain>
As with dictionaries, you can also get the domain. If the domain does not
None or a default is returned.
>>> print(manager.get('example.net')) <Domain example.net, The example domain> >>> print(manager.get('doesnotexist.com')) None >>> print(manager.get('doesnotexist.com', 'blahdeblah')) blahdeblah