Is there any way to restrict a mailman mailing list to only allowing subscriptions from one specific domain?

I know how to ban specific email addresses or domains from subscribing, but is there a way to ban all domains that aren't, say, example.com? Or maybe a couple specific domains?

We're starting to get hit by subscription attempts to some of our lists from what I'm sure are spammers on botnets1 and it's annoying list owners. Some lists are configured with a subscribe_policy of "Require approval" or "Confirm and approve" because the lists are intended to be only for our local users and it would be nice to minimize the annoyance of the list owners by automatically rejecting subscriptions from outside email addresses that won't be allowed to subscribe by the list owner anyways.

We can't simply restrict access to the local networks because we have lists intended for a worldwide audience and some of our "local" users can be anywhere.

1 One email address subscribes to a couple dozen unrelated lists from different IPs over a few hours; then the next day another round with a new email address and different IPs. In a few cases list owner has emailed them a question about why they were signing up for the list and received no reply.

  • Have you considered simply hiding your internal lists from being advertised on the web interface? Or to put it differently, how are they finding your internal lists in the first place?
    – Zoredache
    Jun 8, 2012 at 0:27
  • @Zoredache: yes. Might do that for some, but when "internal" is a population of thousands, list advertisement is useful I'm also assuming the spammers have the list names saved now.
    – freiheit
    Jun 8, 2012 at 1:32

4 Answers 4


Mailman uses Python's regular expression engine, which is flexible enough to match everything except a certain domain.

Put something like this in the ban_list for the list: ^(?!.*example\.edu) or: ^(?!.*(example\.edu|example\.com))

If lists are restricted and getting spam subscriptions, you may want to not advertise the list in mailman (make the link available elsewhere). Setting the mailing list subscription policy to "Confirm and Approve" instead of "Approve" so that spammers have to handle a piece of email before the list owner is annoyed can help, too.


Other answers will not stop an email address like "enemy@xxxexample.com". This will: ^(?!.*[@.]example\.com) (assumes all subdomains of example.com are okay). To apply run:

config_list -i <(echo 'ban_list = [ "^(?!.*[@.]example\.com)$", ]' ) listname
  • 2
    should include a $ after com in order to prevent passing test@example.com.spammer.bar
    – Hanno S.
    Jul 12, 2016 at 12:23

Some regex foo should do the trick. Example on the Berkeley MailMan page - https://calmail.berkeley.edu/docs/mailman/regexp.html#settings

  • 2
    Whilst this may theoretically answer the question, it would be preferable to include the essential parts of the answer here, and provide the link for reference. Simply put ^(?!.*example\.edu) or ^(?!.*(example\.edu|example\.com)) in the ban list?
    – freiheit
    Jun 8, 2012 at 16:44

See the GNU Mailman Wiki how to restrict membership to a single domain - only emails from that domain will be able to subscribe:

Go to the mailing list administration privacy options, for example in redhat.com:

https:// listman.redhat.com/mailman/admin/your-mail-list/privacy/subscribing

In the Ban list enter:


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.