Server Fault is a question and answer site for system and network administrators. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

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, 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.

share|improve this question
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 '12 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 '12 at 1:32

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

config_list -i <(echo 'ban_list = [ "^(?!.*[@.]example\.com)", ]' ) listname
share|improve this answer
should include a $ after com in order to prevent passing – Hanno S. Jul 12 at 12:23
up vote 1 down vote accepted

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.

share|improve this answer

Some regex foo should do the trick. Example on the Berkeley MailMan page -

share|improve this answer
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 '12 at 16:44
Thanks mate, was a rushed answer. – Skit Jun 18 '12 at 7:20

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

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